{CloudFormation}cfn-init

https://dev.classmethod.jp/articles/cfn-helper-scripts/

cfn-init ヘルパースクリプトは、AWS::CloudFormation::Init キーからテンプレートメタデータを読み取り、それに応じて次のような操作を行います。
AWS CloudFormation のメタデータの取得と解析
・パッケージのインストール
・ディスクへのファイルの書き込み
・サービスの有効化/無効化と開始/停止

cfn-initはUserDataに指定する


-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

-- 2. スタック作成

vim a.yaml

AWSTemplateFormatVersion: "2010-09-09"
Description: cfn-init test

Resources:
  EC2:
    Type: AWS::EC2::Instance

    Metadata:
      Comment: Install httpd
      AWS::CloudFormation::Init:
        config:
          packages:
            yum:
              httpd: []
          files:
            /var/www/html/index.html:
              content: !Sub |
                <p>Hello!</p>
              mode: '000644'
              owner: root
              group: root
          services:
            sysvinit:
              httpd:
                enabled: 'true'
                ensureRunning: 'true'

    Properties:
      ImageId: ami-0404778e217f54308
      InstanceType: t3.nano
      SecurityGroupIds:
        - !Ref SecurityGroup
      KeyName: key1
      
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash -xe
          /opt/aws/bin/cfn-init -v \
          --stack ${AWS::StackName} \
          --resource EC2 \
          --region ${AWS::Region}

  SecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: allow SSH and HTTP
      SecurityGroupIngress:
        -
          IpProtocol: tcp
          FromPort: 22
          ToPort: 22
          CidrIp: 0.0.0.0/0
        -
          IpProtocol: tcp
          FromPort: 80
          ToPort: 80
          CidrIp: 0.0.0.0/0

 

aws cloudformation validate-template \
--template-body file://a.yaml


aws cloudformation create-stack \
--stack-name stack01 \
--template-body file://a.yaml

 

-- 3. スタック一覧

aws cloudformation describe-stacks \
--stack-name stack01

aws cloudformation describe-stack-resources \
--stack-name stack01


-- 4. クリーンアップ

-- スタック削除
aws cloudformation delete-stack \
--stack-name stack01