この記事は、「0.5から始めるシリーズ」です。AWSを久々に触る筆者が技術的なアレコレを思い出すための旅路を共有します。
今回は、AWS CloudFormationです。
初めまして、なんどです。
業務でクラウドを扱っていますが、直近1年間はAzureを扱っており、AWSは3年ほど触っていませんでした。
忘れていることも多いため、扱っていた技術を思い出していく過程が何か皆さんのお役に立てたら、と思い始めました。
CloudFormationとは
ざっくり言うと、VPCやEC2といったAWSリソースをコード管理するためのサービスです。
まったく同じインフラ環境を、CloudFormationを使用して複数環境で作成したり、東京リージョンのリージョン障害発生時に大阪リージョンで再構築したり...といった要望の実現が可能です。
早速使ってみる
まずはAWSコンソールにログインし、検索バーで「CFN」と入力します。
CloudFormationが表示されたのでクリックします。
CloudFormationの画面に遷移しました。
「スタックなし」と表示されています。

スタックとは
CloudFormationでは、「スタック」という単位でAWSリソースを管理します。
このスタックを削除すると、それに紐づくAWSリソースがすべて削除されます。
例えば、「スタックA」にVPC・サブネットを作成し、「スタックB」にスタックAで作成したサブネット内にEC2・ALBを作成します。
この状態で「スタックB」を削除した場合、EC2・ALBは削除されますが、VPC・サブネットは削除されません。
テンプレートとは
CloudFormationでリソースを作成するには、テンプレートを記載する必要があります。
テンプレートとは、こういう設定でリソースを作成してください、という指示をCloudFormationに出すためのコードのようなものです。
テンプレートは、JSON/YAMLの二種類の形式で記載可能です。
いずれも同じ機能が実現できるため、特に理由がない限りは可読性の高いYAMLを推奨します。
スタックとテンプレートは1対多の関係性です。
VPC・サブネット・EC2を1つのスタックで作成する場合、1つのテンプレート内にこれらを作成する旨を記載します。
一度作成したテンプレートは、他のスタックに使い回すことが可能です。
テンプレート作成
それではテンプレートを作成してみます。
ゼロから書いてみてもいいですが、今時はAIに聞けば一発で教えてくれます。
まずは最も基本的な、VPCを作るテンプレートを出力してもらいましょう。
AWSTemplateFormatVersion: '2010-09-09'
Description: Create a single VPC
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
EnableDnsSupport: true
EnableDnsHostnames: true
Tags:
- Key: Name
Value: MyVPC
極めて簡易的なテンプレートを出力してもらいました。
「CIDRを10.0.0./16」「DNS解決を有効」「DNSホスト名を有効」のみ記載してあります。
他の設定値は、明示的に記載しない場合デフォルト値で作成されます。
それぞれのセクションについて解説します。
AWSTemplateFormatVersion:
CloudFormationのバージョンを指定するセクションです。
現在は「'2010-09-09'」固定のため特に考慮する必要はありません。
Description:
テンプレートの説明をここに記載します。管理者、利用者向けのメッセージで、動作には影響しません。
Resources:
実際にAWS上に作成されるリソースをResources配下で定義します。
このテンプレートの場合、MyVPCでどのようなVPCを作成するか、を記載します。
他にも例えば同じテンプレート内でサブネットを作成したい場合、MySubnetのようなものをテンプレート末尾に追加し、その配下に設定値を記載していきます。この際、MySubnetはMyVPCとインデントを揃えてあげる必要があります。
他にもさまざまな要素はありますが、最低限これだけあればVPCの作成が可能です。
スタック作成
それでは先ほど用意したテンプレートを使用してスタックを作成してみます。
[スタックの作成] > [新しいリソースを使用(標準)]を選択します。
(リソースをインポート)はいったん気にしないでください。
「前提条件」では[既存のテンプレートを選択]、「テンプレートの指定」では[テンプレートファイルのアップロード]を選択します。
先ほど作成したテンプレートファイルをここにアップロードしましょう。
続いて、スタックの詳細を指定します。
今回は最小構成のため、スタック名くらいしか入力項目がありません。
試しに001-vpcと入力したところ、 「スタック名には頭文字に数字は使えないよ」 と怒られてしまいました。
そうだったっけ...

仕方なく、名前をvpc-001に変更しました。
その後の画面で、何やら珍妙な設定値が様々ありますが、一旦気にせず送信をしてみましょう。
送信後、出来上がったスタックの「イベント」タブで、ステータスが「CREATE_COMPLETE」となっていればテンプレートで記載したリソースの作成は完了です。
「リソース」タブに移動し、作成されたリソースを見てみましょう。
今回はVPCのみなので、MyVPCの物理IDを選択します。
テンプレートで指定した設定値でVPCが作成されていることが確認できます。
さいごに
ここまででCloudFormationのさわりは終了です。
次回は、テンプレートをより実務で使いやすい形にアレンジしてみようと思います。
最後までご覧いただきありがとうございました!






