

# Amazon EC2 トポロジーの仕組み
<a name="how-ec2-instance-topology-works"></a>

AWS ネットワークはレイヤーの階層構造内に配置されています。EC2 インスタンスは、インスタンスのタイプに応じて、3 番目のレイヤー以下にあるネットワークに接続します。インスタンスのトポロジーは一連のノードによって記述され、ネットワークの各レイヤーに 1 つのノードがあります。[DescribeInstanceTopology](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTopology.html) または [DescribeCapacityReservationTopology](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeCapacityReservationTopology.html) API レスポンスにあるノードセットはネットワーク階層のトップダウンビューを提供し、最下部のノードがインスタンスに接続されます。

**注記**  
インスタンスタイプには、ネットワーク内の 4 つのレイヤーを表すノードセットにある 4 つのネットワークノードで構成されているものもあれば、ネットワーク内の 3 つのレイヤーを表す 3 つのネットワークノードで構成されているものもあります。サポートされているインスタンスタイプについては、「[インスタンスのタイプ](ec2-instance-topology-prerequisites.md#inst-net-topology-prereqs-instance-types)」を参照してください。  
キャパシティ予約のタイプによっては、1 つ、2 つ、または 3 つのネットワークノードしか表示されない場合があります。

次の図は EC2 トポロジーを視覚的に表しており、EC2 トポロジーの理解に役立ちます。ネットワークノードは **NN1**～**NN7** として示されます。数字 **i**、**ii**、**iii** はネットワークレイヤーを示しています。数字 **1**、**2**、**3**、**4** はEC2 インスタンスを示しています。インスタンスは、以下の図で **iii** と表示されている最下部レイヤー内のノードに接続します。複数のインスタンスが同じノードに接続できます。

![インスタンストポロジーのグラフィックモデル。](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/instance-topology.png)


この例では以下のようになっています。
+ インスタンス 1 はレイヤー iii のネットワークノード 4 (NN4) に接続しています。NN4 はレイヤー ii のネットワークノード 2 (NN2) に接続しています。また NN2 はこの例でネットワーク階層の一番上にあるレイヤー i のネットワークノード 1 (NN1) に接続しています。ネットワークノードセットは NN1、NN2、NN4 で構成され、上位層から最下層まで階層的に示されています。
+ インスタンス 2 はネットワークノード 4 (NN4) にも接続しています。インスタンス 1 とインスタンス 2 は同じネットワークノードセット (NN1、NN2、NN4) を共有しています。
+ インスタンス 3 はネットワークノード 5 (NN5) に接続しています。NN5 は NN2 に接続しており、NN2 は NN1 に接続しています。インスタンス 3 に設定されているネットワークノードはNN1、NN2、NN5 です。
+ インスタンス 4 はネットワークノード 6 (NN6) に接続しています。このネットワークノードセットは NN1、NN3、NN6 です。

インスタンス 1、2、3 の近接性を考えると、インスタンス 1 と 2 は同じネットワークノード (NN4) に接続しているため互いに近く、インスタンス 3 は別のネットワークノード (NN5) に接続しているため遠くなります。

この図のすべてのインスタンスの近接性を考えると、インスタンス 1、2、3 はネットワークノードセットで NN2 を共有しているため、インスタンス 4 よりも互いに近くなります。

原則として、いずれかの 2 つのインスタンスに接続されているネットワークノードが同じ場合、インスタンス 1 と 2 の場合と同様に、これらのインスタンスは互いに物理的に近くなります。さらに、ネットワークノード間のホップ数が少ないほど、インスタンスは互いに近くなります。例えば、インスタンス 1 と 3 ではインスタンス 4 との共通のネットワークノード (NN1) へよりも共通のネットワークノード (NN2) への方がホップ数が少ないため、これらはインスタンス 4 よりも互いに近くなります。

この例ではネットワークノード 7 (NN7) ではインスタンスが実行されていないため、API 出力に NN7 は含まれません。

## DescribeInstanceTopology の出力を解釈する方法
<a name="how-to-interpret-the-output"></a>

[DescribeInstanceTopology](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstanceTopology.html) API を使用してインスタンストポロジーを記述できます。出力ではインスタンスの基盤となるネットワークトポロジーが階層的に示されます。

次の出力例は上の図にある 4 つのインスタンスにおけるネットワークトポロジーの情報に対応します。この例のため、出力例にはコメントが含まれています。

出力に含まれる次の情報に注意してください。
+ `NetworkNodes` では単一インスタンスのネットワークノードセットについて記述されます。
+ 各ネットワークノードセットではネットワークノードは上から下に階層的に一覧表示されます。
+ インスタンスに接続されているネットワークノードは一覧にある最後のネットワークノード (最下層) です。
+ 互いに近いインスタンスを調べるにはまず、最下層にある共通のネットワークノードを見つけます。最下層に共通のネットワークノードがない場合、上位層で共通のネットワークノードを探します。

次の出力例で `i-1111111111example` と `i-2222222222example` は最下層に共通のネットワークノード `nn-4444444444example` があるため、この例における他のインスタンスと比較して互いに最も近い位置にあります。

**注記**  
レスポンスには 3 つ以上のネットワークノードが含まれます。サポートされている各インスタンスタイプのレスポンスにあるネットワークノードの数については、「[インスタンスのタイプ](ec2-instance-topology-prerequisites.md#inst-net-topology-prereqs-instance-types)」を参照してください。

```
{
    "Instances": [
        {
            "InstanceId": "i-1111111111example",  //Corresponds to instance 1
            "InstanceType": "p4d.24xlarge",
            "GroupName": "ML-group",
            "NetworkNodes": [
                "nn-1111111111example",           //Corresponds to NN1 in layer i
                "nn-2222222222example",           //Corresponds to NN2 in layer ii
                "nn-4444444444example"            //Corresponds to NN4 in layer iii - bottom layer, connected to the instance
            ],
            "CapacityBlockId": "null",
            "ZoneId": "usw2-az2",
            "AvailabilityZone": "us-west-2a"
        },
        {
            "InstanceId": "i-2222222222example",  //Corresponds to instance 2
            "InstanceType": "p4d.24xlarge",
            "NetworkNodes": [
                "nn-1111111111example",           //Corresponds to NN1 - layer i
                "nn-2222222222example",           //Corresponds to NN2 - layer ii
                "nn-4444444444example"            //Corresponds to NN4 - layer iii - connected to instance
            ],
            "CapacityBlockId": "null",
            "ZoneId": "usw2-az2",
            "AvailabilityZone": "us-west-2a"
        },
        {
            "InstanceId": "i-3333333333example",  //Corresponds to instance 3
            "InstanceType": "trn1.32xlarge",
            "NetworkNodes": [
                "nn-1111111111example",           //Corresponds to NN1 - layer i
                "nn-2222222222example",           //Corresponds to NN2 - layer ii
                "nn-5555555555example"            //Corresponds to NN5 - layer iii - connected to instance
            ],
            "CapacityBlockId": "null",
            "ZoneId": "usw2-az2",
            "AvailabilityZone": "us-west-2a"            
        },
        {
            "InstanceId": "i-444444444example",  //Corresponds to instance 4
            "InstanceType": "trn1.2xlarge",
            "NetworkNodes": [
                "nn-1111111111example",          //Corresponds to NN1 - layer i
                "nn-3333333333example",          //Corresponds to NN3 - layer ii
                "nn-6666666666example"           //Corresponds to NN6 - layer iii - connected to instance
            ],
            "CapacityBlockId": "null",
            "ZoneId": "usw2-az2",
            "AvailabilityZone": "us-west-2a"          
        }
    ],
    "NextToken": "SomeEncryptedToken"
}
```

## DescribeCapacityReservationTopology の出力を解釈する方法
<a name="how-to-interpret-the-describecapacityreservationtopology-output"></a>

[DescribeCapacityReservationTopology](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeCapacityReservationTopology.html) API を使用して、キャパシティ予約トポロジーを記述できます。出力ではリザーブドキャパシティの基盤となるネットワークトポロジーが階層的に示されます。

次の出力例は上の図のネットワークトポロジーの情報に対応します。この例のため、出力例にはコメントが含まれています。

出力に含まれる次の情報に注意してください。
+ `NetworkNodes` は、単一のキャパシティ予約のネットワークノードセットを記述します。
+ 各ネットワークノードセットではネットワークノードは上から下に階層的に一覧表示されます。
+ キャパシティ予約に接続されているネットワークノードは一覧にある最後のネットワークノード (最下層) です。
+ キャパシティ予約が互いに近いかどうかを調べるには、まず出力の最下層で共通のネットワークノードを見つけます。最下層に共通のネットワークノードがない場合、上位層で共通のネットワークノードを探します。

次の出力例では、`cr-1111111111example` は `nn-2222222222example` にあり、`cr-2222222222example`は `nn-3333333333example` にあります。キャパシティ予約は `layer ii` の異なるネットワークノード上にあるため、あるキャパシティ予約のインスタンスから別のキャパシティ予約のインスタンスへの通信は非効率になります。

**注記**  
レスポンスには、キャパシティ予約のタイプに応じて 1 つ、2 つ、または 3 つのネットワークノードが含まれます。

```
{
    "CapacityReservations": [
        {
            "CapacityReservationId": "cr-1111111111example",
            "CapacityBlockId": "null",
            "State": "active",
            "InstanceType": "p4d.24xlarge",
            "NetworkNodes": [
                "nn-1111111111example",      //Corresponds to NN1 - layer i
                "nn-2222222222example"       //Corresponds to NN2 - layer ii
                // Visibility of additional nodes requires an instance launch and 
                // the DescribeInstanceTopology API
            ],
            "AvailabilityZone": "us-west-2a"
        },
        {
            "CapacityReservationId": "cr-2222222222example",
            "CapacityBlockId": "null",
            "State": "active",
            "InstanceType": "trn1.2xlarge",
            "NetworkNodes": [
                "nn-1111111111example",      //Corresponds to NN1 - layer i
                "nn-3333333333example"       //Corresponds to NN3 - layer ii
                // Visibility of additional nodes requires an instance launch and 
                // the DescribeInstanceTopology API
            ],
            "AvailabilityZone": "us-west-2a"
        }
    ],
    "NextToken": "SomeEncryptedToken"
}
```

## DescribeInstanceTopology と DescribeCapacityReservationTopology の違い
<a name="differences-between-describing-instance-topology-and-capacity-reservation-topology"></a>

次の表は、DescribeInstanceTopology API と DescribeCapacityReservationTopology API の主な違いを比較しています。


| 比較ポイント | DescribeInstanceTopology | DescribeCapacityReservationTopology | 
| --- | --- | --- | 
| 使用フェーズ | 起動後 (実行モード) | 起動前 (プランニングおよび管理モード) | 
| 主な目的 | 実行中のインスタンスでのワークロードの最適化 | インスタンス起動前のキャパシティプランニングとキャパシティ予約管理 (マージ、分割、割り当て) | 
| ネットワークノードの数 | 実行中のインスタンスのすべてのノードを表示します。インスタンスがキャパシティ予約にある場合、最初のノードは対応するキャパシティ予約トポロジーと一致し、その後で追加のノードがインスタンスに接続します。 | ノードの部分的なセットを表示します。これは、キャパシティ予約の状態 (`pending` または `active`) とタイプによって異なります。\* | 
| State | インスタンスは `running` の状態である必要があります。 | キャパシティ予約は `pending` または `active` の状態である必要があります。 | 
| ユースケース |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/how-ec2-instance-topology-works.html)  |  [See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/how-ec2-instance-topology-works.html)  | 

\* Ultraserver のキャパシティブロックの場合、`active` のキャパシティ予約またはその実行中のインスタンスのトポロジーを記述するとき、ネットワークノードセットは同じです。