はじめる前に
- 必須AWS アカウントを持っていること
- 必須マネジメントコンソールにサインインできること
- 必須S3 バケットを作成した経験があること
- あると良いYAML や JSON のような、テキスト形式の設定ファイルを見たことがある
※ コマンドラインや SSH の操作は一切ありません。テンプレートはこのページに用意したものをコピーして使います。
参照する公式ドキュメント
手順に迷ったときや、用語の意味を確かめたいときに開きましょう。
※ リンク切れの場合は、ページタイトルで検索してください。
背景・シナリオ
今までは、コンソールの画面をクリックしながら 1 つずつリソースを作ってきました。AWS CloudFormation を使うと、「どんなリソースを、どんな設定で作るか」をテキスト(テンプレート)で書いておき、それを AWS に渡すだけで、書いた内容どおりにリソースが作られます。同じ構成を、何度でも同じ手順で再現できるようになります。
コンソールでクリックして作るのと、結局何が違うの?
クリック操作はそのときだけの再現性のない手順ですが、テンプレートは「設計図」として保存・共有・再利用できます。同じ内容で何度でも、誰がやっても同じ構成を作れる、という点が大きな違いです。
テンプレートに書いたら、いつでもその通りになるの?
スタックを更新すれば、テンプレートの変更内容に合わせてリソースも追従して変わります。逆にスタックを削除すれば、テンプレートで作ったリソースもまとめて削除されます。「テンプレートとリソースの状態が結びついている」という考え方が今回の鍵になります。
提供された YAML テンプレート(S3 バケットを 1 つ定義したもの)からスタックを作成し、「リソース」タブで、テンプレートに書いたとおりのバケットが作られたことを確認する。
つくる構成
今回はネットワーク図の代わりに、実際に使うテンプレートそのものを確認します。次の内容をこのままコピーして使います。
AWSTemplateFormatVersion: "2010-09-09"
Description: はじめての CloudFormation スタック - S3 バケットを1つ作成する
Resources:
MyFirstBucket:
Type: AWS::S3::Bucket
Outputs:
BucketName:
Description: 作成されたバケットの名前
Value: !Ref MyFirstBucket
このテンプレートの読み方を 2 点だけ押さえておきましょう。① Resources の配下に、作りたいリソースの種類(Type)を書くことで、AWS にそのリソースを作るよう指示します。今回は AWS::S3::Bucket(S3 バケット)が 1 つ定義されています。② Outputs では、作られたリソースの情報を出力できるため、スタック作成後に画面上でバケット名をすぐ確認できます。
要件
以下の要件を満たし、テンプレートどおりにバケットが作られたことを確認してください。
| No | 要件 |
|---|---|
| 1 | リージョンは「東京(ap-northeast-1)」を使用する。 |
| 2 | CloudFormation コンソールで、上記の YAML テンプレートを使ってスタックを作成する。テンプレートの準備方法は「テンプレートが用意されている」を選び、CloudFormation Designer でテンプレートを貼り付けてから「テンプレートの使用」でスタック作成に進む。 |
| 3 | スタック名を自由に決める(例:my-first-stack)。 |
| 4 | スタックの作成が完了(CREATE_COMPLETE)したら、「リソース」タブでバケットが作成されたことを確認し、S3 コンソールでも同じ名前のバケットが存在することを確認する。 |
構築の進め方
「テンプレートを準備する → スタックを作成する → 完了を待つ → 結果を確認する」という順番で進みます。
-
マネジメントコンソールにサインインし、リージョンを合わせる
ブラウザで AWS マネジメントコンソールにサインインし、画面右上のリージョンが「アジアパシフィック(東京)ap-northeast-1」になっていることを確認します。
-
CloudFormation コンソールを開き、スタックの作成を始める
画面上部の検索バーに
CloudFormationと入力して開きます。「スタックの作成」→「新しいリソースを使用(標準)」を選びます。 -
テンプレートを CloudFormation Designer に貼り付ける
「テンプレートの準備」で「テンプレートが用意されている」を選びます。「Application Composer で表示」ではなく「テンプレートをデザイナーで表示」(CloudFormation Designer)を開き、上記の YAML テンプレートをそのまま貼り付けます。デザイナーの画面から「テンプレートを使用してスタックを作成」のような操作で、スタック作成に進みます。
コピーはそのまま、改行や空白に注意貼り付けるときに、インデント(行頭の空白)が崩れないように気をつけましょう。YAML はインデントの崩れがそのままエラーの原因になります。
-
スタック名を入力する
スタック名を自由に決めて入力します(例:
my-first-stack)。今回のテンプレートにはパラメータが無いので、そのまま次へ進みます。 -
オプションの設定を確認し、スタックの作成を開始する
「スタックオプションの設定」はデフォルトのまま「次へ」を繰り返し、最後の確認画面で「送信」してスタックの作成を開始します。
-
作成完了を待ち、リソースを確認する
スタックのステータスが「CREATE_COMPLETE」になるまで待ちます。「リソース」タブを開き、
AWS::S3::Bucketのエントリを確認します。物理 ID(バケット名)をクリックすると、S3 コンソールに移動し、同じバケットが存在することを確認できます。ステータスの更新には少し時間がかかる作成中は「CREATE_IN_PROGRESS」と表示されます。数十秒〜数分待って、画面を更新(リロード)しながら進行を確認しましょう。
つまずきポイント
初学者がよく引っかかる箇所を先回りでまとめました。答えそのものは載せていませんが、「どこを見直せばよいか」の手がかりとして使ってください。
「ステータスが CREATE_COMPLETE にならず、失敗の表示になっている」
多くの場合、テンプレートのYAML のインデントが崩れていることが原因です。コピー&ペースト時に、余分な空白や全角文字が混ざっていないかを確認しましょう。インデントが半角スペースで統一されているかも見直してみてください。
「リソースの一覧に、目的のバケットの行が出てこない」
まずスタックのステータスが CREATE_COMPLETE になっているかを確認しましょう。作成途中だとリソースがまだ表示されないことがあります。見つからない場合は、一覧の更新(リロード)を試してみてください。
完了チェック
要件の再確認ではなく、画面のどこを見れば達成を確認できるかをまとめました。CloudFormation コンソールと S3 コンソールを開いて、次を順に確かめましょう。
- スタックのステータスが
CREATE_COMPLETEになっている。 - 「リソース」タブに
AWS::S3::Bucketのエントリがあり、物理 ID がバケット名になっている。 - S3 コンソールに、同じ名前のバケットが存在している。
- 「出力」タブに
BucketNameの値が表示されている。
考えてみよう
手を動かすことに加えて、次の問いに自分の言葉で答えられるようにしておくと、理解がより深まります。
- 今回作ったスタックを削除すると、中で作られたバケットはどうなると思いますか。試す前に予想してみましょう。
ヒント
テンプレートとリソースの状態は結びついている、という考え方を思い出してみましょう。スタックという単位で管理されているリソースは、スタックの削除に合わせてどうなるか、を考えてみてください。 - 同じテンプレートを使って、もう 1 つ別のスタック名で作ったらどうなるでしょうか。再現性という観点から考えてみましょう。
ヒント
テンプレートは「設計図」であり、スタックはその設計図から実際に作られた「実体」です。同じ設計図から、別の実体をいくつ作れるか、という観点で考えてみましょう。 - このテンプレートに EC2 や VPC など他のリソースも追記していくと、今まで個別にコンソールで作っていた構成全体を、1 つのテンプレートで表現できそうです。それは運用上どんな利点がありそうでしょうか。
ヒント
「構成全体を 1 つのテキストとして保存・共有できる」「同じ構成を別の環境にも再現できる」「変更の履歴を残せる」など、コンソール操作だけでは難しかったことができるようになる、という観点で考えてみましょう。
後片づけ
作ったものを片づけます。スタックを削除すると、関連するリソースも合わせて削除されます。
- スタックを削除する:CloudFormation コンソールでスタックを選び、「削除」を実行する。関連する S3 バケットも自動的に削除される。バケットの中にオブジェクトが残っていると、スタックの削除に失敗することがあるため、先にバケットを空にしてから削除する。
削除するのは、このハンズオンで自分が作ったものだけ
スタックの一覧や S3 のバケット一覧には、すでに使っている他のスタック・バケットが並んでいるかもしれません。間違えて削除しないよう、このハンズオンで付けた名前のものだけを選んで削除してください。
コストに関する注意: CloudFormation の利用自体に料金はかかりません。テンプレートの記述や、スタックの作成・更新・削除の呼び出し回数にも課金はありません。料金が発生するのは、作成されるリソース(今回は S3 バケット)に対してのみです。バケットが空の状態であれば、保管料金は実質発生せず無料の範囲で収まります。最新の料金は AWS の公式料金ページで確認してください。