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版でも使用したいですね。
参考
- http://aws.amazon.com/releasenotes/0806439683523573
- http://docs.aws.amazon.com/AutoScaling/latest/APIReference/API_DescribeAccountLimits.html
- http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/create-lc-with-instanceID.html#create-lc-with-instance-type
- http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/create-asg-from-instance.html
- http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/attach-instance-asg.html
- http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html