aws-cliで始めるCloudFormation

Posted on Mar 5, 2019

目的

  • CloudFormationで使われる用語を理解する
  • CloudFormationの構成を理解する
  • 出来るだけaws-cliのコマンドを実行していく

前提条件

  • aws-cliがインストール済み
  • AWSのaccess key発行済
  • access keyを環境変数に設定済み
  • CFn実行にS3にテンプレートが保存される動作は割愛する
  • stack-nameが違っていても気にしない。ブログ記述時の試行錯誤によるもの。

テンプレート

CloudFormation(以後、CFn)では、リソースを記述するファイルをCFnテンプレートを呼ぶ。
CFnテンプレートの記法は、JSON or YAML

AWSTemplateFormatVersion: 2010-09-09
Description: Create coco's vpc
Resources:
  CocoFirstVPC:
    Type: 'AWS::EC2::VPC'
    Properties: 
      CidrBlock: 10.10.0.0/16

スタック

関連リソースを管理するための単一ユニットをスタックという。
スタックを作成、更新、削除することでリソースのコレクションを作成、更新、削除する。 スタック内の全てのリソースはCFnテンプレートで定義される。 スタック作成時にパラメータを指定することで、インスタンスタイプなどをスタック作成時に指定できる。

ひとまず、ここまでで一度CFnをaws-cliから実行してみる。

# stack作成
(*'-') <<< aws cloudformation create-stack --stack-name coco-vpc --template-body file://./example.yaml
{
    "StackId": "arn:aws:cloudformation:ap-northeast-1:012345678901:stack/coco-vpc/4a6f6260-3f09-11e9-a59f-066cec78e1f8"
}
# stack削除
(*'-') <<< aws cloudformation delete-stack --stack-name coco-vpc

CFnテンプレートから簡単なスタック作成/削除ができた。

変更セット

スタックで実行中のリソースに変更を加える場合、スタックを更新する。 リソースに変更を加える前に変更案の概要となるのがchangeset(変更セット)

ここでは、前述で作成したVPCに対して、tag:Nameとしてcoco-vpcを与える。

CFnテンプレートにtagを追加する記述を追加

AWSTemplateFormatVersion: 2010-09-09
Description: Create coco's vpc
Resources:
  CocoFirstVPC:
    Type: 'AWS::EC2::VPC'
    Properties: 
      CidrBlock: 10.10.0.0/16
# START changeset target
      Tags:
        -
          Key: Name
          Value: coco-vpc
# END changeset target

変更したCFnテンプレートを用いて、changesetを作成。その後、changesetの確認と適用を行う。

# changeset作成
(*'-') <<< aws cloudformation create-change-set --stack-name coco-vpc --change-set-name first-changeset --template-body file://./example.yaml
{
    "Id": "arn:aws:cloudformation:ap-northeast-1:012345678901:changeSet/first-changeset/8c6d9520-df98-4fae-b00c-28c0267703fc",
    "StackId": "arn:aws:cloudformation:ap-northeast-1:012345678901:stack/coco-vpc/4a6f6260-3f09-11e9-a59f-066cec78e1f8"
}
# changeset適用
(*'-') <<< aws cloudformation execute-change-set --stack-name coco-vpc --change-set-name first-changeset

以上が、CFnの用語説明とaws-cliからのstack操作/changeset操作の基本的な使い方になる。

まとめ

Terraformとの比較

CloudFormationTerraform
CFnテンプレートtfファイル
stackmodule(?)
parametervar
changeset作成terraform plan –out のfile
changeset適用terraform apply