okochangの馬鹿でありがとう

ふらふら適当に世間を生きる日々でございます

EC2インスタンスを使ってAuto Scalingを設定する

こんにちは、@oko_changです。
Twitterを眺めていたら新年早々Auto Scalingに新しい機能がリリースされているようなので、少し触ってみました。
リリース内容の詳細はこちらのリンクに記載されているので、リンクをご覧ください。

環境

Auto Scaling Command Line Toolはすでに新しい機能に対応しているので、以下の環境でテストをしました。

  • Auto Scaling Command Line Tool 1.0.61.4

Auto Scalingの基本的な使い方はこちらの記事をご覧ください。

動作確認

Auto Scalingリソース上限の確認

以下のコマンドで、Auto Scalingに関連するリソースの上限値を知ることが出来るようになりました。
私のアカウントでは以下のようにAuto Scaling Groupが20個、Launch Configurationが100個が上限である事が分かります。

$ as-describe-account-limits --headers
MAX-NUMBER-OF-AUTO-SCALING-GROUPS  MAX-NUMBER-OF-LAUNCH-CONFIGURATIONS
20                                 100

EC2インスタンスを使ったLaunch Configurationの作成

稼働中のEC2インスタンスから新しいLaunch Configurationを作成する事が出来るようになりました。
以下のようなコマンドで簡単にLaunch Configurationを作成出来ます。

$ as-create-launch-config okochang-lc --instance-id i-26c1a923
OK-Created launch config

次のコマンドで作成されたLaunch Configurationを見ると、作成元インスタンスが使用しているAMIやSecurity Groupなどと同じ設定で作成されている事が分かります。
作成元インスタンスが使用しているAMIを使ってLaunch Configurationを使用しているので、AMIから起動後にインスタンスの設定が変更されている場合は注意が必要です。

$ as-describe-launch-configs okochang-lc --headers --show-long

また、作成元インスタンスの一部を変更したい場合は、以下のようにパラメータを指定してLaunch Configurationを作成します。
例)インスタンスタイプを変更する場合

$ as-create-launch-config okochang-lc --instance-id i-26c1a923 --instance-type m1.medium
OK-Created launch config

EC2インスタンスを使ったAuto Scaling Groupの作成

先ほどはEC2インスタンスからLaunch Configurationを作成しましたが、Auto Scaling Groupを作る事も出来ます。

$ as-create-auto-scaling-group okochang-asg --instance-id i-26c1a923 --min-size 1 --max-size 4 --desired-capacity 1
OK-Created AutoScalingGroup

以下のコマンドで作成されたAuto Scaling Groupによって新しいインスタンスが作成元と同じゾーンやサブネットなどに配置されている事が分かります。

$ as-describe-auto-scaling-groups okochang-asg --headers --show-long

また、Auto Scaling Group名と同じLaunch Configurationも同時に作成されています。
以下のコマンドを実行すると、Launch Configurationも作成元インスタンスと同じ設定がされている事が分かります。

$ as-describe-launch-configs okochang-asg --headers --show-long

Auto Scaling GroupへEC2インスタンスをアタッチ

すでに作成済みのAuto Scaling GroupにEC2インスタンスをアタッチ出来るようにもなっています。
アタッチするインスタンスは以下のような点を注意します。

  • アタッチするEC2インスタンスのステータスがrunning状態であること
  • アタッチするEC2インスタンスがAuto Scaling Groupと同じAZであること
  • アタッチするEC2インスタンスがAuto Scaling Groupと同じAWSアカウントであること
  • アタッチするEC2インスタンスが他のAuto Scaling Groupのメンバーでないこと
  • Auto Scaling GroupがELBを使用している場合、アタッチするEC2インスタンスとELBが同じVPCやEC2クラシックに存在すること
  • Auto Scaling Groupへアタッチすることによって起動プロセスが停止したりはしない

実際にAuto Scaling Groupへインスタンスをアタッチするには以下のようなコマンドを実行します。

$ as-attach-instances i-26c1a923 --auto-scaling-group okochang-asg
OK-Instance(s) will be attached

以下のコマンドを実行すると、Auto Scaling Groupにアタッチされたことが分かります。

$ as-describe-auto-scaling-groups okochang-asg --headers

Launch Configurationでのブロックデバイスマッピング

Launch Configuration作成時にDeleteOnTermination、provisioned IOPs、block device mappingの設定が出来るようになっています。
これらの設定はas-create-launch-configコマンドの--block-device-mappingオプションを使用します。
オプションはkey1=value1のような形で指定し、valueの値は[snapshot-id]:[volume-size]:[true|false]:[standard|io1[:iops]]の順番で指定します。
/dev/sdcにsnap-16cba833のスナップショットを使用して100GBのEBS(DeleteOnTerminationをtrue)をProvisioned IOPSを100で作成する場合は以下のコマンドを実行します。

$ as-create-launch-config okochang-lc \
--image-id ami-79711578 \
--instance-type m1.large \
--key okochang-key \
--group sg-b72d31db \
--block-device-mapping "/dev/sdc=snap-16cba833:100:false:io1:200"

まとめ

細かいところのリリースとなりますが結構便利に使える機能が増えた印象があります。
Auto Scalingを使ってない環境からAuto Scalingの環境への移行もスムーズに出来るようになったかなーと思いました。
はやくPython版でも使用したいですね。