backend
A
信頼度ランク
| S | 公式ソース確認済み |
| A | 成功実績多数・失敗例少数 |
| B | 賛否両論 |
| C | 動作未確認・セキュリティリスク高 |
| Z | 個人所感 |
EC2配置グループ — Cluster/Spread/Partitionの使い分けと制約
EC2の3種類の配置グループ(クラスター、スプレッド、パーティション)の仕組み、ネットワーク性能への影響、ハードウェア障害の隔離、HPC・大規模分散処理での設計パターンを解説。
一言結論
Clusterは単一AZ内で超低レイテンシーを得る代わりにハードウェア障害が全体に影響し、SpreadはAZあたり7台までの完全障害隔離に特化し、Partitionは大規模分散DB向けにその中間を取った設計であるため、ワークロードの性質で明確に使い分けることが重要だ。
配置グループの目的
EC2配置グループ(Placement Group)は「インスタンスを物理的にどう配置するか」を制御する機能だ。ネットワーク性能の最大化、またはハードウェア障害の影響範囲の最小化が目的となる。
3種類の配置グループ
Cluster(クラスター)配置グループ
配置方法: 同一AZ内の物理的に近いハードウェアにまとめる
メリット: 低レイテンシ・高スループットのネットワーク(10Gbps以上)
デメリット: 単一ハードウェアに集中 → ハードウェア障害で全インスタンス影響
用途: HPC(高性能計算)、MPI、機械学習の分散学習
注意点:
- 異なるインスタンスタイプを混在させると性能が出ない場合がある
- 利用可能なキャパシティが不足すると起動失敗("insufficient capacity error")
- AZをまたいでは設定できない
- 拡張ネットワーキング(ENA)が有効なインスタンスで最大効果
Spread(スプレッド)配置グループ
配置方法: 各インスタンスを異なる物理ハードウェア(ラック)に分散
メリット: 1つのハードウェア障害が他のインスタンスに影響しない
デメリット: インスタンス間のレイテンシは通常のEC2と同等
用途: 可用性最重視のクリティカルなワークロード
制約:
- AZごとに最大7インスタンスまで
- 同一リージョン内の複数AZに分散可能
Partition(パーティション)配置グループ
配置方法: AZ内に複数のパーティション(論理グループ)を作成し、
各パーティションを異なる物理ハードウェアに配置
メリット: 大量インスタンスを複数パーティションに分散
1パーティションの障害が他パーティションに影響しない
インスタンスのパーティション情報をメタデータで取得可能
デメリット: Spreadより多いインスタンスを扱えるが設定が複雑
用途: Hadoop, Kafka, Cassandraなど分散データ処理
特徴:
- AZごとに最大7パーティション
- 1パーティションあたりのインスタンス数に制限なし
- 同一パーティション内はClusterと同様に近くに配置
比較表
| 特徴 | Cluster | Spread | Partition |
|---|---|---|---|
| ネットワーク性能 | 最高 | 通常 | 通常〜中程度 |
| ハードウェア障害隔離 | なし | 完全(インスタンスごと) | パーティション単位 |
| AZ | 単一AZのみ | 複数AZにまたがれる | 複数AZにまたがれる |
| インスタンス数上限 | なし(ただしキャパシティ依存) | 7/AZ | 7パーティション/AZ |
| 主な用途 | HPC, ML | 少数の重要インスタンス | 大規模分散DB |
配置グループの作成と使い方
# Cluster配置グループの作成
aws ec2 create-placement-group \
--group-name hpc-cluster \
--strategy cluster
# Spread配置グループの作成
aws ec2 create-placement-group \
--group-name critical-spread \
--strategy spread
# Partition配置グループの作成(3パーティション)
aws ec2 create-placement-group \
--group-name hadoop-partition \
--strategy partition \
--partition-count 3
# 配置グループを指定してインスタンスを起動
aws ec2 run-instances \
--image-id ami-xxx \
--instance-type c5n.18xlarge \
--placement '{
"GroupName": "hpc-cluster",
"Tenancy": "default"
}' \
--count 10
パーティション情報の取得(分散ストレージ用)
# インスタンスメタデータからパーティション番号を取得
import requests
token = requests.put(
'http://169.254.169.254/latest/api/token',
headers={'X-aws-ec2-metadata-token-ttl-seconds': '21600'}
).text
partition_num = requests.get(
'http://169.254.169.254/latest/meta-data/placement/partition-number',
headers={'X-aws-ec2-metadata-token': token}
).text
# アプリケーション(Kafka等)がパーティション番号を使って
# データの配置先を決定できる
Cluster配置グループでのHPCネットワーク
# ENA(Elastic Network Adapter)が有効か確認
aws ec2 describe-instances \
--instance-ids i-xxx \
--query 'Reservations[].Instances[].EnaSupport'
# ENA有効なインスタンスタイプ(Cluster配置グループで最大効果)
# C5n, P3dn, R5n: 最大100Gbps
# C5, M5, R5: 最大25Gbps
# EFA(Elastic Fabric Adapter)でMPI用の超低レイテンシ通信
aws ec2 run-instances \
--instance-type hpc6a.48xlarge \
--network-interfaces '[{
"DeviceIndex": 0,
"InterfaceType": "efa"
}]'
試験頻出ポイント
| シナリオ | 回答 |
|---|---|
| HPCワークロード、最高ネットワーク性能 | Cluster配置グループ |
| 少数の重要インスタンスの完全な障害隔離 | Spread配置グループ |
| Hadoop/Kafka等の大規模分散DB | Partition配置グループ |
| Spread配置グループのAZあたりの上限 | 7インスタンス |
| Cluster配置グループを異なるAZにまたがせる | 不可(単一AZのみ) |
まとめ
配置グループはワークロードの性質によって選ぶ。HPC/MLはClusterで低レイテンシ最優先、少数のクリティカルなインスタンスはSpreadで完全隔離、Hadoop等の大規模分散システムはPartitionを使う。