結論
aws cli のコマンド package
で出来るよ!!!
package — AWS CLI 1.11.91 Command Reference
発端
CloudFormation の仕組みとして入れ子、つまり CloudFormation から CloudFormation をデプロイするができますが、その子供のほうが S3 に上がっている必要があります。
この S3 に上げるツールが色々あったり、自作できるレベルと思いつついやしかし…と考えていました。
解決策
その解決策して、冒頭に上げたコマンドがあります。
CHANGELOG を見る限りバージョン 1.11.19、去年の11月に追加されたみたいです。
使い方です。
フォルダ構成が以下のようになっている、とします。
.
├── README.md
├── sub
│ └── child.template
└──root.yaml
root.yaml
が纏める CloudFormation です。
その中に child.template
の情報が書いてあります。
実際にはこんな感じ。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
myStack:
Type: AWS::CloudFormation::Stack
Properties:
TemplateURL: ./sub/child.template
TimeoutInMinutes: '60'
Outputs:
StackRef:
Value: !Ref myStack
この状態で、以下のコマンドをたたきます。
aws cloudformation package --template-file root.yaml --s3-bucket hogehoge-cfn
すると、TemplateURL: ./sub/child.template
でおいていた子供のテンプレートが S3 にアップされて、それを適用するためのテンプレートが標準出力されます。
AWSTemplateFormatVersion: '2010-09-09'
Outputs:
StackRef:
Value:
Ref: myStack
Resources:
myStack:
Properties:
TemplateURL: https://s3.amazonaws.com/hogehoge-cfn/265b570db3b28df28e47c3f8e5032e65.template
TimeoutInMinutes: '60'
Type: AWS::CloudFormation::Stack
これでデプロイができます。