【问题标题】:Amazon Web Services - Tag a S3 bucket with its own name within a CloudFormationAmazon Web Services - 在 CloudFormation 中使用自己的名称标记 S3 存储桶
【发布时间】:2019-02-12 07:34:54
【问题描述】:

我目前正在使用 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]

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

有人有想法吗?

【问题讨论】:

  • 你不想使用 BucketName 的原因是什么?
  • 我计划将 cloudFormation 用于大型部署(每个客户端 1 个 CFN),并且我不想自己生成 BucketName 以确保该存储桶不存在。
  • 您可以使用 lambda 支持的自定义资源来执行此操作。您需要使用名称标记存储桶的原因是什么?

标签: amazon-web-services amazon-s3 amazon-cloudformation


【解决方案1】:

您可以使用 CloudFormation pseudo parameters 为 BucketName 和 Name 标签值生成唯一名称。这类似于模板自动生成的内容。这也保证了名称的唯一性,因为与区域组合的堆栈名称对于 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" }]]}}
    ]
  }
}

【讨论】:

  • 您确定 CFN 将允许 BucketName 参数中的大写字母吗?以及如何检查长度不会超过限制?
【解决方案2】:

您可以使用 stack 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"
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2020-11-10
    • 2022-06-21
    • 1970-01-01
    • 2013-01-21
    • 2020-01-15
    • 1970-01-01
    相关资源
    最近更新 更多