Site icon Mr. 沙先生

CloudFormation StackSet/Stack 如何更新 template 變更

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 上。

Exit mobile version