2016年2月7日日曜日

AWS SDK for Rubyを用いて、S3+CloudFrontでCache Distributionパターンを構築するスクリプトを作成してみた。

相変わらず慢性的なアレやコレやで、無駄に忙しいのですが(ぉぉ
そんな中、忙しければ省力化、自動化だろ。ということでS3+CloudFrontでCache Distributionパターンを構築するスクリプトを作成しました。

CloudFrontって、設定箇所がかなり多く、またS3との連携設定もあり、どうしても手数が多くなり、
手順書を作成してもなかなか大変です。
しかも、設定変更したら反映されるまで数十分待つ羽目になりますしね。

こんな所は自動化するに限ります。
インフラ構築を自動化するツールは俗にオーケストレーションツールと呼ばれ、
AWS純正のCloudFormationとか、Terraformとかがあります。
Terraformは昔試してみたことがあるのですが、バグが酷かったり、メッセージが謎だったりと。ちょっと実用に耐えれないな。という印象があるので、以前から興味があったCloudFormationを試してみました。
・・・・が、一般人の私には山のようなJSONをインデントを見失わず手打ちするのは無理がありすぎました。
RubyっぽくかけるDSLも有るみたいなのですが。

なので、早々にあきらめて、API叩くことにします。
ですが、AWS SDK for RubyのVer2は正直使いづらい使い方がリファレンスを見ても良く分からないし、
ましてCloudFrontの設定パラメタの多いこと!
おまけにマネコンでの設定名称とパラメタの名称が違っていたりするし(汗
というわけで、CloudFormationの付属のツール(?)である、cloudformerを使いました。

このCloudFormerというのは、構築済みのAWS環境を解析し、CloudFormationで使用するJSON形式で出力するツールです。
ただし、ツールといってもEC2インスタンス内で動くアプライアンスみたいなもので、t2.mediumインスタンスだったりするので地味に課金が怖かったり(ぉ

使い方はクラスメソッドさんのブログを参考にしていただければいいのですが、1点。
AWSではデフォルトのVPCが存在します。
このVPCを削除して自前でVPCの設定をした場合、CloudFormerは起動に失敗します。

対処法は簡単で、バージニアなど別リージョンで起動させる。です。
CloudFormerはWebからアクセスするアプリなので、実はリージョン依存ではありません。

S3+CloudFrontの環境をAWS上にマネコンでぽちぽち作成後、CloudFormerでJSON化すると、
こんな感じになります。
まぁマネコンもCloudFormationも裏ではAPIを叩いているでしょうから、内容がほぼAPIと対応します。

これで、必要なパラメタとその内容が分かりました。あとはAPIリファレンスを参照しながらコーディングするだけです。

というわけで、作成したスクリプトはこちらになります。

最後に、かかった課金のほうですが、現時点で0.14$となっています。
CloudFormerは削除すると関連するリソースを全て削除してくれるのですが、デバックのためS3やCloudFrontを消したり追加したりした結果地味にカウントされます。

このあたり、さくらのクラウドみたいにAPI試すようサンドボックス環境が欲しくなります。
あと、AWSさん。マネコンで作成したら、その操作をJSONなりでダウンロード出来る機能つけてくれませんかねぇ。
CloudFormerでは全部が解析できるわけではなさそうで、それであれば、ウイザードの段階からJSONなりを作成してくれればいいのにな。





0 件のコメント:

コメントを投稿