なぜCloudFormationを学ぶのか
AWSの学習を進める中で、これまでは主にAWSマネジメントコンソールからリソースの作成や削除を行ってきました。
しかし、利用料金を抑えるために検証用のリソースを都度削除し、必要になったらまた作り直す、という作業を繰り返すのは想像以上に手間がかかります。
また、手動でリソースを作成していると、
- 設定の入れ忘れ
- 以前は設定していたはずの項目が再現できない
といった問題が起きやすく、結果として「なぜ動かないのか」を調査する時間が増えてしまいました。
こうした経験から、インフラ構成を毎回同じ形で再現できる仕組みの必要性を感じるようになりました。
CloudFormationの概要
CloudFormationは、AWSリソースの大半を管理できる Infrastructure as Code(IaC) サービスです。AWS上のリソース構成をコードとして定義し、その通りに作成・更新・削除できます。
これまでAWSマネジメントコンソールでポチポチ設定していた作業を、YAMLやJSONで書いたテンプレート1つでまとめて管理できるようになります。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html
S3バケットをCloudFormationで作成する
今回はYAML形式でS3を作成するテンプレートを作成してみました。CloudFormationを触ってみることが目的なので、S3の設定はバケット名のみとしています。
AWSTemplateFormatVersion: 2010-09-09
Description: Create S3 bucket
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: s3-bucket-chun-tech-blog
テンプレートの説明
AWSTemplateFormatVersion: 2010-09-09
Description: Create S3 bucket
テンプレートに関する説明です。AWSTemplateFormatVersionはCloudFormationのフォーマットバージョンで記事を作成している時点では2010-09-09を指定します。Descriptionはテンプレートの説明文です。コンソールに表示されます。
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: s3-bucket-chun-tech-blog
Resources:以降がテンプレートの本体となっています。ここからCloudFormationで管理したいAWSリソースを定義していきます。MyS3Bucket:はこのテンプレート内における論理IDで、他のリソースから参照するときに使います。(実際のS3バケット名ではありません。)Type: AWS::S3::Bucketで作成するリソースの種類としてS3バケットを指定します。
また、Properties:でリソース固有の設定値を記述します。今回はS3バケット名のみ定義しています。(S3バケット名は全世界で一意のものである必要があります。)
テンプレートからS3バケットを作成する
CloudFormationのテンプレートを使用してS3バケットを作成していきます。
コンソールにログインしてCloudFormationを開きます。

「スタックの作成」ボタンをクリックして作成画面を開きます。
今回はテンプレートファイルを直接アップロードしてリソースを作成します。

スタック名を入力して次に進みます。

スタックオプションの設定については今回はデフォルトのままで次に進みます。
内容を確認して送信します。
リソースの作成状況が表示されます。指定したスタック名のイベントがCREATE_COMPLETEで表示されていたら完了です。

S3バケットもテンプレート内で指定した名前で作成されていました。

作成したS3バケットを削除する
CloudFormationのスタックの一覧から作成したスタックの詳細画面を開き、「削除」ボタンをクリックすることでテンプレートから作成したリソースを削除することができます。

削除状況が表示されます。指定したスタック名のイベントがDELETE_COMPLETEで表示されていたら完了です。

S3バケットも削除されています。

まとめ
CloudFormationのテンプレートを作成し、リソースの作成と削除をすることができました。テキスト形式でリソースの設定が管理できるので、コンソールから作成する場合よりもレビューやバージョン管理、生成AIの利用など有効活用できる場面が多そうです。
今回はS3バケットを1つ作成しただけですが、次回は複数リソースを作成するテンプレートを作ってみます。
