夜間にEC2のインスタンスタイプを自動で変更する方法

記事タイトルとURLをコピーする

こんにちは。takada@福岡オフィスです。
子供の頃、寝る前にマミーが読んでくれる絵本が大好きでした。特に「小人と靴屋」がお気に入りでした。そう、寝てる間に小人達が靴を作ってくるアレです。大人になって、瞳が濁った今でも、「あー。寝てる間に小人が溜まった仕事終わらせてといてくれないかなー。」と純粋に濁った目で思ったりします。未だに小人は発見できていないし、朝起きても溜まった仕事は終わっていることもないのですが、夜間にEC2のインスタンスタイプを変更してくれるCloud Automatorの使い方をご紹介します。

処理の概要

Cloud Automator(以下、CA)の詳細ついては、こちらや、福岡オフィス所属のCloud Automator 開発チームの山田がまとめています入門記事「AWS運用自動化、最初の一歩 - Cloud Automator 入門記事まとめ」を参照ください。
さて、EC2を運用開始後にインスタンスタイプを変更したくなることがあります。ただし、EC2のインスタンスタイプの変更には、インスタンスの停止が必要なため、サービスへの影響が少ない夜間に実施を望むケースが多いです。こんな時、通常であれば、夜間作業ということになるのですが、CAを使うと、予め時間をセットしておくだけで自動でインスタンスタイプの変更を行うことができます。処理の概要を図示したものが、以下になります。

  1. CAは、設定された時間にEC2インスタンスを停止します
  2. CAは、EC2インスタンスの停止後に、AWSのSQSのキュー(resizeという名前のキュー)にメッセージを送信します
  3. CAは、resizeキューを監視しており、ここにキューが溜まったとを検出します
  4. CAはEC2インスタンスのタイプ変更を行います
  5. CAは、AWSのSQSのキュー(startという名前のキュー)にメッセージを送信します
  6. CAは、startキューを監視しており、ここにキューが溜まったとを検出します
  7. CAはEC2インスタンスを起動します

設定方法

AWS SQSのキューの作成

実際の設定方法を見ていきます。まず、AWS側で、SQSのキューを2つ作成します。パラメータはデフォルトの設定のまま作成して問題ありません。

CAの後処理の作成

続いて、CA側で、「後処理」の設定を行います。以下のように「後処理設定」の画面に遷移します。

遷移後の画面で、SQSへメッセージを送信する処理を追加します。以下は、前述の2の部分の処理です。同様に、5の部分の後処理も別に作成します。
続いて、途中の処理で失敗した場合や、最後の結果をメールで通知するのため後処理も作成します。サービスを「Eメール」として作成してください。

最終的には、SQSサービスの後処理が2つ、Eメールサービスの後処理が1つとなります。

CAのジョブの作成

続いて、実際の動作を設定していきます。CAはジョブと言う単位で設定を行っていきます。
まずは、EC2インスタンスを停止するジョブです。以下のような設定になります。後処理として、成功時は、resize用キューにメッセージを送信する処理を指定します。失敗時は、Eメールを送信するジョブを指定します。

次に、インスタンスタイプを変更するジョブを作成します。以下のような設定になります。後処理として、成功時は、start用キューにメッセージを送信する処理を指定します。失敗時は、Eメールを送信するジョブを指定します。

最後に、インスタンスタイプを起動するジョブを作成します。以下のような設定になります。後処理として、成功時、失敗時ともに、Eメールを送信するジョブを指定します。

以上の設定を行うと、指定時間になると、CAが対象のEC2インタタンスを停止し、インスタンスタイプを変更後、起動してくれます。
また、CAのジョブは、ダッシュボード上からジョブの状態(有効/無効)を、以下のようにON/OFFで切り替えることができます。


上記の設定を1度作ってしまえば、使わない時は1つの目のジョブをOFFにしておけば、動作しません。
再び使う時は、3つのジョブで対象のインスタンスIDやインスタタンスタイプの指定を変更した上で、1つ目のジョブをONにするとで、簡単に再利用することができます。

まとめ

Cloud Automatorの詳しい使い方などは、1ヶ月の無料トライアルを実施中ですので、この機会に一度触ってみていただければと。
ちなみに、先日ハイボールを浴びて、泥のように眠って起きたら、散らかしてた洗濯物が片付けられていたので、小人の仕業かと思ったのですが、妻と子どもの御業でした。いつもすみません。