CloudFormation用ツール Kumogata
の 0.1.0をリリースしました。
https://github.com/winebarrel/kumogata
これは何?
CloudFormationのテンプレートを以下のようなRuby DSLで書いて、リソース群を作ったりできるツールです。
Resources do myEC2Instance do Type "AWS::EC2::Instance" Properties do ImageId "ami-XXXXXXXX" InstanceType "m1.large" KeyName "your_key_name" UserData (<<-EOS).undent.encode64 #!/bin/bash yum install -y httpd service httpd start EOS end end end
テンプレートはだいたいJSONそのままです。
UserData用の便利関数 0.1.9以降でなくなりました_user_data()
とかがビルトインで定義されてたりします。
使い方
以下のような感じでリソース群を作成します。
$ kumogata validate template.rb $ kumogata create template.rb
明示的に名前を指定しない場合、スタックは削除されます。(リソース群は残ります)
スタックを削除したくない場合はスタック名を指定します。
$ kumogata create template.rb my_stack_name
はぁ?スタックを削除?
スタックでリソースのライフサイクルを管理すべきでないユースケースって結構多いと思うんですよね。
"DeletionPolicy" : "Retain"
と指定すれば残るは残りますが、それはテンプレートに書くのは微妙な気が…
という設計方針から、明示的にスタック名を指定しなかった場合、すべてのリソースに"DeletionPolicy" : "Retain"
が追加されて、リソースの作成完了後にスタックは削除されます。
JSONテンプレートの変換
手作業でJSONテンプレートをRubyにするのは辛いので、convertコマンドを用意しています。
kumogata convert https://s3.amazonaws.com/cloudformation-templates-us-east-1/Drupal_Single_Instance.template # ローカルパスも可
ただ、いくつかメソッドにできないキーがあったりするので、特殊な変換ルールがあります
- Data that cannot be converted will be converted to Array and Hash
::
is converted to__
Fn::GetAtt
=>Fn__GetAtt
_{ ... }
is convered to HashSecurityGroups [_{Ref "WebServerSecurityGroup"}]
=>{"SecurityGroups": [{"Ref": "WebServerSecurityGroup"}]}
_user_data() creates Base64-encoded UserData_path()
creates Hash that has a key of path_path("/etc/passwd-s3fs") { content "..." }
=>{"/etc/passwd-s3fs": {"content": "..."}}
デモ
なんでBitbucketじゃないの?
『寄らば大樹の陰』ということわざがありまして…
Please try it out!