はじめに
みなさんこんにちは!
突然ですが、「EC2やS3のような基本のサービス」以外のサービスを活用できてますか?AWSにはEC2やS3以外にもたくさんのサービスがあります。そして、そのたくさんのサービスを活用してこそクラウドのおてがるさを実感できるんです!!使わなきゃもったいないですよ!!!
ということでこのシリーズ(シリーズ化しました!)では、「機会がないと手を出さないけれど、使ってみるととってもおてがるなAWSのサービス」をチュートリアル的なノリで紹介していきます。基本的な使い方や、気をつけるポイントなどを実際に触っていく形で説明していきたいと思っています。
今回のサービスは、コードを書いておてがるにAWSのリソースを構築できる!「AWS CloudFormation」です!!
CloudFormationって?
公式ページには、こう書かれています。
AWS CloudFormation は、クラウド環境内のすべてのインフラストラクチャリソースを記述してプロビジョニングするための共通言語を提供します。
CloudFormation では、シンプルなテキストファイルを使用して、あらゆるリージョンとアカウントでアプリケーションに必要とされるすべてのリソースを、自動化された安全な方法でモデル化し、プロビジョニングできます。
このファイルは、クラウド環境における真の単一ソースとして機能します。
・・・つまり、「コードにインフラ設定を記述すれば、それを基にしてリソースを構築しますよ!コードが基準になるので(変更のない限り)いつでもどこでも同じ設定のリソースを構築できますよ!」というサービスです。Infrastructure as Code(IaC)ですね!
CloudFormationでは、構築したいAWSリソースの設定をJSON/YAML形式で記述し、それを読み込ませることで実際のリソースを構築してくれます。同じコードであれば同じリソースが構築されるため、リージョンやアカウントを気にする必要はありません。また、手作業による設定ミスも起こらなくなります。構築するリソースが複数ある場合、構築と削除は一括で行われるため、ひとつひとつ見ていく手間や削除忘れもありません。すごく便利ですね!
ここからは、基本的なJSONを利用した記述方法を説明し、そのあと実際にCloudFormationでリソースを構築していきます!
JSONを利用したテンプレートの記述方法
CloudFormationで利用するテキストファイルは、「テンプレート」と呼ばれ、JSONもしくはYAMLの形式で記述します。今回はJSONを使用します。テンプレートには大きく分けて9個のブロックが存在します。AWSドキュメント(テンプレートの分析)に、テンプレートの記述方法のサンプルと、各ブロックの説明が記載されています。
・・・項目が多いですが、基本的に利用するのは、AWSTemplateFormatVersion・Description・Parameters・Resources・Outputsの5つです。その他のブロックは必要に応じて利用することになります。なので、今回はこの5つのブロックを使用して実際にテンプレートを作っていきます!
CloudFormationによるVPCの作成
今回は、以下の理由からCloudFormationでVPCを作っていきます!
- VPC自体は無料で作成できる
- 最低限のVPCは少ない設定項目で作成できる(テンプレートが煩雑にならない)
- リソースの作成時間が短い
利用するテンプレートは以下の通りです。コピーして、「miso-vpc.template」と言う名前のファイルを作成しておいてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "MISO-VPC!", "Parameters": { "VpcName": { "Type": "String", "Description": "Name of MISO-VPC!" } }, "Resources": { "VPC": { "Type": "AWS::EC2::VPC", "Properties": { "CidrBlock": "10.0.0.0/16", "Tags": [ { "Key": "Name", "Value": { "Ref": "VpcName" } } ] } } }, "Outputs": { "VpcName": { "Value": { "Ref": "VpcName" } } } } |
ここからは、実際の作成手順です!
AWSコンソールから、「CloudFormation」を選択します。
「新しいスタックの作成」を選択します。
ちなみに「スタック」とは、「テンプレートで記述したリソース全部をひとまとまりにしたもの」です。今回のテンプレートではVPCしか作成しないためわかりにくいかもしれませんが、たとえば「VPC1つとEC2インスタンス1つを作成するテンプレート」があった場合、「VPC1つとEC2インスタンス1つ」を合わせてスタックとなります。
「テンプレートをAmazon S3にアップロード」を選択し、ファイルを選択します。
「次へ」を選択します。
ちなみに、テンプレートの構文を自動判別して、おかしい場合は何行目の何文字がおかしいのか教えてくれます。べんり!
「スタックの名前」と「パラメータ」→「VpcName」に、任意の名前を入力します。「パラメータ」は、テンプレートのParametersで記述した属性をユーザが入力する欄です。今回は「VpcName」をテンプレートで記述しているので、ユーザが「VpcName」の値を指定することになります。
「次へ」を選択します。
1 2 3 4 5 6 |
"Parameters": { "VpcName": { "Type": "String", "Description": "Name of MISO-VPC!" } } |
「オプション」では、「スタックで利用するIAMロールの設定」や、「指定した時間監視して、しきい値を超えてしまったら作成したリソースを削除する」などの設定を行うことができます。
今回は何も設定せず、「次へ」を選択します。
設定の確認画面です。
確認ができたら、「作成」を選択します。
「作成」を選択すると、リソースの作成が始まります。作成状況は逐一コンソールに出力されます。画面上部にあるのがスタック全体の作成状況、画面下部にあるのがリソースひとつひとつの作成状況です。全てのリソースが作成完了したとき、スタックが作成完了となります。「CREATE_IN_PROGRESS」は、「今このリソースを作ってますよ!」状態です。
状況が「CREATE_COMPLETE」になれば作成完了です!お疲れ様でした!
「出力」タブには、テンプレートの「OutPuts」で指定した属性が出力されています。今回は「VpcName」の値を出力させています。作成時に入力した値が出力されていますか?テンプレートでは「OutPuts」を記述するときに、「Ref」というキーを利用し、「VpcName」を指定しています。これは、「このキーを参照してね」という意味のキーです。つまり、「VpcNameっていうキーの値をRef(参照)して、VpcNameとしてOutPutsすればいいんやな!」ということです。
1 2 3 4 5 6 7 |
"Outputs": { "VpcName": { "Value": { "Ref": "VpcName" } } } |
最後に、AWSコンソールから「VPC」を見てみましょう。しっかりとリソースが作成されていますね!
リソースを削除するときは、「アクション」→「スタックの削除」と選択します。作成したリソースが全て削除されます。ひとつひとつ削除する手間がないのでおてがるですね!
リソースからテンプレートを作成する
ここまではテンプレートを使ったリソースの作成方法をお伝えしましたが、逆に「既にあるリソースからテンプレートを作成する」こともできちゃいます!この機能は「CloudFormer」と言います。ひとつの環境をベースにして、複数展開する場合などに使えそうですね。やってみましょう!
まずはAWSコンソールの「VPC」から、任意のVPCを作成しておきます。
※CloudFormationに既にスタックがない場合とある場合で画面が変わるので、以下のA, Bから自分の環境に合った起動を行ってください。
A. 【CloudFormationにスタックがない場合】AWSコンソールの「CloudFormation」から、「CloudFormerの起動」を選択します。
B. 【CloudFormationにスタックがある場合】「スタックの作成」→「サンプルテンプレートの選択」→「CloudFormer」を選択します。
※ここから先は共通の手順です。
「次へ」を選択します。
任意の「パスワード」と「ユーザー名」を入力し、「次へ」を選択します。
「オプション」では何も選択せず、「次へ」を選択します。
確認画面で、「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」にチェックを入れて、「作成」を選択します。
CloudFormer用のスタックが作成されます。作成が完了したら、「出力」タブにURLが記載されているので、選択します。
認証を求められるので、スタック作成時に入力したユーザー名とパスワードで認証します。
「Create Template」を選択します。
画面の指示に従い、テンプレートに含めるリソースを選択していきます。画面ではリソースIDしか表示されないため、含めるリソースのIDは各サービスのページを見て確認しましょう。
※今回はページの長さの都合上、VPCの選択画面のみ記載します。すみません。
「Done」のページで、作成するテンプレートの詳細が出力されます。「Save Tmeplate」を選択すると、CloudFormerのスタックで作成されたS3バケットにテンプレートが保存されます。自分で内容をコピーしてファイルを作成してもいいと思います!テンプレート作成もおてがるですね!
テンプレート作成が終わったら、CloudFormerのスタックを忘れずに削除しておきましょう!
気をつけるポイント
以上で実際の操作は終わりです。お疲れ様でした!
CloudFormationを利用すればおてがるにAWSのリソースを作成することができますが、気をつけるポイントがあります。それは、「まとめて作成することはできるが、ひとつひとつの細かい調整を行うためにテンプレートをいじる必要がある」ことです。また、「何度もスタック作成→削除を繰り返していると、AWSのリソース作成上限にひっかかってしまう」こともあるため、おてがるだからといって適当に繰り返していると急にスタック作成ができなくなります。気をつけてくださいね!そして、CloudFormation自体は無料で利用できますが、作成したリソースは課金されます。費用はしっかり確認しましょう!
さいごに
コードでおてがるにAWSリソースを構築できる「CloudFormation」いかがでしたでしょうか?理解して使えば、AWS環境をカンタンに構築・管理できます!ぜひ使ってみてください!
ここまで読んでくださってありがとうございました!
執筆者プロフィール

- tdi デジタルイノベーション技術部
-
インフラの技術支援や、クラウドテクノロジーの検証・社内教育/展開を担当しています。
AWSのプロフェッショナルを目指して奮闘中です。
「人に何かを説明すること」が好き!