在应用新的更改集模板时,我很难弄清楚如何使用当前堆栈中的值。可以想象,重新应用新集合需要堆栈的许多当前配置参数。但是,我无法找到关于如何执行此操作的权威文档。
到目前为止,我正在看这样的事情。
"DomainName": {
"Value": {"Ref": "AWS::S3::Bucket::DomainName"}
}
我希望更改集生成器使用此Ref值来获取已配置的S3存储桶的当前域名。
也许这不是改变集的工作方式?我认为配置在运行时与先前的配置合并,所以你应该可以访问一些以前的实例变量?
感谢。
答案 0 :(得分:1)
您在CloudFormation模板中定义的内容称为Resources
。
资源示例如下:
在CloudFormation模板中声明它们时,您定义的每个资源都有Properties
。我们以AWS::S3::Bucket
资源为例。
{
"Resources" : {
"MyBucket" : {
"Type" : "AWS::S3::Bucket",
"Properties" : {
"BucketName" : "my-bucket-name"
}
}
}
}
BucketName
是“MyBucket”资源的属性。
资源通常也有Return Values
。您可以在CloudFormation模板中使用返回值来构建交叉引用逻辑和资源之间的关系。每个资源通常都有一个“默认”返回值,当您使用模板中的Ref
内部函数引用某个资源时,将返回此值。如果是AWS::S3::Bucket
资源,则此“默认”返回值只是BucketName
。这意味着,如果您希望在模板中的其他位置使用my-bucket-name
,则可以在Ref
资源上使用MyBucket
内在函数。例如,我们可以创建AWS::S3::BucketPolicy
资源,BucketName
(实际上Bucket
)是AWS::S3::BucketPolicy
的属性之一。那我们就这样做:
{
"Resources" : {
"MyBucket" : {
"Type" : "AWS::S3::Bucket",
"Properties" : {
"BucketName" : "my-bucket-name"
}
},
"MyBucketPolicy" : {
"Type" : "AWS::S3::BucketPolicy",
"Properties" : {
"Bucket" : { "Ref" : "MyBucket" },
"PolicyDocument" : JSON_STRUCTURE_SKIPPED_FOR_CLARITY
}
}
}
}
请注意,我没有在"Bucket" : "my-bucket-name",
资源中写MyBucketPolicy
,我实际上想在那里引用MyBucket
。
我部署模板时,CloudFormation引擎会将{ "Ref" : "MyBucket" }
值替换为"my-bucket-name"
。
某些资源提供额外的Return Values
(属性),可以使用Fn::GetAtt
内在函数访问这些值。 AWS::S3::Bucket额外的返回值/属性是:
Fn::GetAtt
内在函数的语法如下所示:
{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
要从DomainName
资源获取"AWS::S3::Bucket
,您可以这样做:
{ "Fn::GetAtt" : [ "MyBucket", "DomainName" ] }
您可以在CloudFormation堆栈输出部分中使用DomainName
。完整示例如下:
{
"Resources" : {
"MyBucket" : {
"Type" : "AWS::S3::Bucket",
"Properties" : {
"BucketName" : "my-bucket-name"
}
},
"MyBucketPolicy" : {
"Type" : "AWS::S3::BucketPolicy",
"Properties" : {
"Bucket" : { "Ref" : "MyBucket" },
"PolicyDocument" : JSON_STRUCTURE_SKIPPED_FOR_CLARITY
}
}
},
"Outputs" : {
"MyBucketDomainName" : {
"Description" : "Domain name of my bucket",
"Value" : { "Fn::GetAtt" : [ "MyBucket", "DomainName" ] }
}
}
}
您可以在{{3>中找到有关所有Resources
,Properties
和Return Values
(这些可通过Ref
以及Fn::GetAtt
功能访问)的信息}}
希望这有帮助!