プレイスメントグループを勉強したところ、Auto Scalingグループの可用性について気になったので勉強しなおしました。
Auto Scalingグループとプレイスメントグループを組み合わせて使用することを考えてみます。
- EC2 Auto Scaling について
- EC2 Auto Scalingの可用性について
- プレイスメントグループ作成
- 起動テンプレート作成
- Auto Scaling グループ作成 EC2起動
- 結果確認
- 所感
- 参考文献
EC2 Auto Scaling について
他のブログでも散々触れられているので、詳細な説明は省きます。ざっくり言うと複数のEC2インスタンスをスケーリング、管理するためのサービスです。
EC2 Auto Scalingの可用性について
EC2 Auto Scalingの回復力 の説明によれば、
Auto Scaling グループを複数のアベイラビリティーゾーンにわたって配置します。
との説明があります。AWSのプレイスメントグループ、Azureの障害ドメインを勉強して、この説明では同一のサーバーラックにインスタンスが配置される可能性もあるのでは?と疑問が湧きました。ドキュメント読む限り、Auto Scalingを作成したとき、アベイラビリティゾーン内でのインスタンスの配置については明示されて無いようです。プレイスメントグループを利用するとアベイラビリティゾーン内でのインスタンス配置を明示できて可用性が向上するよね?と考えました。
今回はAuto Scalingにプレイスメントグループを導入してみたいと思います。
プレイスメントグループ作成
パーティションプレイスメントグループを作成します。今回はパーティションの個数を7個で作成しました。
$ aws ec2 describe-placement-groups --group-names tty6335-test-PG { "PlacementGroups": [ { "GroupName": "tty6335-test-PG", "State": "available", "Strategy": "partition", "PartitionCount": 7, "GroupId": "pg-0d7611cd2ceff627f", "GroupArn": "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:placement-group/tty6335-test-PG" } ] }
起動テンプレート作成
今回の実験では、単純にEC2インスタンスを複数起動するだけなので、ここにあるチュートリアル を参考に、起動テンプレートを作成しました。
高度な詳細の中からプレイスメントグループを指定します。
Auto Scaling グループ作成 EC2起動
さきほど作成した起動テンプレートを使用して、Auto Scaling グループを作成します。 今回の構成はざっくり図にすると以下のような感じです。
今回は計8台のインスタンスを起動します。
結果確認
AWSコンソールで確認するのが面倒くさいのでcliで確認します。
$ aws ec2 describe-instances --filters "Name=placement-group-name,Values=tty6335-test-PG" --query "Reservations[].Instances[].{InstanceID: InstanceId, Status: State.Name,PartitionNumber: Placement.PartitionNumber,AZ: Placement.AvailabilityZone}" --output table -------------------------------------------------------------------------- | DescribeInstances | +-----------------+-----------------------+-------------------+----------+ | AZ | InstanceID | PartitionNumber | Status | +-----------------+-----------------------+-------------------+----------+ | ap-northeast-1d| i-09a4819193cc25b1b | 1 | running | | ap-northeast-1d| i-0fb77376b52d47803 | 2 | running | | ap-northeast-1d| i-076ba04acf7f503aa | 3 | running | | ap-northeast-1a| i-0a3da8d42d539680b | 1 | running | | ap-northeast-1a| i-0600294354ea00a0b | 2 | running | | ap-northeast-1a| i-09c2a157a3a3180be | 3 | running | | ap-northeast-1c| i-04b83d3235ea72f22 | 2 | running | | ap-northeast-1c| i-0ee5bc46965f33a25 | 1 | running | +-----------------+-----------------------+-------------------+----------+
あれ?7このパーティションに分かれない?! 一度インスタンスをすべて終了して設定をいろいろ試してみます。
あ、公式の説明に以下のようにありましたね。
パーティションプレイスメントグループは、同じリージョン内の複数のアベイラビリティーゾーンにパーティションを持つことができます。パーティションプレイスメントグループは、アベイラビリティーゾーンごとに最大 7 つのパーティションを持つことができます。パーティションプレイスメントグループで起動できるインスタンス数の制限は、アカウントの制限のみです。
ということは、さっき試したときは3つのアベイラビリティゾーンにそれぞれ3つのインスタンスが各アベイラビリティゾーンで3つのパーティションに分かれたから挙動としては正しいのか。
次はアベイラビリティゾーンを1つに絞り、8個のインスタンスを起動してみます。
図にするとこんな感じです。
$ aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query "Reservations[].Instances[].{InstanceID: InstanceId, Status: State.Name,PartitionNumber: Placement.PartitionNumber,AZ: Placement.AvailabilityZone}" --output table -------------------------------------------------------------------------- | DescribeInstances | +-----------------+-----------------------+-------------------+----------+ | AZ | InstanceID | PartitionNumber | Status | +-----------------+-----------------------+-------------------+----------+ | ap-northeast-1d| i-0323e1d94cead8e47 | 2 | running | | ap-northeast-1d| i-09c0c43561fcabb59 | 3 | running | | ap-northeast-1d| i-0b7881ea61c805ceb | 4 | running | | ap-northeast-1d| i-0421ea05e12dec6da | 5 | running | | ap-northeast-1d| i-08ef844d88167da54 | 6 | running | | ap-northeast-1d| i-0cb873420f249e77c | 7 | running | | ap-northeast-1d| i-07acdb824677a166b | 1 | running | | ap-northeast-1d| i-00baa2f8ac7865241 | 1 | running | +-----------------+-----------------------+-------------------+----------+
1つのアベイラビリティゾーン内で7個のパーティションに分散されましたね。
所感
今回、EC2 Auto Scalingグループにプレイスメントグループを導入して、EC2配置の明示的な分散を図りました。書き手の経験から話すと、そんなに配置を分散してどうする?というのが正直な感想です。(すまん、使いどころがわからん)。まぁ、費用面でいえばプレイスメントグループは無料なので導入して損は無いのではないかなと思いました。
参考文献
サーバからリージョンまでをおさらいしてみた | DevelopersIO
Amazon EC2 Auto Scaling のレジリエンス - Amazon EC2 Auto Scaling
起動テンプレートを使用して Auto Scaling グループを作成する - Amazon EC2 Auto Scaling
Amazon EC2 Auto Scaling ⼊⾨編 AWS Black Belt Online Seminar