亚马逊网络服务 - 标签一个S3桶有自己的名称CloudFormation内(Amazon Web

2019-10-20 21:01发布

我目前正在与AWS CloudFormation战斗,因为我要来标记自己的名字桶(以我的成本分摊报告分开的成本)。

当我做

"MyBucket" : {
        "Type" : "AWS::S3::Bucket",
            "Properties" : {
                "AccessControl" : "Private",
                "Tags" : [
                    { "Key" : "Name", "Value" : { "Ref" : "MyBucket" } }
                ]
        }
    },  

所述CloudFormation向导引发以下错误:

Error
Template validation error: Circular dependency between resources: [MyBucket]

真正的问题是,我想保持生成的名称(如我的桶,15jsi17g9cby0)不通过“BucketName”属性指定自定义名称。

没有任何人有一个想法?

Answer 1:

您可以使用CloudFormation 伪参数,生成用于BucketName和名称标签值的唯一名称。 这是类似于模板自动生成。 这也保证了一个独特的名字,因为堆栈名称与区域相结合必须是唯一的CloudFormation。 如果你只使用一个区域,你可以放下区域参考。

"MyBucket" : {
  "Type" : "AWS::S3::Bucket",
  "Properties" : {
    "BucketName" : { "Fn::Join" : [ "-", [{ "Ref" : "AWS::StackName" }, "s3", { "Ref" : "AWS::Region" }]]},
    "AccessControl" : "Private",
    "Tags" : [
      { "Key" : "Name", "Value" : { "Fn::Join" : [ "-", [{ "Ref" : "AWS::StackName" }, "s3", { "Ref" : "AWS::Region" }]]}}
    ]
  }
}


Answer 2:

您可以使用堆栈ID参数和加入它,形成了独特的ID。 例如

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Resources": {
    "MyBucket": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": {
            "Fn::Join": [
            "-",
            [
              "my-bucket-name",
              {
                "Fn::Select": [
                  "2",
                  {
                    "Fn::Split": [
                      "/",
                      { "Ref": "AWS::StackId" }
                    ]
                  }
                ]
              }
            ]
          ]
        },
        "AccessControl": "Private"
      }
    }
  }
}


文章来源: Amazon Web Services - Tag a S3 bucket with its own name within a CloudFormation