我目前正在与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”属性指定自定义名称。
没有任何人有一个想法?
您可以使用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" }]]}}
]
}
}
您可以使用堆栈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