【やってみた】AWS CloudFormation実行~テンプレートの更新

記事タイトルとURLをコピーする

みなさんこんにちは。

私の所属する課では業務でCloudFormationテンプレート自体を作成することはあまりないのですが、AWS SysOps Administrator - Associate試験の範囲だったため実際にテンプレートを作成して動作確認をしてみました。

CloudFormationの基本

CloudFormationの基本的なところは下記に記載されていますので、こちらを参考にテンプレートを作成します。

blog.serverworks.co.jp

CloudFormationを実行してみた

CloudFormationテンプレートの作成

作成したテンプレートがこちら。 今回は単純なCloudFormationの動作確認のため、あえて簡易的な構成にしました。

AWSTemplateFormatVersion: '2010-09-09'
Description: KENSHO Template for VPC

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/22
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: vpc-kensho

  SubnetPublic01:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: ap-northeast-1a
      CidrBlock: 10.0.0.0/24
      Tags:
        - Key: Name
          Value: subnet-public

CloudFormationの実行

1.CloudFormationの管理画面から新しいリソースを使用したスタックの作成をおこないます。

2.テンプレートファイルのアップロードを選択し、テンプレートファイルをアップロードして次へをクリックします ※テンプレートファイルは前項のものをテキストファイルに保存(test.yaml)したものを使用しました

3.スタックの名前を入力し次へをクリックします

4.スタックオプションの設定はデフォルト値で次へをクリックします

5.設定した値に間違いがないか確認し、スタックの作成をクリックします。

6.イベントのステータスのところに進捗状況が表示されますので、完了までしばらく待ちます。

7.CREATE_COMPLETEと表示されればスタックの実行は正常に終了しています。

8.実際に意図した通りリソースが作成されていることを確認します。

CloudFormationを更新してみた

CloudFormationを更新する場合は、スタックの更新または変更セットを用いてスタックを変更します。

更新を実行することで、変更されたテンプレートをすばやく適用することができます。更新をかけることでリソースが削除されたり置き換えられたりする場合がありますが、 更新をおこなうことでどのようなリソースに影響を与えるか事前に確認する場合は、変更セットを用いたスタックの更新をおこないます。

変更セットの詳細については公式ドキュメントをご参照ください。 docs.aws.amazon.com

CloudFormation更新用テンプレートの準備

サブネットを追加したテンプレートがこちら。

AWSTemplateFormatVersion: '2010-09-09'
Description: KENSHO Template for VPC

Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/22
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: vpc-kensho

  SubnetPublic01:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: ap-northeast-1a
      CidrBlock: 10.0.0.0/24
      Tags:
        - Key: Name
          Value: subnet-public


  SubnetPublic02:
    Type: AWS::EC2::Subnet
    Properties:
      VpcId: !Ref VPC
      AvailabilityZone: ap-northeast-1a
      CidrBlock: 10.0.1.0/24
      Tags:
        - Key: Name
          Value: subnet-private

CloudFormationの更新

1.対象のスタックを選択し更新をクリックします。

2.既存テンプレートを置き換えるを選択し、テンプレートファイルをアップロードしたら次へをクリックします。

3.次へをクリックします。

4.デフォルト値のまま次へをクリックします。

5.内容を確認してスタックの更新をクリックします。

6.アップデートが終わるまでしばらく待ちます。

7.アップデートが完了したことを確認します。

8.実際に意図した通りリソースが更新されていることを確認します。

手動更新したリソースの差分を確認

手動更新したリソースとテンプレートの差分を確認する場合はドリフトを使用します。 今回は実験のため、CloudFormationで作成したリソースに簡単な変更を適用してみました。

1.変更した内容をCloudFormationテンプレートに反映するために、ドリフトの検出をクリックします。

2.変更があった箇所は MODIFIED として表示されました。

3.ドリフトの詳細を表示をクリックすると検出結果が表示されます。


その他

スタック作成に失敗したときの対策

スタック作成の際にスタックの失敗オプションを指定することができ、デフォルトでは「すべてのスタックリソースをロールバックする」設定になっています。 本番環境でスタックの更新中にロールバックしてしまうと問題になるケースもあるかと思いますので、本番環境を更新する際はこのあたりの設定に注意が必要です。

一緒に設定しておきたい項目

スタックの作成に時間がかかる場合は、通知オプションを有効にしておくことで、メールなどで状況を把握することができるようです。

スタック作成後にオペレーションミスなどによって間違ってCloudFormationスタックを削除しないように削除保護をかけることができます。

総括

AWS公式ドキュメントだけではわかりにくかったところが、実際に試してみることでより理解が深まりました。 CloudFormationを使用することでオペレーションミスなく同じインフラ環境を簡単にデプロイでき、実際の本番でも使う機会が多い技術だと思います。

これを機にCloudFormationの理解をもっと深めていきたいです。

塩野 正人 ブログ記事一覧はコチラ

マネージドサービス部MS2課(MS部MS2課)所属。ネコが好きです。