【AWS_39】AWS CloudFormation を試してみる

CloudFormation を机上の勉強だけでなく、実際に試してみたいと思い、以下サイトを参考にさせていただきました。
YAMLファイルを利用したCloudFormationによるインフラ構築の手順や設定ファイルの書き方、拡張の仕方などの基本的な部分を解説してくれています。
YAMLファイルって?という私が読んでも試すことができたのでとても助かりました。
CloudFormation を試すと言っても何から試せばいいのかとなると思います。今回は気になった以下3点を試してみました。
・CloudFomationコンソールを利用してVPCのみ作成する
・AWS CLIを利用してVPCのみ作成する
・クロススタック参照を試す
【CloudFormation入門】5分と6行で始めるAWS CloudFormationテンプレートによるインフラ構築
https://dev.classmethod.jp/articles/cloudformation-beginner01/
CloudFormationの全てを味わいつくせ!「AWSの全てをコードで管理する方法〜その理想と現実〜」
https://dev.classmethod.jp/articles/aws-all-iac/
AWS CloudFormationのスタックを分割してインフラのスクラップアンドビルドをやりやすくする
https://qiita.com/3244/items/c9e9428dd94ae4a7120a
目次
テンプレートとスタック
・テンプレート
JSONやYAML形式のテキストファイル。リソースやパラメータなど定義、設定を記載する。
・スタック
CloudFormationでテンプレートを読み込み作成されるリソースの集合のこと。
スタックを実行するとリソースが作成され、スタックを削除すると作成していたリソースは削除される。
CloudFamationコンソールから作成する
テンプレートの作成
VPCだけを構築するテンプレートファイルを作成して、任意のファイル名「01_vpc.yaml」としてデスクトップなどに保存しておきます。
内容としては、名前「first-VPC」、CIDR「10.0.0.0/16」のVPCという意味になります。
01_vpc.yaml
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: first-VPC
スタックの作成と実行
Cloudformationコンソールでスタックを新規作成します。新規作成するとそのまま実行されてリソースも作成されました。
(おそらく作成だけで実行させない方法もあるのだろうと思いますが、現時点ではわかっておりません・・・)
AWSマネジメントコンソールで「cloudformation」を検索します。
左ペインのスタックをクリックし、画面右上の「スタックの作成」をクリックします。

スタックの作成画面で以下のとおり選択し、次へをクリックします。
前提条件 – テンプレートの準備
テンプレートの準備:既存のテンプレートを選択

テンプレートの指定
今回、テンプレートファイルはデスクトップに保存されている状態で進めています。
(先にS3バケットへアップロードしていても指定は可能です。)
テンプレートソース:テンプレートファイルのアップロード
ファイルの選択からデスクトップに保存したYAMLファイルを選択します。

アップロード先は、S3バケットとなるため自動でS3バケットが作成されます。
補足:S3バケットの状況

スタックの詳細を指定画面で以下のとおり選択し、次へをクリックします。
スタック名を提供
スタック名:vpc

スタックオプションの設定画面は、デフォルトのまま「次へ」をクリックします。


確認して作成画面で内容を確認し、「送信」をクリックします。



スタックが作成されて状態が「CREATE_IN_PROGRESS」となります。

スタックは作成と同時に実行されているので処理が完了すると状態が「CREATE_COMPLETE」となります。
「CREATE_COMPLETE」となると今回であれば「VPC」が作成されています。

VPCを確認するとテンプレートファイルに設定したとおりに作成されました。

スタックの削除
作成したスタックを選択 > 削除からスタックを削除します。
デフォルト設定では、スタックを削除するとそのスタックから作成されたリソースも合わせて削除されます。
今回であればVPCも削除されます。

S3バケットの削除
必須ではないですが検証のため実行した場合、S3バケットとその中のYAMLファイルはそのまま残ります。
課金されないよう忘れずに削除しておいてください。
AWS CLIから作成する
AWS CLIの準備
今回はオンプレにあるLinuxサーバでAWS CLIを実行します。LinuxサーバでAWS CLIを実行するには以下記事を参考にしてください。
AWS CLIのバージョンは、以下のとおりです。

テンプレートの作成
先ほどと同じものを利用します。
VPCだけを構築するテンプレートファイルを作成、任意のファイル名「01_vpc.yaml」でLinuxサーバの任意のディレクトリに保存します。
今回は、/root 直下に保存しました。
内容としては、名前「first-VPC」、CIDR「10.0.0.0/16」のVPCという意味になります。
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: first-VPC
実行ファイルの作成
AWS CLIでCloudFomationを実行するファイルを作成します。
参考サイトを真似て作成しています。意味のわかってない部分は削ぎ落しました。
aws cloudformation コマンドに「deploy」を付けて実行したほうがよいということでそのようにしています。
以下内容を記載し、実行権限を付与します。今回ファイル名は「20250730.sh」としました。
#!/bin/bash
CFN_TEMPLATE=01_vpc.yaml
CFN_STACK_NAME=vpc
# テンプレートの実行
aws cloudformation deploy --stack-name ${CFN_STACK_NAME} --template-file ${CFN_TEMPLATE}

実行ファイルの実行
作成した実行ファイルを実行します。成功すると以下のような表示になります。

動作確認
CloudFomationコンソールを見るとスタックが作成されていることが確認できます。

テンプレートで設定したVPCも作成されました。

今回は検証ですのでCloudFomationコンソールからスタックを削除しておきます。
クロススタック参照
私はAWSを実運用したことがないので状況を分かっておりませんが1つのテンプレートファイルの中にすべての設定を記載すると
膨大な行数になり管理が大変だということがあるそうです。
その場合、ある程度テンプレートファイルを分割して管理する方法があります。
今回はその中の1つである「クロススタック参照」を検証してみます。
テンプレートファイルを分割すると1つのテンプレートファイル内で参照できていたことができなくなります。
ファイルが分割されても参照できるようにする方法の1つが「クロススタック参照」となります。
以下は、1つのテンプレートファイルでVPCとサブネットを作成する場合の記述です。
サブネットを定義する中でVPCのIDを参照するよう「!Ref ***」と記載しています。 ファイルを分割してクロススタック参照にするとこの「!Ref ***」が利用できなくなります。

上記テンプレートファイルからスタックを作成して実行すると以下のとおりVPCとサブネットが作成されます。

テンプレートファイルの分割
上記のテンプレートファイルをクロススタック参照できるよう2つに分割します。
ポイントはVPCの定義の中でエクスポートするセクションを作成していることとサブネットの定義の中でエクスポートしたVPCのIDをインポートするセクションを作成していることです。


画像だけでなくコードも貼っておきます。
# VPCの定義
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestVPC: # VPC作成処理の戻り値として、変数'TestVPC'にVPCのIDが格納されます
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
Tags:
- Key: Name
Value: first-VPC
# エクスポートするためのセクション
Outputs:
TestVPC:
Value: !Ref TestVPC # 作成されたVPCのID
Export:
Name: test-vpc-id # この名前でエクスポートする
# VPCの中に作成するサブネットの定義
AWSTemplateFormatVersion: '2010-09-09'
Resources:
TestSubnet:
Type: AWS::EC2::Subnet
Properties:
CidrBlock: 10.0.1.0/24
VpcId: {'Fn::ImportValue': 'test-vpc-id'} # 同じ名前でVPCのIDをインポートする
Tags:
- Key: Name
Value: first-Subnet
S3バケットへアップロード
先ほどはデスクトップに保存したYAMLファイルを参照しましたが、今回は事前にS3バケットへアップロードしたものを参照して進めてみます。
事前に作成したYAMLファイルをS3バケットへアップロードします。

スタックの作成と実行(VPC)
Cloudformationコンソールでスタックを新規作成します。新規作成するとそのまま実行されてリソースも作成されます。
(おそらく作成だけで実行させない方法もあるのだろうと思いますが、現時点ではわかっておりません・・・)
AWSマネジメントコンソールで「cloudformation」を検索します。
左ペインのスタックをクリックし、画面右上の「スタックの作成」をクリックします。

スタックの作成画面で以下のとおり選択し、次へをクリックします。
前提条件 – テンプレートの準備
テンプレートの準備:既存のテンプレートを選択
テンプレートの指定
今回、テンプレートファイルはS3バケットに保存されている状態で進めています。
テンプレートソース:Amazon S3 URL
Amazon S3 URL:S3バケットでコピーしたURLを貼り付けます。

補足:S3バケットで指定のファイルを選択してURLをコピーします

スタックの詳細を指定画面で以下のとおり選択し、次へをクリックします。
スタック名を提供
スタック名:vpc

スタックオプションの設定画面は、デフォルトのまま「次へ」をクリックします。


確認して作成画面で内容を確認し、「送信」をクリックします。



スタックが作成されて状態が「CREATE_IN_PROGRESS」となります。

スタックは作成と同時に実行されているので処理が完了すると状態が「CREATE_COMPLETE」となります。
「CREATE_COMPLETE」となると今回であれば「VPC」が作成されています。

VPCを確認するとテンプレートファイルに設定したとおりに作成されました。

スタックの作成と実行(サブネット)
VPC用のスタック(vpc)作成と同じ手順でサブネット用のスタック(Subnet)を作成して実行します。

事前に作成したVPC(first-VPC)の中にサブネット(first-Subnet)が作成されました。

スタックの削除
作成したスタックを選択 > 削除からスタックを削除します。
デフォルト設定では、スタックを削除するとそのスタックから作成されたリソースも合わせて削除されます。
S3バケットの削除
必須ではないですが検証のため実行した場合、S3バケットとその中のYAMLファイルはそのまま残ります。
課金されないよう忘れずに削除しておいてください。
まとめ
CloudFormation を検証してみました。机上の勉強だけではスタックのイメージがつかめなかったのですが、スタックを実行するとVPCやサブネットが作成されることで理解が深まりました。まだまだ記述の細かい使い方まで理解していないので勉強を続けていきたいと思います。
以下、他の記事をまとめた一覧です。AWSもまとめています。