在 cloudformation 模板中使用环境变量

Use env variables inside cloudformation templates

我有一个具有多个分支的放大应用程序。

我已使用 amplify add custom

添加了自定义 cloudformation 模板

看起来像:

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": { "env": { "Type": "String" } },
  "Resources": {
    "db": {
      "Type": "AWS::Timestream::Database",
      "Properties": { "DatabaseName": "dev_db" }
    },
    "timestreamtable": {
      "DependsOn": "db",
      "Type": "AWS::Timestream::Table",
      "Properties": {
        "DatabaseName": "dev_db",
        "TableName": "avg_16_4h",
        "MagneticStoreWriteProperties": { "EnableMagneticStoreWrites": true },
        "RetentionProperties": {
          "MemoryStoreRetentionPeriodInHours": "8640",
          "MagneticStoreRetentionPeriodInDays": "1825"
        }
      }
    }
  },
  "Outputs": {},
  "Description": "{\"createdOn\":\"Windows\",\"createdBy\":\"Amplify\",\"createdWith\":\"8.3.1\",\"stackType\":\"custom-customCloudformation\",\"metadata\":{}}"
}

你可以看到有一个字段叫做DatabaseName。在我的放大应用程序中,我编写了一个名为 TIMESTREAM_DB 的环境变量,我想在这个 cloudformation 文件中使用它。

这可能吗,还是我需要全部手写进去?

模板无法访问任意环境变量。相反,CloudFormation 将 deploy-time 值注入到具有 Parameters.

的模板中

Amplify 有助于将 env 变量添加为参数。 A la Amplify docs,使用 env 值作为 AWS::Timestream::Database 名称后缀:

"DatabaseName": "Fn::Join": [ "", [ "my-timestream-db-name-", { "Ref": "env" } ] ]

AWS::Timestream::Table 资源还需要一个 DatabaseName 参数。您可以重复上面的操作,但是获取名称 via the Database's Ref:

更枯燥
"DatabaseName": { "Ref" : "db" }