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. スタック作成
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