はじめに
DevOpsの試験問題を解いてるなか、CFn作成を効率化するためのValidate Template機能なるものを初めて知りました。
自身のCFnテンプレートが正しい文法に則っているかをターミナルで確認できるので、CFnゼンゼンワカラナイ自分にとっては大変便利な機能でした。
毎回テンプレートを更新後、マネージメントコンソールを開いて→CFn画面→スタックのアップロード→失敗、、、、の流れから解放されそうです。
まとめ
早速まとめですが、今回利用するコマンドを記述します。
ただしAWS CLIから実施しますので、CLIの事前設定はお願いします。
AWSドキュメント:AWS CLI の最新バージョンをインストールまたは更新します
コマンドをターミナルに入力し、【調べたいCFnテンプレート】のファイル名を入力して下さい。
正しければパラメータの値が返ってくる(例では何も設定していないので空が返る)
誤りがあればエラーメッセージが返ってくる
aws cloudformation validate-template --template-body file://【調べたいCFnテンプレート】.yml
挙動の確認
用意したテンプレート: cfn-vpc-sample.yml
AWSTemplateFormatVersion: '2010-09-09'
Resources:
FirstVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
コマンド実行結果:正しい場合(用意したテンプレでは何も設定していないため、パラメータは空)
aws cloudformation validate-template --template-body file://cfn-vpc-sample.yml
{
"Parameters": []
}
誤っているテンプレートを作成
先ほどのテンプレート: cfn-vpc-sample.yml
に、誤りになる部分(7行目)を追記
AWSTemplateFormatVersion: '2010-09-09'
Resources:
FirstVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
samplesamplesamplesamplesamplesample
コマンド実行結果:誤っている場合
テンプレートフォーマットエラーが返され、間違っている部分付近の情報が返ってくる
aws cloudformation validate-template --template-body file://cfn-vpc-sample.yml
An error occurred (ValidationError) when calling the ValidateTemplate operation: Template format error: YAML not well-formed. (line 8, column 1)
ファイル保存時に自動的にコマンドを実行するシェルスクリプト作成
毎回コマンドを入力するのも面倒なので、自動的に更新された場合コマンドを実行するシェルスクリプトの例を記載します。
下記ファイルを 、check-cfn.sh
で保存する
#!/bin/bash
# CFn ValidateTemplate機能を利用した文法チェック
# INTERVALでチェックする間隔を秒数指定
INTERVAL=1
CMD='aws cloudformation validate-template --template-body file://'
#引数でファイルが渡されているかの確認
if [ $# -ne 1 ]; then
echo '実行するに引数:ファイル名.ymlまでの入力が必要です'
exit 1
fi
# タイムスタンプが更新されていればValidateTemplateを実行
echo "$1 の文法をチェックします"
last=`ls -l -T $1 | awk '{print $8}'`
while true; do
sleep $INTERVAL
current=`ls -l -T $1 | awk '{print $8}'`
if [ $last != $current ] ; then
echo ""
echo "updated: $current"
last=$current
eval "$CMD$1"
fi
done
作成しただけでは実行権限がないため、実行権限を付与することも忘れずに
chmod +x check-cfn.sh
※実行されると、実行された時点"から"の変更をチェックするので、対象のファイルが変更されるまで画面上では待機待ちのような状態となります。
シェルスクリプト実行結果: ターミナル画面
1・2行目:シェルスクリプトにcfn-vpc-sample.yml
を引数として実行
4・6行目:対象ファイルcfn-vpc-sample.yml
にCFn文法に誤りがある状態
8-11行目:対象ファイルcfn-vpc-sample.yml
のCFn文法は正しい状態
bash check-cfn.sh cfn-vpc-sample.yml
cfn-vpc-sample.yml の文法をチェックします
updated: 10:16:59
An error occurred (ValidationError) when calling the ValidateTemplate operation: Template format error: YAML not well-formed. (line 8, column 1)
updated: 10:17:08
{
"Parameters": []
}
おわりに
全然知りませんでした。かなりの時間短縮になったのもですが、なによりCFnを記述するハードルが下がったことが1番の収穫でした。
そして資格勉強するもんですね、自分の知らないことが増えていくのは単純に楽しいことです。