大量の PUSH 通知前に AutoScaling で EC2 インスタンスを増やしておきたかったので試作コード紹介(実装編)

みなさんこんにちは。また会いましたね。
先週に引き続きエンジニアの菊池が記事を担当しています。
Android_robot

まずは前回の記事のおさらいです。
ということで、

AutoScaling であらかじめインスタンスを増やしてから、PUSH 通知送ればいいじゃないか!

ということで、今回の記事では PUSH 通知前にインスタンスを増やす方法をふたつ紹介したいと思います。 【方法その1:スケジュール設定】
まず紹介したいのが、
『いつも決まった時間にトラフィックが増えるんで、決まった時間にサーバー台数を増やしておけば対応可能っす』
という方にオススメしてしている方法です。

実は AutoScaling には時間を指定してインスタンス数を変更する機能があります。ただこれ、WEB のコンソールからは使えないんですよね。コマンドラインからしか操作出来ないんで、「隠し機能っぽい」というか「使う人を選ぶというか」「エンジニアっぽいというか」そんな雰囲気出てますよね。

え!?AWSコマンドラインから操作したことがない!?ちょっとググれば出て来ると思うけど、ポインターだけ紹介しときます。

What Is the AWS Command Line Interface?
↑一番最初の使い方はここに書いてありますー

ざっくり使い方を紹介すると、
  1. WEB の IAM コンソールで Access Key ID と Secret Access key を取得(権限設定もお忘れなく)
  2. ご利用の OS 向けの CLI ツールをダウンロード&インストール
  3. CLI ツールに取得した Access Key ID と Secret Access Key と Default Region、コマンドの出力フォーマットなどを設定
無事に CLI が動くようになった勇者は無事に「WEB のコンソール以上にパワフルな AWS CLI を手に入れた!」ということで、結構いろんなことが出来ます。

中でも今回使えそうなのが autoscaling 用の以下のコマンドです:
詳しい使い方は↑読んだら書いてあるのと、ググると結構良い記事が出てくるんでここでは紹介に留めたいと思います。


【方法その2:AWS SDK で頑張る】
AWS を各種プログラミング言語で操作する SDK が配布されているので、これ使ってみましょう!

アマゾンウェブサービスのツール
↑いろんなプログラミング言語から操作できますね!

今回も使い慣れた Ruby で試作したので AWS SDK for Ruby を使って試作しました。
今回必要となりそうな SDKAPI は、
  • AutoScaling の設定で Desired Capacity に設定されている値の取得
  • AutoScaling の Desired Capacity を変更
  • AutoScaling に紐づけられている ELB のインスタンスの状況を取得
ざっとこんな感じでしょうか。これらを踏まえてコードにしたのがこちら!

上記コードは、動作確認用に作成した AWS 環境を操作するようになっています。
  • Auto Scaling Group の名前:as
  • 上記 as に割り当てられた ELB の名前:lb
この環境で Auto Scaling Group 「as」 のDesired Capacity を 0 から 3 に変更するコードになっています。

動作確認した結果のログは以下の通り:

これを上手く使えば、大量 PUSH 前にインスタンスを増やしておけそうですね!

僕はこれを Sidekiq のワーカーに仕込もうかと思っていまして、さらに試作コードを進めているのです。これは、また機会があったら紹介したいと思います。

おまけで、

【方法その3:AWS Lambda でやれるような予感】
これ書きながら予感してましたが、まだちゃんと調べてないっす。なんか出来そうな雰囲気ありますよねー。調べきったら記事にするかもしれません。

さて、それではみなさん御機嫌よう!来週はいよいよ夏休みですね!