この記事はCloud Automator Advent Calendar 2017の24日目です。
技術4課の渡辺です。VMware へ入社して3ヶ月ほど経ちました。
入社してから、Cloud Automatorをブラウザで使うようになりましたが、まだCLI操作はしたことがありません。
そんな私がCloud AutomatorのREST APIに挑戦してみたいと思います。
1. REST APIキーの発行
REST APIを使うためには、REST APIキーの発行が必要なようです。
こちらのページを参考にして、REST APIキーを発行し、メモしておきましょう。
参考URL:Cloud AutomatorのREST APIを公開しました!
2. curlで情報取得して見る
試しに上記URLに載っている /aws_accounts にアクセスしてみます。
curlコマンドでGetリクエストすると、下記のように文字化けしたレスポンスが返ってきました。
~ $ curl https://manager.cloudautomator.com/api/v1/aws_accounts -H "Content-Type: application/json" -H "Authorization: Bearer ********************************" ��A � D�2k�"�x���̅T�#B�������B�1#����v��|�/�7�t�|���R��#>�fD�y�?r�#T'�=ĭ jp��ΐS��v�?��>p~ $
調べたところ、HTTPレスポンスがgzip圧縮されていることがわかりました。
--compressedオプションを付けるとレスポンスの圧縮を解凍して表示してくれます。
また、応答がJSONフォーマットであったため、jqコマンドで見やすくしてみました。
~ $ curl --compressed https://manager.cloudautomator.com/api/v1/aws_accounts -H "Content-Type: application/json" -H "Authorization:Bearer ********************************" | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 112 0 112 0 0 93 0 --:--:-- 0:00:01 --:--:-- 93 { "data": [ { "id": "1305", "type": "aws_accounts", "attributes": { "name": "watanabe-ca" } } ], "links": {}, "meta": { "total": 1 } }
それっぽい応答が確認できました。
ちゃんとREST APIから応答を受け取れました。
3. ジョブ一覧を取得して見る
次は、REST APIでジョブ一覧を取得してみます。
Cloud Automator APIというページがあるので、眺めて見ると/jobsを発見しました。
レスポンスは省略しますが、これで/jobsにアクセスできます。
~ $ curl --compressed https://manager.cloudautomator.com/api/v1/jobs -H "Content-Type: application/json" -H "Authorization: Bearer ********************************" | jq
4. ジョブのtag_valueを変更して見る
情報取得だけでなく、変更もしてみたいですね。
Cloud Automatorでは、「EC2インスタンスのTagがenv:developmentだった場合、19:00に停止する」などのようにTagを利用できます。
今回はジョブ発動の条件として使われるtag_valueを変更してみます。
なお、下記の例ではジョブIDが12117(jobs/12117)となっていますが、これは「3. ジョブ一覧を取得して見る」のレスポンスで確認できます。
その他のポイントは、以下となります。
- PATCHメソッドを使う(-X PATCH)
- --data または --data-binary で変更したいパラメータのJSONを指定する
~ $ curl -X PATCH https://manager.cloudautomator.com/api/v1/jobs/12117 -H "Content-Type: application/json" -H "Authorization: Bearer ********************************" --data-binary '{"action_value":{"tag_value":"development"}}' | jq % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 705 0 661 100 44 506 33 0:00:01 0:00:01 --:--:-- 506 { "data": { "id": "12117", "type": "trigger_jobs", "attributes": { "name": "開発マシンの停止", "aws_account_id": 1305, "rule_type": "cron", "rule_value": { "hour": "19", "minutes": "0", "time_zone": "Tokyo", "schedule_type": "weekly", "next_occurrence": "2017-12-25 10:00:00 UTC", "weekly_schedule": "[\"\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\"]", "national_holiday_schedule": "true" }, "action_type": "stop_instances", "action_value": { "region": "ap-northeast-1", "tag_key": "env", "tag_value": "development", "trace_status": "true", "specify_instance": "tag" }, "active": false, "created_at": "2017-11-02T15:55:09.042+09:00", "updated_at": "2017-12-24T16:30:54.889+09:00" } } }
5. ジョブの有効/無効を切り替えて見る (非対応でした)
次にジョブの有効/無効を切り替えるために、"active": false,という箇所の変更を試みました。
ところが下記のコマンドを実行しても変更できませんでした。
~ $ curl -X PATCH --compressed https://manager.cloudautomator.com/api/v1/jobs/12117 -H "Content-Type: application/json" -H "Authorization: Bearer ********************************" --data-binary '{"active":"true"}'
Cloud Automator APIをよく読むと全てのパラメータを変更できるわけでは無いようです。
activeという名前は載っていないので、対応していないのでしょう。
まとめ
今回の調査の結果、Cloud Automator REST APIの基本的な使い方がわかりました。
また、全てがAPIでできるわけでは無いということもわかりました。
詰まったら、Cloud Automator APIをよく読むと良さそうです。
渡辺 信秀(記事一覧)
2017年入社 / 地味な内容を丁寧に書きたい