サーバーワークス社がこないだリリースしたCloud Automatorが気になったので触ってみました。
EC2を立ち上げたり、EBSのスナップショットとったりと色々出来そうですが、
CloudFormationのStackが立ち上がったりしたら、なんでもありになるなと思いました。
というわけで、スクリプトを一つ書いてみました。
下記のスクリプトをrc.localに書いておけば、EC2の起動時に実行され、CloudFormationのStackが作られるようになります。
OLD_IFS=$IFS IFS=' ' TEMPLATEURL="" PARAMETERS="" REGION=$(ec2-metadata -z | cut -d' ' -f2|perl -pe 's/[a-z]$//') for tag in $(aws --region "$REGION" ec2 describe-instances --instance-ids i-db1c24dd --output text |grep TAGS|cut -f2-3) do echo $tag echo $tag |grep -e "^Template\s" |wc -l if [ $(echo $tag |grep -e "^CfnTemplate\s" |wc -l) -ne 0 ]; then echo "template url" TEMPLATEURL="$(echo $tag |perl -pe "s/\w+\s//")" continue fi if [ $(echo $tag |grep -e "^CfnParameters\s" |wc -l) -ne 0 ]; then echo "parameter hit" PARAMETERS="$(echo $tag |perl -pe "s/\w+\s//")" continue fi done IFS=$OLD_IFS echo TEMPLATE=$TEMPLATEURL echo PARAMETERS=$PARAMETERS aws cloudformation --region "$REGION" create-stack --template-url "$TEMPLATEURL" --parameters "$PARAMETERS"
EC2のタグによって、CloudFormationの制御をします。
Tag name | Tag value |
CfnTemplate | テンプレートのURL(S3) |
CfnParameters | CloudFormationに渡すパラメータ |
タグを変更することで、起動するStackのtemplateを制御する事にしました。
ただ、Stackの削除はしていないので、Stackの削除をするInstanceも作って置くのも良いかもしれません。もしくはここで起動したStackのIDをどこかに保存しておいて、rc6.dにStackを削除するスクリプトでも入れておけば、このEC2が立ち上がってる間だけ、Stackも存在するなんてことも可能そうです。
とはいえ、Stackの作成に失敗しても、何の制御も入っていないので、まだまだ試作段階を抜けていません。が、ブラッシュアップしていけば、複雑な動きもCloud Automatorから制御出来るようになりそうです。
CfnというPrefixを付けたモノをそのままコマンドラインに渡すのもありかなと思っています(TagInjectionの予感は気にしません。)