从值动态创建资源名称

时间:2017-06-04 15:50:57

标签: amazon-cloudformation

我的最终目标是从cloudformation脚本创建策略文档。我想有一个脚本,其中选择参数,该值用于资源的名称。

" ARN:AWS:dynamodb:US-东-1:12345678:表/ monit的 - $ {dev的} /流/ *"

其中$ {dev}是参数值

Parameters: Environment: Default: dev Description: Leveraged for environment tagging. Type: String AllowedValues: - dev - tst - qa - stg - prd

我想尝试类似下面的内容,但不知道如何从参数中添加Ref环境,还是有其他方法?

' Fn :: Sub':' arn:aws:dynamodb:$ {AWS :: Region}:$ {AWS :: AccountId}'

所以我最终不得不创建一堆不同的脚本

    PolicyDocument:
      Statement:
      - Effect: Allow
        Action:
        - dynamodb:DescribeStream
        - dynamodb:GetRecords
        - dynamodb:GetShardIterator
        - dynamodb:ListStreams
        - dynamodb:Scan
        #This will need to changed for other tables
      Resource:
         - "arn:aws:dynamodb:us-east-1:12345678:table/monit-dev/stream/*"
         - "arn:aws:dynamodb:us-east-1:12345678:table/monit-dev"

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以使用Fn :: Join添加"环境"值。你不要使用自己的价值参考。

内部函数Ref返回指定参数或资源的值。

当您指定参数的逻辑名称时,它将返回参数的值。 指定资源的逻辑名称时,它会返回一个通常用于引用该资源的值,例如物理ID。

json示例:

    "CustomInstanceProfileArn": {
      "Fn::Join": [
        "", ["arn:aws:iam::", {
            "Ref": "AWS::AccountId"
          },
          ":instance-profile/", {
            "Ref": "InstanceProfile"
          }
        ]
      ]
    },

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference-ref.html

相关问题