👁️

テンプレート更新を監視して自動でcloudformation validate-templateされるようにしてみた。

2022/10/20に公開

cloudformation validate-templateについて

今回参考にさせていただいたのはこちらの記事です。
よろしければ理解の為にお目通しください。
https://dev.classmethod.jp/articles/efficient-develop-of-cfn/

今回挑戦したのは後半で触れている

ファイル保存時に自動的にバリデーションを実行

という章です。

挑戦する主題に対して私のスキル

・CloudFormation着手7日目
・validate-templateコマンド本日初利用
・linuxコマンド→udemy動画で勉強+自己流

前提

validate-templateコマンド実行に必要となりますので、
お済みでない方は事前にAWS CLIをインストールください。

(なくても大丈夫ですが)

手入力は極力減らしたい人間なので、
クリップボードアプリClipy for Macを普段使いしています。
https://clipy.softonic.jp/mac

簡単に説明しますと
「スニペット」という文字列(改行&複数列可能)を事前登録しておき、
ショートカットキーで呼び出す事が出来るアプリです。

無料ですし便利なのでオススメしています。

手順1 ローカルの任意の場所に「filewatch.sh」の作成。

以下は最初の記事リンク内で提供されていたものそのままです。
こちらはあえて内容をいじりたくないのでそのまま作成します。

#!/bin/sh
if [ $# -ne 2 ]; then
        echo "実行するには2個の引数が必要です。
        第一引数: 監視対象ファイル名
        第二引数: 監視対象ファイルが更新された際に実行されるコ>マンド
        例: ./autoexec.sh a.cpp 'g++ a.cpp && ./a.cpp'"
        exit 1
fi
echo "監視対象 $1"
echo "実行コマンド $2"
INTERVAL=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 $2
        fi
done

手順2 「start_filewatch.sh」の作成。

私は「start_filewatch.sh」としていますが、ファイル名はおまかせします。

[filewatch.shのフルパス] 部分は手順1のファイルのフルパスに置き換えてください。
※フルパスの簡単なコピーの仕方はこちら

#!/bin/sh
read -p "監視・実行をしたいテンプレートのフルパスを入力してください。:" VTFilePath
VTFilePath="[filewatch.shのフルパス] ${VTFilePath} 'aws cloudformation validate-template --template-body file://${VTFilePath}'"
eval ${VTFilePath}

できました^^

手順3 ターミナルで上記2ファイルの実行権限を付与。

※これはターミナル上で行ってください。

$ chmod +x filewatch.sh
$ chmod +x start_filewatch.sh

(Clipyをインストールしていただいた方は)

端末画面上部の黒いアイコンをクリック。↓こちら

スニペットを編集をクリック

フォルダ追加→任意のフォルダ名入力(ここでは適当に「マイフォルダ」としました)
→スニペット追加→任意のスニペット名入力(こっちは「vt監視」としました)

右側に手順②の「start_filewatch.sh」のフルパスを入力
(後でターミナルから呼び出す際、enterを押したくない方は一行目を改行してください。)

今度は「環境設定」をクリック

「ショートカット」をクリックして、
「スニペット:」にご自身の好きなショートカットキーを設定してください。

以上で完了です。以下仕組みをおさらいです。

1.「start_filewatch.sh」をターミナル上で実行。
2.”どのファイル監視する?”と聞かれるのでテンプレのパスを入力。
3.「start_filewatch.sh」が必要な引数を付与した上「filewatch.sh」を実行。
4.監視スタート
5.テンプレ保存(アクション)
6.変更を検知→バリデート。

早速動作確認しましょう。

動作確認用のCFnテンプレートファイルとして、以下を作成してみてください。
vt_test.yml

AWSTemplateFormatVersion : 2010-09-09
Description : VT test
Resources:
  MyVPC:
    Typo: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      InstanceTenancy: default
      EnableDnsSupport: false
      EnableDnsHostnames: false
      Tags:
        - Key: Name
          Value: MyVPC

VPCひとつだけしかリソースのないテンプレートですが、「Type: AWS::EC2::VPC」であるべき所を、「Typo: AWS::EC2::VPC」とわざとタイポしています。

ターミナルを開きます。

・Clipy有の方は:ターミナル上でClipyショートカットコマンド→マイフォルダ→1.vt監視 をクリック

・無しの方は:「start_filewatch.sh」のパスをコピーしてターミナルで実行
↓↓↓
入力を求められますので、テンプレのフルパスをコピーして入力します。

監視が開始されました。

(ファイル名タイポしてますね お許しください)

試しにテンプレートをそのままcommand+sで保存しなおしてみます。

エラーがでました。無事typoについて怒られています!

修正してもう一度保存しなおしてみます。

今度は大丈夫みたいです!
監視を終了したい場合はcontrol+cで終了しましょう!

まとめ

以上「ファイル監視してcloudformation validate-templateを自動実行させる」でした!

シェルをわかっている方ならもう少し簡潔に無駄なく出来るかもしれません。
「ココこうの方がいいよ」というのがありましたら是非教えてください。

お付き合いいただき有難うございました!

Discussion