インスタンスのネットワーク構成を表示する


このページの手順に沿って、コンピューティング インスタンスのネットワーク インターフェース、ネットワーク、サブネット、IP アドレスを表示します。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、 Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のいずれかのオプションを選択して Compute Engine に対する認証を行います。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

必要なロール

インスタンスのネットワーク構成を表示するために必要な権限を取得するには、プロジェクトに対する Compute インスタンス管理者(v1)(roles/compute.instanceAdmin.v1)または Compute ネットワーク管理者(roles/compute.networkAdmin)の IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

この事前定義ロールには、インスタンスのネットワーク構成を表示するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

インスタンスのネットワーク構成を表示するには、次の権限が必要です。

  • インスタンスのネットワーク構成を表示する: インスタンスの compute.instances.get
  • インスタンスの IP アドレスを表示する: プロジェクトに対する compute.instances.list

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

IP アドレスを表示する

インスタンスの内部 IP アドレスと外部 IP アドレスを表示できます。IP アドレスは IPv4 または IPv6 アドレスにできます。

コンソール

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 省略可: [フィルタ] ボックスを使用して、表示されるインスタンス数を制限します。

  3. インスタンスに外部 IP アドレスがある場合は、[外部 IP] 列にアドレスが表示されます。

    インスタンスに外部 IP アドレスがない場合は、アドレスを割り振ることができます。

内部 IP と外部 IP が表示されている VM インスタンスのページ。

列表示オプションによっては、上の画像に表示されている列よりも多くの列または少ない列が表示される場合があります。

gcloud

インスタンスの IP アドレスを表示するには、次の 2 つのコマンドを使用できます。

  • gcloud compute instances list には、コンピューティング インスタンスで使用されるすべての IP アドレス(静的またはエフェメラル)が表示されます。
  • gcloud compute addresses list には、コンピューティング インスタンスに割り当てられている予約済み IP アドレスがすべて表示されます。

このタスクでは、gcloud compute instances コマンドを使用して IP アドレスを表示する方法について説明します。

  1. インスタンスの内部 IP アドレスと外部 IP アドレスを表示するには、gcloud compute instances list コマンドを使用します。

    gcloud compute instances list

    --filter 句を追加して、コマンドから返されるインスタンスの数を制限できます(例: --filter='zone:us-central1-c')。

    出力は次のようになります。

    NAME           ZONE            MACHINE_TYPE    PREEMPTIBLE  INTERNAL_IP                EXTERNAL_IP                     STATUS
    webapp1        us-central1-c   c3-highmem-88   true         192.0.2.11                                                 RUNNING
    my-instance    us-central1-c   n4-standard-2                192.0.2.126                203.0.113.6                     RUNNING
    my-dual-stack  us-central1-a   e2-micro                     192.0.2.54                 203.0.113.7                     RUNNING
                                                                                          2001:db8:2:2:2:2:2:2/96
    new-ipv6-only  us-central1-a   n4-standard-2                2001:db8:1:1:1:1:1:1/96                                    RUNNING
    
  2. 特定のインスタンスの内部 IP アドレスまたは外部 IP アドレスを表示するには、--format フラグを使用して gcloud compute instances describe コマンドを使用し、出力をフィルタリングします。

    内部アドレス

    特定のインスタンスの内部 IP アドレスを表示するには、次のいずれかのコマンドを使用します。

    • IPv4 アドレス:

         gcloud compute instances describe INSTANCE_NAME \
             --zone=ZONE \
             --format='get(networkInterfaces[0].networkIP)'
        
      192.0.2.11
    • IPv6 アドレス:

         gcloud compute instances describe INSTANCE_NAME \
             --zone=ZONE \
             --format='get(networkInterfaces[0].ipv6Address)'
        
      2001:db8:2:2:2:2:2:2

    外部アドレス

    特定のインスタンスの外部 IP アドレスを表示するには、次のいずれかのコマンドを使用します。

    • IPv4 アドレス:

         gcloud compute instances describe INSTANCE_NAME \
             --zone=ZONE \
             --format='get(networkInterfaces[0].accessConfigs[0].natIP)'
        
      203.0.113.6
    • IPv6 アドレス:

         gcloud compute instances describe INSTANCE_NAME \
             --zone=ZONE \
             --format='get(networkInterfaces[0].ipv6AccessConfigs[0].externalIpv6)'
        
      2001:db8:3:3:3:3:3:3

    次のように置き換えます。

    • INSTANCE_NAME: 内部 IP または外部 IP を表示するインスタンスの名前
    • ZONE: インスタンスが存在するゾーンの名前。

    コマンドが IP アドレスを返さない場合、インスタンスに外部 IP アドレスが構成されていません。

REST

instances.get メソッドGET リクエストを送信します。 $fields クエリ パラメータをリクエストに追加すると、出力を目的のフィールドのみに制限できます。

 GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/INSTANCE_NAME$fields=name,networkInterfaces.networkIP,networkInterfaces.accessConfigs.natIP,networkInterfaces.ipv6AccessConfigs.externalIpv6
 

次のように置き換えます。

  • PROJECT_NAME: インスタンスが含まれているプロジェクトの名前。
  • ZONE: クエリを実行するインスタンスのゾーン。
  • INSTANCE_NAME: 返されるインスタンス リソースの名前。

いずれかの IP アドレスが構成されていない場合、そのフィールドは出力に表示されません。外部 IPv6 アドレスを持つデュアルスタック ネットワークを使用するコンピューティング インスタンスの場合、レスポンス本文は次のようになります。

{
  "name": "my-dual-stack-vm",
  "networkInterfaces": [
    {
      "networkIP": "10.0.0.2",
      "accessConfigs": [
        {
          "natIP": "104.155.21.204"
        }
      ],
      "ipv6AccessConfigs": [
        {
          "externalIpv6": "2600:1900:4010:8b2:0:0:0:0"
        }
      ]
    }
  ]
}

必要な情報は次のフィールドに含まれています。

  • networkIP: 割り当てられた内部 IPv4 アドレス。
  • natIP: 割り当てられた外部 IPv4 アドレス。
  • externalIpv6: 割り当てられた外部 IPv6 アドレス。

Python

from enum import Enum
from typing import List

from google.cloud import compute_v1


def get_instance(project_id: str, zone: str, instance_name: str) -> compute_v1.Instance:
    """
    Get information about a VM instance in the given zone in the specified project.

    Args:
        project_id: project ID or project number of the Cloud project you want to use.
        zone: name of the zone you want to use. For example: “us-west3-b”
        instance_name: name of the VM instance you want to query.
    Returns:
        An Instance object.
    """
    instance_client = compute_v1.InstancesClient()
    instance = instance_client.get(
        project=project_id, zone=zone, instance=instance_name
    )

    return instance


class IPType(Enum):
    INTERNAL = "internal"
    EXTERNAL = "external"
    IP_V6 = "ipv6"


def get_instance_ip_address(
    instance: compute_v1.Instance, ip_type: IPType
) -> List[str]:
    """
    Retrieves the specified type of IP address (ipv6, internal or external) of a specified Compute Engine instance.

    Args:
        instance (compute_v1.Instance): instance to get
        ip_type (IPType): The type of IP address to retrieve (ipv6, internal or external).

    Returns:
        List[str]: Requested type IP addresses of the instance.
    """
    ips = []
    if not instance.network_interfaces:
        return ips
    for interface in instance.network_interfaces:
        if ip_type == IPType.EXTERNAL:
            for config in interface.access_configs:
                if config.type_ == "ONE_TO_ONE_NAT":
                    ips.append(config.nat_i_p)
        elif ip_type == IPType.IP_V6:
            for ipv6_config in getattr(interface, "ipv6_access_configs", []):
                if ipv6_config.type_ == "DIRECT_IPV6":
                    ips.append(ipv6_config.external_ipv6)

        elif ip_type == IPType.INTERNAL:
            # Internal IP is directly available in the network interface
            ips.append(interface.network_i_p)
    return ips

Java


import com.google.cloud.compute.v1.AccessConfig;
import com.google.cloud.compute.v1.AccessConfig.Type;
import com.google.cloud.compute.v1.GetInstanceRequest;
import com.google.cloud.compute.v1.Instance;
import com.google.cloud.compute.v1.InstancesClient;
import com.google.cloud.compute.v1.NetworkInterface;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class GetVmAddress {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // Project ID or project number of the Google Cloud project you want to use.
    String projectId = "your-project-id";
    // Instance ID of the Google Cloud project you want to use.
    String instanceId = "your-instance-id";
    // IPType you want to search.
    IpType ipType = IpType.INTERNAL;

    getVmAddress(projectId, instanceId, ipType);
  }

  // Retrieves the specified type of IP address
  // (ipv6, internal or external) of a specified Compute Engine instance.
  public static List<String> getVmAddress(String projectId, String instanceId, IpType ipType)
          throws IOException {
    List<String> result = new ArrayList<>();
    Instance instance = getInstance(projectId, instanceId);

    for (NetworkInterface networkInterface : instance.getNetworkInterfacesList()) {
      if (ipType == IpType.EXTERNAL) {
        for (AccessConfig accessConfig : networkInterface.getAccessConfigsList()) {
          if (accessConfig.getType().equals(Type.ONE_TO_ONE_NAT.name())) {
            result.add(accessConfig.getNatIP());
          }
        }
      } else if (ipType == IpType.IP_V6) {
        for (AccessConfig accessConfig : networkInterface.getAccessConfigsList()) {
          if (accessConfig.hasExternalIpv6()
                  && accessConfig.getType().equals(Type.DIRECT_IPV6.name())) {
            result.add(accessConfig.getExternalIpv6());
          }
        }
      } else if (ipType == IpType.INTERNAL) {
        result.add(networkInterface.getNetworkIP());
      }
    }

    return result;
  }

  private static Instance getInstance(String projectId, String instanceId) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (InstancesClient instancesClient = InstancesClient.create()) {
      GetInstanceRequest request = GetInstanceRequest.newBuilder()
              .setInstance(instanceId)
              .setProject(projectId)
              .setZone("us-central1-b")
              .build();
      return instancesClient.get(request);
    }
  }

  public enum IpType {
    INTERNAL("internal"),
    EXTERNAL("external"),
    IP_V6("ipv6");

    private final String type;

    IpType(String type) {
      this.type = type;
    }

    public String getType() {
      return type;
    }
  }
}

インスタンスのネットワーク インターフェースを表示する

各コンピューティング インスタンスには、少なくとも 1 つのネットワーク インターフェースがあります。インスタンスのネットワーク インターフェースの構成プロパティは、次の方法で表示できます。

コンソール

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 省略可: [フィルタ] ボックスを使用して、表示されるインスタンス数を制限します。

  3. 検査するインスタンスの名前をクリックします。

  4. [ネットワーキング] セクションの [ネットワーク インターフェース] で、インスタンス用に作成されたネットワーク インターフェース(NIC)、各 NIC に関連付けられたネットワークとサブネット、割り振られた IP アドレスを確認できます。

  5. NIC の名前をクリックして、[ネットワーク インターフェースの詳細] ページを開きます。このページでは、NIC で使用されているファイアウォールとルートを確認できます。また、NIC の接続テストも実行できます。

gcloud

コンピューティング インスタンスのネットワーク インターフェース(NIC)を表示するには、gcloud compute instances describe コマンドを使用します。コマンドに --format オプションを追加すると、返される情報を特定のフィールドに制限し、表示方法を変更できます。次に例を示します。

gcloud compute instances describe INSTANCE_NAME --zone=ZONE \
    --format="flattened(name,networkInterfaces[].name, networkInterfaces[].network.basename(), networkInterfaces[].stackType, networkInterfaces[].nicType)"

上記のコマンドでは、次のような出力が返されます。

name:                           my-multinic-vm
networkInterfaces[0].name:      nic0
networkInterfaces[0].network:   default
networkInterfaces[0].nicType:   GVNIC
networkInterfaces[0].stackType: IPV4_ONLY
networkInterfaces[1].name:      nic1
networkInterfaces[1].network:   appnet-vpc-0
networkInterfaces[1].nicType:   GVNIC
networkInterfaces[1].stackType: IPV4_IPV6

REST

instances.get メソッドに対して GET リクエストを作成します。 リクエストに $fields クエリ パラメータを追加すると、出力を networkInterfaces プロパティのみに制限できます。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/INSTANCE_NAME?$fields=networkInterfaces

次のように置き換えます。

  • PROJECT_NAME: インスタンスを含むプロジェクトの名前。
  • ZONE: クエリを実行するインスタンスのゾーン。
  • INSTANCE_NAME: 返されるインスタンス リソースの名前。

レスポンス本文は次のようになります。

{
  "networkInterfaces": [
  {
    "kind": "compute#networkInterface",
    "network": "https://www.googleapis.com/compute/v1/projects/my-project/global/networks/network-name-1",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/subnet-name-1",
    "networkIP": "10.128.0.15",
    "name": "nic0",
    "accessConfigs": [
      {
        "kind": "compute#accessConfig",
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
        "networkTier": "PREMIUM"
      }
    ],
    "fingerprint": "mBy9xvkWA9M=",
    "stackType": "IPV4_ONLY",
    "nicType": "GVNIC"
  },
  {
    "kind": "compute#networkInterface",
    "network": "https://www.googleapis.com/compute/v1/projects/my-project/global/networks/network-name-2",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/subnet-name-2",
    "networkIP": "10.0.20.2",
    "name": "nic1",
    "accessConfigs": [
      {
        "kind": "compute#accessConfig",
        "type": "ONE_TO_ONE_NAT",
        "name": "External NAT",
        "networkTier": "PREMIUM"
      }
    ],
    "ipv6AccessConfigs": [
      {
        "kind": "compute#accessConfig",
        "type": "DIRECT_IPV6",
        "name": "external-ipv6",
        "externalIpv6": "2600:1900:4000:8447:0:0:0:0",
        "externalIpv6PrefixLength": 96,
        "publicPtrDomainName": "",
        "networkTier": "PREMIUM"
      }
    ],
    "fingerprint": "rx6hfNA94f4=",
    "stackType": "IPV4_IPV6",
    "ipv6AccessType": "EXTERNAL",
    "nicType": "GVNIC"
  }
  ]
}

ネットワーク内のすべてのコンピューティング インスタンスを表示する

特定のネットワーク内のすべてのコンピューティング インスタンスを表示するには、次のいずれかの方法を使用します。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 省略可: [フィルタ] ボックスを使用して、表示されるネットワークの数を制限します。

  3. コンピューティング インスタンスを一覧表示するネットワークの名前をクリックします。

  4. [インスタンス] タブを選択して、そのネットワーク内のインスタンスを表示します。

gcloud

特定のネットワークを使用するコンピューティング インスタンスを表示するには、gcloud compute instances list コマンドを使用します。

--filter フラグを使用すると、特定のネットワークを使用するインスタンスのみを一覧表示できます。--format フラグを使用して結果を制限してフォーマットすることもできます。次に例を示します。

gcloud compute instances list \
    --filter 'networkInterfaces[].network:NETWORK_NAME' \
    --format="table(name:sort=1,machineType.basename(),zone.basename(),networkInterfaces[].subnetwork)"

出力は次のようになります。

NAME: c2-tier1-multinic
MACHINE_TYPE: c2-standard-30
ZONE: us-central1-c
SUBNETWORK: ['https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default', 'https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/webapps-external-subnet']
NAME: c3-with-lssd MACHINE_TYPE: c3-standard-4-lssd ZONE: us-central1-a SUBNETWORK: ['https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default']
NAME: example-instance3 MACHINE_TYPE: n2-custom-2-163840-ext ZONE: us-central1-b SUBNETWORK: ['https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default']
NAME: n4-test-windows MACHINE_TYPE: n4-standard-2 ZONE: us-central1-c SUBNETWORK: ['https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/subnetworks/default']

Tier_1 ネットワーキングが有効かどうかを判断する

インスタンスで VM ごとの Tier_1 ネットワーキング パフォーマンスが有効になっているかどうかを確認するには、次のいずれかの方法を使用します。

コンソール

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 省略可: [フィルタ] ボックスを使用して、表示されるインスタンス数を制限します。

  3. 検査するインスタンスの名前をクリックします。

  4. [ネットワーキング] セクションで、[下り(外向き)帯域幅の合計階層] の値を確認します。

    • TIER_1: Tier_1 ネットワーキングが有効になっています。
    • -: Tier_1 ネットワーキングは有効になっていません。

gcloud

インスタンスの networkPerformanceConfig 設定を表示するには、gcloud compute instances describe コマンドを使用します。コマンドに --format オプションを追加すると、返される情報を特定のフィールドに制限し、表示方法を変更できます。次に例を示します。

gcloud compute instances describe INSTANCE_NAME \
    --zone=ZONE \
    --format="text(name, networkPerformanceConfig)"

インスタンスに Tier_1 ネットワーキングが構成されていない場合、networkPerformanceConfig フィールドは出力に含まれません。インスタンスで Tier_1 ネットワーキングが有効になっている場合、出力は次のようになります。

name:                                              c2-tier1-multinic
networkPerformanceConfig.totalEgressBandwidthTier: TIER_1

REST

instances.get メソッドに対して GET リクエストを作成します。 $fields クエリ パラメータをリクエストに追加すると、出力を namenetworkPerformanceConfignicType フィールドのみに制限できます。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_NAME/zones/ZONE/instances/INSTANCE_NAME?$fields=name,networkPerformanceConfig,networkInterfaces.nicType

次のように置き換えます。

  • PROJECT_NAME: インスタンスを含むプロジェクトの名前。
  • ZONE: クエリを実行するインスタンスのゾーン。
  • INSTANCE_NAME: 返されるインスタンス リソースの名前。

インスタンスに Tier_1 ネットワーキングが構成されていない場合、networkPerformanceConfig フィールドは出力に含まれません。インスタンスで Tier_1 ネットワーキングが有効になっている場合、出力は次のようになります。

{
  "name": "c2-tier1-multinic",
  "networkInterfaces": [
    {
      "nicType": "GVNIC"
    },
    {
      "nicType": "GVNIC"
    }
  ],
  "networkPerformanceConfig": {
    "totalEgressBandwidthTier": "TIER_1"
  }
}