CloudAutomatorでSQSを利用せずジョブの数珠つなぎを実現する

Cloud Automatorのアドベントカレンダー2017年の10日目を担当します。

## Cloud Automatorとは
Cloud Automatorでは、AWSのリソースを操作するための内容を「ジョブ」と呼ばれる単位でWeb上の操作画面からGUIで登録し、日時指定やHTTPリクエストをトリガーにして実行させることが可能なサービスです。
https://cloudautomator.com/

## ジョブの連続実行
これまでCloud Automatorでは、複数のジョブを連続して実行させるためには、AmazonSQSを利用して数珠つなぎ状態にする方法をサポートしていました。（マニュアル：[「ジョブを数珠つなぎにして複数のジョブを連携する」](https://support.serverworks.co.jp/hc/ja/articles/115002244774)参照）
しかしこれは、SQSを事前に準備する必要があり、少々手間でした。

<img width="806" alt="スクリーンショット.png" src="https://qiita-image-store.s3.amazonaws.com/0/52142/38ec05a5-2d83-5120-2557-a871939a8ac9.png">

----

2017年10月に、「Webhook後処理」という機能（マニュアル：[「Webhook後処理」](https://support.serverworks.co.jp/hc/ja/articles/115002386953)参照）がリリースされました。ざっくり言うと、ジョブの実行後にその結果を任意のURLにPOSTリクエストで受け取ることが可能になります。
今回はこの機能を利用して、 **SQSを使わずに** Cloud Automatorのジョブを連続実行させてみます。

<img width="497" alt="スクリーンショット 2017-12-10 22.26.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/52142/fe07a656-8c64-0608-0e66-b6711fbc50bf.png">

## サンプル：EC2インスタンスのインスタンスタイプの変更
ここでは、先ほどのSQSを使ったインスタンスタイプを変更するための一連ジョブを、HTTPトリガーとWebhook後処理で置き換える例を示します。

例えばマネージメントコンソール上で、EC2のインスタンスタイプを手動で変更＆起動したい場合は

1. 該当のインスタンスを「停止」にする**（→完全に停止するまでしばらく待つ）**
2. インスタンスタイプを変更する
3. インスタンスを起動する

これらの操作が必要になりますが、ここで地味に面倒なのが、インスタンスが完全に停止するまで待たないと、インスタンスタイプが変更できないことです。Cloud Automatorを利用すると、これら一連の作業をジョブとして登録＆連続実行させることで、不毛な停止待ち時間もすべてCloud Automatorがハンドリングしてくれます。

### 👉 **STEP1: インスタンス起動ジョブを登録**
連続するジョブを作成する際は、最後のジョブから登録していくと手間が少なくて済みます。（2017年12月現在）
まずは、 `運用ジョブ > ジョブの追加` メニューから、新規にジョブを作成します。

![step1.png](https://qiita-image-store.s3.amazonaws.com/0/52142/67bec0a3-1c8c-9f3d-a5ee-52ef150933f7.png)

| 項目 | 設定値 |
|-----------------|------------------|
| トリガー | HTTPトリガー|
| アクション | EC2:インスタンスを起動 |
| AWSアカウント | ※CloudAutomatorに登録しているAWSアカウントを指定 |
| インスタンス | 該当のインスタンスを指定（タグの指定でもOK） |
| リソースの終了ステータスをチェックする | ※ここはチェックしてもしなくてもどちらでもOK |
| 後処理 | ※必要に応じて（指定しなくてもOK） |
| ジョブ名 | 「インスタンス起動ジョブ」など任意の名前 |

このような形で登録します。

登録完了後は、 `運用ジョブ > 運用ジョブ一覧` メニューから、先ほど作成したジョブの詳細画面を開いて、以下の情報をメモします。

<img width="934" alt="step1_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/52142/f8e42718-17ad-a6c5-53be-c64e64c21520.png">


### 👉 **STEP2: インスタンスタイプ変更ジョブの登録**
次に、インスタンスタイプの変更ジョブを登録していきます。STEP1と同じように、ジョブの新規登録画面から、以下のように登録します。

| 項目 | 設定値 |
|-----------------|------------------|
| トリガー | HTTPトリガー|
| アクション | EC2:インスタンスタイプを変更 |
| AWSアカウント | ※CloudAutomatorに登録しているAWSアカウントを指定 |
| インスタンス | 該当のインスタンスを指定（タグの指定でもOK） |
| インスタンスタイプ | ※変更したいタイプを指定 |
| 後処理 | `※新規に後処理を作成して指定（後述）` |
| ジョブ名 | 「インスタンスタイプ変更ジョブ」など任意の名前 |

**🔰 後処理の指定**
後処理の指定箇所で、「後処理を新たに作成する」ボタンを押して、作成画面を開きます。
<img width="360" alt="step2_1.png" src="https://qiita-image-store.s3.amazonaws.com/0/52142/d3666fe7-4434-acfa-2160-3175fa68ceca.png">

ここで、サービスには `Webhook` を選択し、先ほどメモしておいた「インスタンス起動ジョブ」の、 `HTTPトリガーのURL` と、 `HTTPヘッダーのAuth情報` を入力し、判別しやすい後処理名を入力して登録します。
<img width="652" alt="step2_2.png" src="https://qiita-image-store.s3.amazonaws.com/0/52142/c5dce8a3-d05e-6ec6-e5df-ad8ced95fd13.png">

後処理作成後、今作成した後処理を「成功時」の後処理に指定します。
<img width="396" alt="step2_3.png" src="https://qiita-image-store.s3.amazonaws.com/0/52142/73e07bfe-5ee5-b40a-0055-dd5af9d3c0ce.png">

以上の情報で「インスタンスタイプ変更」のジョブを作成します。
STEP1と同様に、作成したジョブの詳細画面を開き、 `HTTPトリガーのURL` と `HTTPヘッダーのAuth情報` を再度メモします。

### 👉 **STEP3: インスタンス停止ジョブの作成**
これで最後です。STEP2と同様に、ジョブの作成画面で次のように登録します。

| 項目 | 設定値 |
|-----------------|------------------|
| トリガー | ※利用したいトリガーを指定 |
| アクション | EC2:インスタンスを停止 |
| AWSアカウント | ※CloudAutomatorに登録しているAWSアカウントを指定 |
| インスタンス | 該当のインスタンスを指定（タグの指定でもOK） |
| リソースの終了ステータスをチェックする | **※ここは必ずチェックしてください** |
| 後処理 | **※新規に後処理を作成して指定（後述）** |
| ジョブ名 | 「インスタンス停止ジョブ」など任意の名前 |

【⚠️注意事項】
 「リソースの終了ステータスをチェックする」にチェックを入れることで、インスタンスが完全に停止するのを待ってから、指定した後処理が実施されるようになります。チェックを入れないと、インスタンスが停止準備の状態のままインスタンスタイプ変更のジョブが実行されてしまい、ジョブがエラー終了してしまうのでご注意ください。

**🔰 後処理の指定**
STEP2と同様に、新規に後処理を作成します。
サービスには `Webhook` を選択し、先ほどメモしておいた「インスタンスタイプ変更ジョブ」の、 `HTTPトリガーのURL` と、 `HTTPヘッダーのAuth情報` を入力し、判別しやすい後処理名を入力して登録し、ジョブ作成画面上「成功時」の後処理に、作成した後処理を指定してジョブを作成します。

以上で終了です。

## まとめ

インスタンスタイプの変更処理などは、自動化しようとすると、インスタンスが完全に停止したことをハンドリングするのが地味に大変だったりしますが、これらはすべてCloud Automator側で判断してくれるため大変便利です。

Cloud Automator上で「インスタンスの停止・変更・再起動」を行うためには、SQSで各ジョブ間を繋ぐ方法しかありませんでしたが、Webhook後処理の登場によって、その作業がかなり簡略化できるようになりました。
・・・とは言っても、後処理を毎回作成するのも大変ではあります。そのため、これらの作業すらも不要になるような便利な機能のリリースが、今後予定されています。
詳しくはサービスのロードマップページを参照してください。
https://cloudautomator.com/roadmap/