- ソリューションアーキテクト
- プロジェクトマネージャー
- テクニカルオペレーション
- Other occupations (4)
- Development
- Business
- Other
Cloud Automation as Codeを実現するツール「Catlass」を作りました【エンジニアブログより】
こんばんは。てるい@氷点下の札幌です。
この記事は、Cloud Automator Advent Calendar 2017の12日目の記事です。
Cloud Automatorは使いやすいが、使いづらい
突然ですが、Cloud Automatorのジョブをアカウントを跨いでコピーしたり、ジョブをテンプレートから一括で定義したかったり、ジョブのバージョン管理をしたくなることはありませんか?私はあります。
Cloud Automatorは分かりやすい機能設計とユーザフレンドリーなナビゲーションUIで非常に簡単に使い始めることができます。それはとても素晴らしいことではあるのですが、AWSなんかでもよくあるように複数アカウントで大量のリソースを扱いたいと思った時にはGUIだけでは管理が難しくなってきます。
我々はどうしてきたのか
例えばAWSだと、私たちはCloudFormationやterraform、またはAPIを駆使したcodenize.toolsのようなツールによって定義をコード化し、管理を自動化してきました。
では、Cloud Automatorはどうでしょうか?Cloud AutomatorもAPIが公開されています。
ということは、コード化できるということです。
ということで
作りました。
名前に特に深い意味はありません。「CA」という文字を入れたかったので「カ」とか「キャ」から始まるカッコイイ単語でカトラス(Cutlass)というのが浮かんだので、それをもじった感じです。なので、「カトラス」とか「キャトラス」とか読んでもらえれば(ちなみにこれを聞いて「ソード・カトラス」が浮かんだ人とは仲良くなれそうな気がしますが、ここは会社のブログなのでこれ以上は自重しておきます)
使い方など
細かい使い方はREADMEを読んでもらうとして、ざっくり流れや特徴を説明していきたいと思います。
インストール&設定
Gemなのでこれだけです(要Ruby環境)
1 $ gem install catlass
2
そして、Cloud AutomatorのAPIキーを発行して 「CA_API_KEY 」という環境変数にセットします。
1 $ export CA_API_KEY=$YOUR_API_EKY
2
現在の定義を書き出す
以下のコマンドで 「CAfile」というファイルに現在の定義が書き出されます。
1 $ catlass export --write
2
定義を反映する
手元で 「CAfile」 に追加/変更/削除した定義をCloud Automatorに反映するのは以下のコマンドになります。なお、恒例?の「 --dry-run」オプションをつけると反映せずに手元とCloud Automator側との差分だけ見られます。
1 $ catlass apply
2
設定ファイル例
こんな感じです。特徴としては、Cloud Automatorの内部的なIDを意識せずに使えるように ジョブ名でマッチングする仕様 になっています。つまり、ジョブ名は一意であることが求められ、ジョブ名を変えると別の定義として扱われることに注意が必要です。また、Rubyの内部DSLとなっているため、冗長な記述をループやメソッドで簡略化したり、 「aws-sdk」の 「Aws::EC2::Client.describe_instaces」などを実行した結果を利用することでCA単体ではできないタグ以外の要素でフィルタリングした結果を使って定義を組み立てたりもできます。
1 #! /usr/bin/env ruby
2
3 Job "Auto Stop" do
4 type "trigger_jobs"
5 attributes do
6 aws_account_id 999
7 rule_type "cron"
8 rule_value do
9 hour "19"
10 minutes "0"
11 time_zone "Tokyo"
12 schedule_type "weekly"
13 weekly_schedule "", "sunday", "monday", "tuesday", "wednesday", "thursday", "friday", "saturday"
14 national_holiday_schedule "false"
15 end
16 action_type "stop_instances"
17 action_value do
18 region "ap-northeast-1"
19 tag_key "auto-stop"
20 tag_value "on"
21 trace_status "false"
22 specify_instance "tag"
23 end
24 active false
25 end
26
27 end
28
最後に
Cloud Automatorのジョブが増えてきて管理にお困りの方、ジョブのコピーや一括定義をやりたい方は是非試してみてください。ただし、まだβクオリティで私の個人プロジェクトなので、いずれ会社としての管理に移行できればと思っていますが、ご利用は自己責任でお願い致します。