親テンプレートの作成VPCテンプレートの作成サブネットテンプレートの作成EC2テンプレートの作成セキュリティグループテンプレートの作成スタック作成の準備をするスタックの作成まとめCloudFormationでスタックをネストし、EC2を起動させてみた本記事では、CloudFormationのベストプラクティスの1つである「ネストされたスタックを使用して共通テンプレートパターンを再利用する」という項目について実践してみます。CloudFormation#AWS森田力2021.10.29この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。CloudFormationでのスタックのネストCloudFormationでは、スタックをネストさせること可能です。ネストさせる際には、テンプレート(ファイル)を分割して記述することができるので、一度作成したテンプレートを使い回すことができます。本記事では、実際にスタックをネストし、EC2の起動を行なっていきます。Subnet上に立てます。Subnetも構築します。各リソースのテンプレート作成ファイル構成は以下のように行います。vpc.yamlEC2を作成する際に、セキュリティグループのテンプレートを呼び出すようにします。各テンプレートを呼び出す親テンプレートを作成します。PublicSubnet.Outputs.SubnetIDVPCテンプレートの作成VPCのIDを渡すのでOutputsに指定しています。VPCサブネットテンプレートの作成パブリック、プライベートサブネットそれぞれの作成を行います。PublicSubnetEC2テンプレートの作成EC2では、セキュリティグループのテンプレートを呼び出すように記述します。動作確認のため、LAMPを構築するようにユーザデータを指定します。TagNameセキュリティグループテンプレートの作成セキュリティグループのIDをEC2に渡す必要があるため、Outputsで指定します。バケットへアップロードします。s3://nested-stack-artifactバケット作成後、下記コマンドでアップロードします。正常に実行できると、artifact.ymlが作成されています。中身を見てみると、先ほどまでローカルファイルを指定していたものがs3のファイル参照に変更されていることが確認できます。Outputs.SubnetIDスタックの作成では、最後にスタックの作成を行います。先程のartifact.ymlを指定します。nested-stack-demoコンソール上を確認すると、作成したスタックとネストされたスタックが確認できます。待つと、CREATE_COMPLETEとなります。まとめ本記事では、ネスタされたスタックを作成してみましたが、再利用できるのは非常に魅力的だと感じました。一方で、どこまで分割していくかが悩ましいところです。細かく分割してしまうと、逆にファイルの管理が大変になりそうですので、機能ごとにスタックをまとめて、再利用していくのが良さそうです。