2014-09-05 23 views
0

由于我想用自己的名称标记存储桶(以便在我的成本分配报告中分离其成本),我目前正在与AWS CloudFormation合作。亚马逊网络服务 - 在CloudFormation中标记具有自己名称的S3存储桶

当我做

"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”属性指定自定义名称。

有没有人有想法?

+0

你不想使用BucketName的原因是什么? – Jason 2014-10-15 16:44:40

+0

我打算为大型部署使用cloudFormation(每个客户端1个CFN),我不想自己生成BucketName以确保存储桶不存在。 – 2014-10-15 17:39:26

回答

0

您可以使用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" }]]}} 
    ] 
    } 
} 
+0

您确定CFN将允许BucketName参数中的大写字母吗?我如何检查长度不会超过限制? – 2014-10-22 16:33:07