リソースの規模が大きくなるほどコードは長くなるので、可読性は悪くなります。そうなると一部リソースは、ファイルを切り分けて書きたくなることがあります。その場合、テンプレート(スタック)を分けるという手法もありますが、この記事ではネストという仕組みをご紹介したいと思います
イメージ図
root.yamlを基本のテンプレートとし、vpc.yamlとsg.yamlをネストさせています。
コード
本記事では構成からコードまで下記記事から拝借したので、ここでは割愛します。
スタック作成
この記事ではスタックをCLIで作成していきます。
参考
①S3にネストされるファイルをアップロード
まずはネストされるファイルをS3にアップロードします。ネストされたファイルはディレクトリに格納しておくとコマンドを短くできるのでおすすめです。--recursiveオプションでディレクトリ配下のファイルをコピー可能です。
aws s3 cp ネストされたファイルが存在するローカルディレクトリ s3://バケット名 --recursive
②スタック作成
あとは通常通りスタックを作成します。ネストされるオブジェクトURLをパラメータにしているので、パラメータファイルを別で作成し、コマンド内で取得させます。
aws cloudformation deploy --stack-name test-stack --template-file root.yaml --parameter-overrides $(cat parameter.yaml)
パラメータはこんな感じ。
TemplateSG=https://バケット名.s3.ap-northeast-1.amazonaws.com/sg.yaml
TemplateVPC=https://バケット名.s3.ap-northeast-1.amazonaws.com/vpc.yaml
これでネストされたスタックの作成は完了です。スタック単位での分割とネストの使いわけですが、大きいレイヤーであればスタック単位、小さい単位であればネストという考え方でよいかと思います。
具体的なリソースを出すとスタック単位でIAM、ネットワーク、CW、EC2あたりを分割。さらにこれらのリソースを分割する場合はネストさせます。大規模な環境であればIAMやRT、CW、SGあたりはコードが非常に長くなるので、ネストという手法を大いに生かせそうです。
スタックを分割させると依存関係がある場合、これを成立させる必要があります。この内容に関してもまた別途記事を書いてみようと思います