[英]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.