新ネットワークスペシャリスト道

ネットワーク、セキュリティ、何の話?

【AWS 100日チャレンジ - 61日目】CloudFormationのヘルパースクリプトを試す(cfn-initとcfn-signal)

AWSの知識を血肉にするための「AWS 100日チャレンジ」の61日目です。

今日は陶器市に行ってきました。

安くて魅力的な器やコップがたくさんあって、買うのにすごく迷いました。

いいビアグラス(陶器)が変えて満足です。

 

AWS 100日チャレンジの記事を書く上でのルール

・100日連続アウトプット!

・継続が第一、クオリティは第二

・「社会人のリアル」を忘れない(持続可能な完走を目指す)

・コアな学習に全集中!
 テーマとするサービス以外は、CloudFormationや構築済みの資産をフル活用。効率よく「核心」を突き詰めます。

課題

CloudFormationのヘルパースクリプトを試す(cfn-initとcfn-signal)

実施 

まずヘルパースクリプトは以下種類があります。

今回は、cfn-initcfn-signalを試してみます。

 

1.YAMLファイルを定義する

cfn-init を使用すると、

UserData にズラズラと yum install を書くよりも、

「CloudFormationらしい」構成になり、可読性が格段に上がります。

 

CloudFormationに読み込ませるYAML定義は以下です。

cfn-initの部分

Resources:
  LinuxSvA:
    Type: AWS::EC2::Instance
    Metadata:
      AWS::CloudFormation::Init:
        config:
          packages:
            yum:
              httpd: []
          files:
            "/var/www/html/index.html":
              content: "Hello from CloudFormation Helper Scripts!"
              mode: "000644"
              owner: "root"
              group: "root"
          services:
            sysvinit:
              httpd:
                enabled: "true"
                ensureRunning: "true"

cfn-signalの部分

Properties:
      # ... その他のプロパティ ...
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash -xe
          # 最新のヘルパースクリプトに更新
          yum install -y aws-cfn-bootstrap
          
          # cfn-init の実行
          /opt/aws/bin/cfn-init -v \
            --stack ${AWS::StackName} \
            --resource LinuxSvA\
            --region ${AWS::Region}

          # 完了をシグナルで送信 (WaitConditionHandleがある場合)
          /opt/aws/bin/cfn-signal -e $? \
            --stack ${AWS::StackName} \
            --resource LinuxSvA\
            --region ${AWS::Region}

 

スタックを上記YAMLを指定して作成する。

2.動作確認

Teratermdeリモートログイン。

以下コマンドにてHTTPDがインストールされているか確認。

systemctl status httpd