はじめに
CloudformationでEC2の構築+ユーザデータでM/W導入を自動化しようと思いました。
結論から言うとユーザデータ関連のテンプレートフォーマットエラーが解消できず、ただ単にCloudformationでEC2を作るだけの平凡な結果に終わってしまいました。
それでもCLoudformationについて多少勉強になったのでまとめます。
(今後解決策が見つかったら更新します)
やろうとしたこと
- EC2インスタンスを作成
- テンプレートを修正せずに最新バージョンのAmazon Linux 2のAMIで起動させる
- ユーザデータでterraformをインストール【失敗】
terraform導入
まずはユーザデータ作成のためEC2上で普通に導入しました。
特に理由はありませんが、何となくrootのプロファイルにPATHを追加する手順も入れました。
$ sudo yum install wget unzip
$ wget https://releases.hashicorp.com/terraform/0.12.20/terraform_0.12.20_linux_amd64.zip
$ sudo unzip terraform_0.12.20_linux_amd64.zip -d /usr/local/bin/
$ sudo sed 's|^PATH=\$PATH:\$HOME/bin|PATH=\$PATH:\$HOME/bin:/usr/local/bin|g' /root/.bash_profile > /tmp/bash_profile_tmp
$ sudo chown root.root /tmp/bash_profile_tmp
$ sudo mv /tmp/bash_profile_tmp /root/.bash_profile
※補足
・sedは通常「sed 's/~/~/g'」のように書かれることが多いですが、「/」の部分は別の記号に置き換え可能で、今回のようにディレクトリパスを記載する場合は「/」以外にすると便利です。
・terraformのダウンロードURLは公式ページを参照下さい。
Cloudformationテンプレート
最終的にうまく行ったVersionを載せます。
(デザイナーでガワだけ作成し、残りは公式ページ他を見ながら記載)
AWSTemplateFormatVersion: 2010-09-09
Metadata:
'AWS::CloudFormation::Designer':
389e90b9-2b30-43fa-a312-411827e53a79:
size:
width: 60
height: 60
position:
x: 375
'y': 125
z: 0
Parameters:
Ec2ImageId:
Type: AWS::SSM::Parameter::Value<String>
Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp
Ec2InstanceType:
Type: String
Default: t2.micro
Resources:
EC2I4K5C4:
Type: 'AWS::EC2::Instance'
Properties:
ImageId: !Ref Ec2ImageId
InstanceType: !Ref Ec2InstanceType
Metadata:
'AWS::CloudFormation::Designer':
id: 389e90b9-2b30-43fa-a312-411827e53a79
※補足
・AMIのイメージはSSMのパラメータ経由で指定すると常に最新版を取得できます。
(SOAの試験でも出たような気がします)
・本当はこれに「KeyName(キーペア名)」と「UserData(ユーザデータ)」を入れたかったのですが、フォーマットエラーを解消できずに断念。
スタック作成時の注意点
テンプレートを試す際はスタック作成失敗時にロールバックを無効にしておきましょう。
(でないと、失敗しても何のエラーも出さず、デバッグが何もできなくなります)