[英]AWS Cloudformation Template with variable from current CFT
我很难确定在应用新的变更集模板时如何使用当前堆栈中的值。 可以想象,要重新应用新集合,将需要使用堆栈的许多当前配置参数。 但是,我真的找不到关于如何执行此操作的权威文档。
到目前为止,我正在寻找类似的东西。
"DomainName": {
"Value": {"Ref": "AWS::S3::Bucket::DomainName"}
}
我希望变更集生成器将使用该Ref值来获取已配置S3存储桶的当前域名。
也许这根本不是变更集的工作方式? 我可以想象该配置在运行时与先前的配置合并,因此您应该可以访问某些先前的实例变量?
谢谢。
您在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
,则可以在MyBucket
资源上使用Ref
内部函数。 例如,我们可以创建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
资源中,我没有写"Bucket" : "my-bucket-name",
实际上我想在那里引用MyBucket
。 部署模板时, { "Ref" : "MyBucket" }
引擎会将{ "Ref" : "MyBucket" }
值替换为"my-bucket-name"
。
某些资源提供了额外的Return Values
(属性),可以使用Fn::GetAtt
内部函数访问这些值。 AWS :: S3 :: Bucket额外的返回值/属性为:
Fn::GetAtt
内在函数的语法如下所示:
{ "Fn::GetAtt" : [ "logicalNameOfResource", "attributeName" ] }
为了从"AWS::S3::Bucket
资源"AWS::S3::Bucket
获取DomainName
,您需要这样做:
{ "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" ] }
}
}
}
您将在AWS Resource Types Reference中找到有关所有Resources
,其Properties
和Return Values
(可通过Ref
以及Fn::GetAtt
函数访问)的信息。
希望这可以帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.