知ってますか?
Cloud Automator
というサービスがあるんですが・・・知ってますか?
簡単に言うと 画面からのカンタン操作でAWSの運用を自動化することが出来るサービスかなーと。画面から操作できるのは大変便利なのですが、大量の定型処理を行う場合にはやっぱりしんどいですよね・・・
しかし、最近Cloud Automator
のAPIが公開されました。
Cloud AutomatorAPI
https://cloudautomator.com/api_docs/v1/api.html
APIはあるけど・・・
APIが公開されていれば、プログラムの中から使えるから画面からの操作じゃなくてもなんとかなる!と、現実はそんなに簡単ではないのでなかなか難しいところもありますよね。
じゃーターミナルでcurlを使って頑張ればいいじゃないか!と、思うじゃないですかー
・・・黒い画面大好きな国の人でもちょっと大変という感想がっ!
SDKとかCLI何かがあれば多少は違うのかなぁーと思いつつ、Cloud Automator
のサービススタンスとしては、CLIは難しいラインなのかなぁーとも思いつつ
そこで
仕事で考えるからややこしい話になるんだなぁーと気がついた & 最近議事録や予定調整などしていて、コードも書いてなければAWSも触れてないと気がついたので、せっかくだから公開されているAPIドキュメントを見ながらCLIを作ってみることにしました。
CLIを作るにあたって、身近なCLIを参考にするのが良さそうなので以下の2つを色々見てみました。
自分が使うだけなので、手元のMacとAmazonLinuxで動けばいいのでPythonって選択肢もアリでしたが、やっぱりここは仕事では書く機会がありそうもない大好きな言語であるgolangで作ってみようかと。
golangにはcobraというちょー便利なパッケージがあるので、もちろんこれを利用して作っています。
他にも色々と便利なパッケージがあり、今回は
なんかを利用しています。
また、上記のようにgolangのパッケージをまとめているサイトがいくつかあるので、こういうサイトを利用して必要なパッケージを検索出来るのはありがたいです。
とりあえず
自分用ということで作っていて、とりあえず動くところまではできた感じです↓
golangのクロスコンパイルでMac/Linux/Windows用のバイナリファイルは作りましたが・・・MacとLinuxは動くのは確認しています。Windowsは動かなかったらゴメンなさいw
インストールとか操作については、README.md&ヘルプコマンドの表示で何とかしていただければ・・・
分かりにくいところ
Create JobのAPIで受け取るパラメータのrule_valueとaction_valueが直感的ではないので、少々分かりにくいかもしれません。
Cloud AutomatorAPI
https://cloudautomator.com/api_docs/v1/api.html#ジョブ-post
上記のAPIドキュメントを確認すると、rule_valueとaction_valueについてはobject型の値を渡さないといけないようです。
object型はJSONになるのですが、CLIでJSONは結構大変なので今回は以下の例のように対応しています。
$ ./ca job create \ --name "ca job create exsample"\ --aws-account-id 1\ --rule-type cron \ --rule-value hour=2,minutes=0,schedule_type=weekly,weekly_schedule=monday,friday \ --action-type create_image \ --action-value region=ap-northeast-1\ ,specify_image_instance=identifier\ ,instance_id=i-xxxxxxxxxxxxxxxxx\ ,generation=1\ ,image_name=exsample-ami\ ,description="Job Create Exsample Cloud Automator CLI"\ ,reboot_instance=true\ ,additional_tag_key=name\ ,additional_tag_value=exsample\ ,add_same_tag_to_snapshot=true\ ,trace_status=true\ ,recreate_image_if_ami_status_failed=true
–rule-value hour=2,minutes=0,schedule_type=weekly,weekly_schedule=monday,friday
“APIのパラメータ名=値” の形で指定して、パラメータ同士は",“で繋いで表現してください。また、配列を表現する場合は”APIのパラメータ名=値,値,値“のように値を”,“で繋いで表現してください。
作ってみて
- golangはやっぱり楽しいねーもっと使えるようになりたい
- 各種パッケージで色々できるのは楽でいい
- SORACOMさんのCLIはAPI定義からSDKなんかと一緒に自動生成みたい
- 手で組んでも作れるけど、同じようなコードになっていくから自動生成は幸せになれそうで素敵
Cloud Automator
のAPIも確か API Blueprintを使っていたはずなのでワンチャンあるかも?
API Blueprint | API Blueprint
https://apiblueprint.org/
- object型をCLIで表現するのに困った
- AWSCLIの引数指定の仕方を参考にしてみたが、APIパラメータを知らないと使えない感じもするので悩ましい
- 自分用に作ったのでテストがなかったり、コメントだらけのソースだったりすのでなんとかしたい
- Circleci2.0を使ってみれたのはよかった。速くてすばらしい
- Codeshipも気になるので時間があるときに使ってみたい
- golangで作られたツールのリポジトリを見ると、AppVeyorを利用してWindows環境でテストとビルドをしているところも多いみたいなので気になる
- 使ってみたかったslideshipをやっと使えた
- Markdownでサクサク書けるのは便利
- 簡単に作れるので使っていきたい
- APIドキュメントが間違っている可能性?
Cloud AutomatorAPI
https://cloudautomator.com/api_docs/v1/api.html#ジョブ-patch
- API定義からAPIとドキュメントが生成されていない?
- ドキュメントだけ間違っている場合は、このドキュメントを元に作っているので間違った仕様になってしまう
- 上記の場合だとedit処理なのに、id意外も必須とされている・・・
まとめ
- 楽しいのはやっぱり大事だよね
- 手を動かして作っていかないと知らないことも多くなってる
- 自分用でもちゃんと最初からテスト書こう
- もうちょっと頑張ろうと思った
以上になります