How to use

何を作るにしてもCloudFormationはテンプレートがないと始まらないので、初めはスタックを作成するためのテンプレートを手に入れる。このテンプレートを入手する方法はいくつかある。

  1. AWSが公開しているサンプルテンプレートを使用する
  2. クイックスタート(公式チュートリアル)等で公開されているテンプレートを使用する
  3. 自分でテンプレートを作成する
    • YAMLかJSONでテンプレートを記述
    • CloudFormation Designerを利用
    • CloudFormerを利用

ここでは 自分でYAML形式のテンプレートを記述 する。

テンプレートとスタックの作成

スタックの作成 から、スタック作成画面に移る。ここで新しくテンプレートを作成するか、S3に保存されているテンプレートを使用するか、AWSが公開しているサンプルテンプレートを作成するかを選べる。

スタック作成画面

今回は自分でテンプレートを作成するので、 テンプレートのデザイン からCloudFormation Designerの画面に移る。AWSが提供するサンプルテンプレート等を使う場合はここでサンプルテンプレートを選択するし、S3のテンプレートを使用する場合はここにS3のオブジェクトのURLを貼り付ける。

テンプレート作成画面

今回は自分でテンプレートを記述していくので、一番下の コンポーネントテンプレート のタブを テンプレート に切り替える。また、YAMLで記述をするのでテキストボックス上のラジオボタンは YAML を選択する。

初期の状態では1行だけ入力されているのだが、この AWSTemplateFormatVersion はCloudFormationテンプレートの形式バージョンを指定するために必須の項目だ。2行目以降には自分のテンプレートを記述できる。

次のYAMLは、テンプレートでDynamoDBのテーブルを作成する例。

AWSTemplateFormatVersion: 2010-09-09
Resources:

  MyDynamoDBTable:
    Type: AWS::DynamoDB::Table
    Properties:
      TableName: DemoTable
      AttributeDefinitions:
        - AttributeName: id
          AttributeType: N
      KeySchema:
        - AttributeName: id
          KeyType: HASH
      ProvisionedThroughput:
        ReadCapacityUnits: 2
        WriteCapacityUnits: 2

作成したいAWSリソースは Resource 内に記述していく。Resourceの下には作成したいコンポーネントの名前(論理ID)を設定し、その中にコンポーネントのタイプとプロパティが入る形だ。今回の場合はコンポーネント名が MyDynamoDBTable (これは好きに決めていい)で、その下の TypeProperties がコンポーネントの情報。 Type はコンポーネントの根本的な種類を決めるもので、今回はDynamoDBテーブルの AWS::DynamoDB::Table だが他にも次のようなものもある。

  • AWS::IAM::Role
  • AWS::Lambda::Function
  • AWS::S3::Bucket
  • AWS::EC2::VPC

Properties の中身はTypeによって大きく変化する。今回はDynamoDBテーブルを作成するため TableNameProvisionedThroughput などDynamoDBらしい項目が多いが、例えばTypeが AWS::S3::Bucket だとPropertiesは BucketName などに変わる。

次のYAMLは、テンプレートでS3のバケットを作成する例。

AWSTemplateFormatVersion: 2010-09-09
Resources:

  MyS3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: my-s3-bucket-1234567890

このあたりのタイプやプロパティの情報はあまりに多く、記憶しておくこともできないので、普通は公式ドキュメントとにらめっこしながらテンプレートを作成する。タイプやプロパティの情報だけでなく、宣言の記述例まで書いてくれているのが有り難い。

さて、特に作りたいテンプレートが無ければ最初の例のDynamoDBを作成しよう。テキストボックスにテンプレートを入力したなら、 右上の矢印が回っているマーク(リフレッシュボタン) を押す。これでDesignerのアイコンが更新される。

左上の チェックマーク を押すと テンプレートの検証 が行われて構文のチェックが行われる。ここで注意しなければならないのは、これが構文のチェックのみで値のチェックまでは行われない点と、Type AWS::CloudFormation::Stack で指定した他スタックのテンプレートのチェックは行われない点だ。 テンプレートの検証 は完全ではないので、実際にテンプレートを作成する場合、スタックの作成を試してエラーが出るか確かめてみるしか無い。。

左上の 雲のマーク を押すと、Designerを抜けてスタック作成の流れに入る。さっきのテンプレート選択画面に戻ってきたが、 Amazon S3テンプレートURLの指定 にURLが入力されているはずだ。S3を確認すると、Designerで作成したテンプレートを保管しておくためのS3バケットが作成されており、その中にはさっき作成したYAMLが保管されている。 雲のマーク を押した時点でスタックを作成するわけではなく、これは実質のテンプレート保存ボタンの役割を果たしている。

S3のURLが入力されていることを確認できたなら、 次へ で次に進む。次の画面ではスタックの名前を入力するだけなので、好きな名前を入力して次へ。

オプションの設定画面が出るが、いまのところは気にしなくても良い。この画面ではスタックのリソースに渡すタグを設定したり、CloudFormationのテンプレート操作を実行する権限(IAM Role)を設定したりできる。

オプション設定画面

次の確認画面では、今までに選択したテンプレートのURL、スタックの名前、パラメーター、オプションなどを確認できる。スタック作成前の最終確認であり、IAMリソースを作成した場合はここで AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。 というIAMリソースの作成を許可するチェックボックスにチェックをしなければならない。これは今回は必要ないが、作成している場合は選択(承認)しないとテンプレートの作成を行えない。

IAMリソース作成許可

スタックを作成したなら、CloudFormationのホーム画面でスタック作成の様子を確認できる。全ての情報は画面下のタブ 概要 イベント などに出力されており、例えば イベント ではそのスタックが現在何を作成しているのか( CREATE_IN_PROGRESS )何の作成を完了したか( CREATE_COMPLETE )などの進捗が表示される。

スタックの 状況 が緑色の CREATE_COMPLETE になったら作成完了。 リソース タブで作成したリソースを確認することができ、そのサービスのAWSマネジメントコンソールから実際にリソースを確認することもできる。今回だと、DynamoDBで新しいテーブルが作成されていることが確認できるはずだ。

ダッシュボード

実際にCloudFormationを活用していく中で主に利用するタブは イベント リソース 出力 の3つのはずだ。 イベント では先述したように、リソース作成の進捗を確認できる。エラーが発生してスタックの作成がロールバックした場合は、どのコンポーネントでエラーが出たのかをエラー内容と一緒にチェックできる。 リソース も先述のように、そのスタックから作成したAWSリソースを確認することができる。 出力 では、テンプレートの Outputs句 に記述したものが表示される。例えば、DynamoDBのテーブル名をOutputで返したい場合はテンプレートをこのように記述する。

AWSTemplateFormatVersion: 2010-09-09
Resources:

...

Outputs:

  TableName:
    Value: !Ref MyDynamoDBTable
    Export:
      Name: !Sub ${AWS::StackName}-TableName

AWS::DynamoDB::Table はRefでテーブル名が返る)

出力する項目は複数指定することができ、ここで出力した値は複数のスタック間で共有することができる。例えば、他のスタック呼び出しから Fn::ImportValue を使ってExport名を指定することで、DynamoDBのテーブル名を取得することが可能だ。

参考

results matching ""

    No results matching ""