CloudFormation StackSets 是 AWS 用來部署 Mlulti-Region/Account 的方法,透過 Administrator account 集中控管並且監控 CloudFormation Stack 的執行狀況非常適合企業作為管理使用。
在 CloudFormation StackSets 中,每一個 deploy 都是一個 Stack instance 可以想做是 Target account,在案例中可以用 CloudFormation template 撰寫成模板利用參數化來部署到每一個 Account,由於每一個 deploy 都是獨立的 CloudFormation Stack 彼此並不會互相影響。
由於 CloudFormation StackSet、Stack 以及 Template 存在於多個層級的關係,在這篇記錄一下常見被客戶問到幾個問題關於 CloudFormation StackSets 和 template 使用上的問題:
Template 變更時,如何更新 CloudFormation StackSets 應用新版的 template?
CloudFormation StackSets –> CloudFormation Stack
從 AWS CLI 看到 aws cloudformation update-stack-set 內針對 template 的更新有兩個參數 [–use-previous-template | –no-use-previous-template],使用 --no-use-previous-template
時 CloudFormation StackSet 會重新讀取 TemplateBody / TemplateURL 的內容,即便位置相同也會重新抓取:
$ aws cloudformation update-stack-set \
--stack-set-name BucketSimple \
--template-url <CloudFormation-Template-Bucket-URL> \
--no-use-previous-template \
--parameters ParameterKey=S3BucketName,ParameterValue=stackset \
--deployment-targets OrganizationalUnitIds=<OU-Ids>\
--regions us-east-1
CloudFormation Stack 部署 StackSets resource 時,如何更新 template?
再另一種情境是用 CloudFormation Stack 部署多個 CloudFormation StackSets 時,Template 該如何更新?
CloudFormation Stack –> CloudFormation StackSets –> CloudFormation Stack
從架構上又多了一層 CloudFormation Stack,所以控制介面變成了 CloudFormation Stack 就不能用 aws cloudformation update-stack-set 來更新 template,從 CloudFormation Stack 就必須要有 template 上的差異來產生 change set
讓 CloudFormation StackSet 去拉存放在 Amazon S3 的 template,最簡單的方法就是讓每次的 deploy 的 template path 都不同:
s3://bucket/template-v1.0.1.yaml
s3://bucket/template-v1.0.2.yaml
s3://bucket/template-v1.0.3.yaml
利用 Template URL 的不同來產生 change set,同時也保留每一個 template 的版本在 Amazon S3 上。