複数のネットワーク インターフェースを持つ VM を作成する
このページでは、複数のネットワーク インターフェースを持つ VM インスタンスを作成する方法について説明します。
始める前に、複数のネットワーク インターフェースの概要で説明されている、複数のネットワーク インターフェースを持つインスタンスの特性についてよく理解しておいてください。
IAM ロール
複数のネットワーク インターフェースを持つインスタンスを作成するには、次のいずれかのロールが必要です。
- プロジェクト オーナーまたはプロジェクト編集者のロール
- Compute インスタンス管理者(v1)のロール(
roles/compute.instanceAdmin.v1
)
共有 VPC 環境を使用していないプロジェクトで複数のインターフェースを持つインスタンスとインスタンス テンプレートを作成、削除する: オーナー、編集者、または Compute インスタンス管理者(v1)のロールを持つユーザーは、同じプロジェクトに属する VPC ネットワークとサブネットに関連付けられた複数のインターフェースを持つインスタンスを作成できます。
共有 VPC 環境での複数のネットワーク インターフェースを持つインスタンスおよびインスタンス テンプレートの作成と削除:オーナー、編集者、または Compute インスタンス管理者(v1)のロールを持つユーザーは、複数のインターフェースを持つインスタンスを作成できます。いずれかのインターフェースが共有 VPC ホスト プロジェクトのサブネットに接続されている場合は、ホスト プロジェクト全体または使用するサブネットに対して Compute ネットワーク ユーザーのロール(roles/compute.networkUser
)も必要になります。
権限の詳細については、Compute Engine IAM ドキュメントをご覧ください。
複数のネットワーク インターフェースを持つ VM インスタンスを作成する
このセクションでは、vNIC や動的 NIC など、複数のネットワーク インターフェースを持つインスタンスを作成する方法について説明します。インスタンスの作成に関する一般的な手順については、VM インスタンスを作成して起動するをご覧ください。
最初のインターフェースは、常に nic0
として作成されます。また、これが常にデフォルトのインターフェースになります。
コンソール
Google Cloud コンソールで [インスタンスの作成] ページに移動します。
[名前] フィールドに、インスタンスの名前を入力します。
[リージョン] フィールドでリージョンを選択します。
[ゾーン] フィールドでゾーンを選択します。
[詳細オプション] セクションで、[ネットワーキング] を開いて次の操作を行います。
[ネットワーク インターフェース] セクションで、ネットワーク インターフェースを開いて編集します。
[ネットワーク] と [サブネットワーク] で、使用するネットワークとサブネットワークを選択します。
インターフェースに IPv6 アドレスを構成する場合は、IPv6 アドレス範囲が構成されているサブネットを選択します。サブネットの IPv6 アクセスタイプによって、インスタンスが内部 IPv6 アドレスを受け取るのか、外部 IPv6 アドレスを受け取るのかが決まります。
インターフェースの IP スタックタイプに次のいずれかのオプションを選択します。
- IPv4(シングルスタック)
- IPv4 と IPv6(デュアルスタック)
- IPv6(シングルスタック)(プレビュー)
IPv4 アドレスのインターフェースの場合は、次の操作を行います。
[プライマリ内部 IPv4 アドレス] で次のいずれかを選択します。
- エフェメラル(自動): 新しいエフェメラル IPv4 アドレスを自動的に割り当てます。
- エフェメラル(カスタム): 新しいエフェメラル IPv4 アドレスを手動で指定します。
- リストから予約された静的内部 IPv4 アドレス。
- 静的内部 IPv4 アドレスを予約: 新しい静的内部 IPv4 アドレスを予約して割り当てます。
[外部 IPv4 アドレス] で、次のいずれかを選択します。
- エフェメラル: 新しいエフェメラル IPv4 アドレスを割り当てます。
- なし: 外部 IPv4 アドレスを割り振りません。
- リストから予約された静的 IPv4 アドレス。
- 静的外部 IP アドレスを予約: 新しい静的外部 IPv4 アドレスを予約して割り当てます。
IPv6 アドレスのインターフェースの場合は、接続されたサブネットのアクセスタイプに応じて、次の操作を行います。
- [プライマリ内部 IPv6 アドレス] で次のいずれかを選択します。
- エフェメラル(自動): 新しいエフェメラル内部 IPv6 アドレスを自動的に割り当てます。
- エフェメラル(カスタム): 新しいエフェメラル内部 IPv6 アドレスを手動で指定します。
- リストから予約された静的内部 IPv6 アドレス。
- 静的内部 IPv6 アドレスを予約: 新しい静的内部 IPv6 アドレスを予約して割り当てます。
- [外部 IPv6 アドレス] で、次のいずれかを選択します。
- 自動割り当て: 新しいエフェメラル外部 IPv6 アドレスを自動的に割り当てます。
- リストから予約された静的外部 IPv6 アドレス。
- 静的外部 IPv6 アドレスを予約: 新しい静的外部 IPv6 アドレスを予約して割り当てます。
- [プライマリ内部 IPv6 アドレス] で次のいずれかを選択します。
ネットワーク インターフェースの変更を終了するには、[完了] をクリックします。
別のインターフェースを追加するには、[ネットワーク インターフェースを追加] をクリックします。
インスタンス作成処理を続けます。
[作成] をクリックします。
gcloud
新しいインスタンスにネットワーク インターフェースを作成するには、gcloud compute instances create
コマンドを使用します。
インターフェースごとに --network-interface
フラグを指定し、さらに network
、subnet
、private-network-ip
、address
、external-ipv6-address
、vlan
などの適切なネットワーキング キーを指定します。
vlan
キーを含めると、動的 NIC が作成されます。ダイナミック NIC を作成する場合は、インスタンスの作成後にダイナミック NIC のゲスト OS を構成する手順も行う必要があります。
複数のインターフェースを持つインスタンスの作成方法の例については、構成例をご覧ください。
このスニペットは、インスタンス作成時に指定できる多くのパラメータの 1 つである --network-interface
フラグについて示すことのみを目的としたものです。
gcloud compute instances create INSTANCE_NAME \ --zone ZONE \ --network-interface \ network=NETWORK_A,subnet=SUBNET_A, \ stack-type=STACK_TYPE, \ private-network-ip=INTERNAL_IPV4_ADDRESS, \ address=EXTERNAL_IPV4_ADDRESS | no-address, \ internal-ipv6-address=INTERNAL_IPV6_ADDRESS \ ... --network-interface \ network=NETWORK_B,subnet=SUBNET_B, \ stack-type=STACK_TYPE, \ external-ipv6-address=EXTERNAL_IPV6_ADDRESS, \ external-ipv6-prefix-length=96, \ ipv6-network-tier=PREMIUM, \ vlan=VLAN_ID \ ...
次のように置き換えます。
INSTANCE_NAME
: 作成するインスタンスの名前。ZONE
: インスタンスが作成されるゾーン。NETWORK_A
、NETWORK_B
: インターフェースが接続するネットワーク。SUBNET_A
、SUBNET_B
: インターフェースが接続するサブネット。STACK_TYPE
: インターフェースのスタックタイプ。デフォルト値は
IPV4_ONLY
です。デュアルスタック インターフェースを構成するにはIPV4_IPV6
を指定します。IPv6 専用インターフェースを構成するにはIPV6_ONLY
を指定します(プレビュー)。IPv4 アドレスを持つインターフェースの値:
INTERNAL_IPV4_ADDRESS
: ターゲット サブネット内のインターフェースに必要な内部 IPv4 アドレス。割り当て済みの有効なアドレスのみを使用する場合は、省略します。EXTERNAL_IPV4_ADDRESS
: インターフェースの外部 IPv4 アドレス。外部 IPv4 アドレスは予約済みである必要があります。インターフェースに外部 IP アドレスを使用しない場合は、
address=EXTERNAL_IPV4_ADDRESS
の代わりに「no-address」を指定します。インターフェースでエフェメラル外部 IP アドレスを受信する場合は、address=''
を指定します。
IPv6 アドレスのインターフェースの値:
INTERNAL_IPV6_ADDRESS
: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。EXTERNAL_IPV6_ADDRESS
: ターゲット サブネット内のインターフェースに必要な外部 IPv6 アドレス。指定しない場合、Google Cloud はサブネットから外部 IPv6 アドレスを自動的に割り当てます。
VLAN_ID
: VLAN ID。VLAN ID を指定すると、ネットワーク インターフェースが Dynamic NIC として構成されます。コマンドでは、親 vNIC の後に Dynamic NIC を配置する必要があります。
API
instances.insert
メソッドを使用して、複数のネットワーク インターフェースを持つインスタンスを作成します。
vlan
フィールドを含めると、動的 NIC が作成されます。ダイナミック NIC を作成する場合は、インスタンスの作成後にダイナミック NIC のゲスト OS を構成する手順も行う必要があります。
次の例をご覧ください。
内部 IPv4 アドレスのみを持つインスタンスを作成するには、次の操作を行います。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { .... "networkInterfaces": [ { "networkIP": "IPV4_ADDRESS_A", "subnetwork": "regions/REGION/subnetworks/SUBNET_A" }, { "networkIP": "IPV4_ADDRESS_B", "subnetwork": "regions/REGION/subnetworks/SUBNET_B" "vlan": "VLAN_ID" }, for each interface, specify a network... ], other instance settings... }
次のように置き換えます。
PROJECT_ID
: インスタンスが含まれているプロジェクトの ID。ZONE
: インスタンスを含むゾーン。IPV4_ADDRESS_A
、IPV4_ADDRESS_B
: 各ネットワーク インターフェースに割り当てる内部 IPv4 アドレス。REGION
: インスタンスが含まれるリージョン。SUBNET_A, SUBNET_B
: 各ネットワーク インターフェースが配置されているサブネット。VLAN_ID
: VLAN ID。VLAN ID を指定すると、ネットワーク インターフェースが Dynamic NIC として構成されます。Dynamic NIC は、親 vNIC の後に配置する必要があります。
内部 IPv4 アドレスと内部 IPv6 アドレスの両方を持つインスタンスを作成するには、次の操作を行います。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { .... "networkInterfaces": [ { "subnetwork": "regions/REGION/subnetworks/SUBNET_A" "ipv6Address": "IPV6_ADDRESS_A", "internalIpv6PrefixLength": 96, "stackType": IPV4_IPV6, "ipv6AccessType": INTERNAL }, { "subnetwork": "regions/REGION/subnetworks/SUBNET_B" "ipv6Address": "IPV6_ADDRESS_B", "internalIpv6PrefixLength": 96, "stackType": IPV4_IPV6, "ipv6AccessType": INTERNAL "vlan": "VLAN_ID" }, for each interface, specify a network... ], other instance settings... }
次のように置き換えます。
PROJECT_ID
: インスタンスが含まれているプロジェクトの ID。ZONE
: インスタンスを含むゾーン。REGION
: インスタンスが含まれるリージョン。SUBNET_A, SUBNET_B
: 各ネットワーク インターフェースが配置されているサブネット。IPV6_ADDRESS_A, IPV6_ADDRESS_B
: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。VLAN_ID
: VLAN ID。VLAN ID を指定すると、ネットワーク インターフェースが Dynamic NIC として構成されます。Dynamic NIC は、親 vNIC の後に配置する必要があります。
内部 IPv6 アドレスのみを持つインスタンス(プレビュー)を作成するには、次の操作を行います。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { .... "networkInterfaces": [ { "subnetwork": "regions/REGION/subnetworks/SUBNET" "ipv6Address": "IPV6_ADDRESS", "internalIpv6PrefixLength": 96, "stackType": IPV6_ONLY, "ipv6AccessType": INTERNAL }, for each interface, specify a network... ], other instance settings... }
次のように置き換えます。
PROJECT_ID
: インスタンスが含まれているプロジェクトの ID。ZONE
: インスタンスを含むゾーン。REGION
: インスタンスが含まれるリージョン。SUBNET
: ネットワーク インターフェースが配置されているサブネット。IPV6_ADDRESS
: ターゲット サブネット内のインターフェースに必要な内部 IPv6 アドレス。指定しない場合、Google Cloud はサブネットから内部 IPv6 アドレスを自動的に割り当てます。
Terraform
Terraform リソースを使用すると、複数のネットワーク インターフェースを持つインスタンスを作成できます。
Terraform 引数の例の値は変更できます。
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。
構成例
以降のセクションでは、複数のインターフェースを持つインスタンスを作成する方法について説明します。
複数の vNIC と動的 NIC を構成する
次のサンプル コマンドは、次のネットワーク インターフェースを持つインスタンスを作成します。nic0
という名前の vNIC。次の親です。nic0.2
という名前の Dynamic NIC
nic1
という名前の vNIC。次の親です。nic1.4
という名前の Dynamic NICnic1.5
という名前の Dynamic NIC
gcloud beta compute instances create vm1 \ --zone zone-a \ --network-interface=network=network-a,subnet=subnet-a \ --network-interface=network=network-b,subnet=subnet-b,vlan=2 \ --network-interface=network=network-c,subnet=subnet-c \ --network-interface=network=network-d,subnet=subnet-d,vlan=4 \ --network-interface=network=network-e,subnet=subnet-e,vlan=5
ダイナミック NIC を使用してインスタンスを作成したら、ダイナミック NIC 用にゲスト OS を構成する必要があります。
IPv4 アドレスのみを持つ複数のネットワーク インターフェースを構成する
次のサンプル コマンドは、3 つのネットワーク インターフェースを持つインスタンスを作成します。
gcloud compute instances create vm1 --machine-type=n1-standard-4 \ --network-interface '' \ --network-interface network=net1,subnet=subnet-a,private-network-ip=10.10.10.2,address=EXTERNAL_IPV4_ADDRESS \ --network-interface network=net2,subnet=subnet-b,private-network-ip=10.10.20.2,no-address
インターフェースは次のように作成されます。
nic0
はデフォルト設定で作成されます。インターフェースは、デフォルトの VPC ネットワークのサブネットに接続し、内部 IP アドレスとエフェメラル外部 IP アドレスが自動的に割り振られます。nic1
は、ネットワークnet1
のサブネットsubnet-a
に接続されます。内部 IPv4 アドレスは10.10.10.2
であり、静的外部 IPv4 アドレスはEXTERNAL_IPV4_ADDRESS
です。nic2
は、ネットワークnet2
のサブネットsubnet-b
に接続されます。内部 IPv4 アドレスは10.10.20.2
であり、外部 IP アドレスはありません。
gcloud compute instances create
コマンドと --network-interface
フラグの詳細については、コマンドのドキュメントをご覧ください。
追加したネットワーク インターフェースの IP アドレスを使用して、DNS 転送を設定できます。Cloud DNS 転送ゾーンの構成の詳細については、転送ゾーンをご覧ください。
IPv4 アドレスと IPv6 アドレスの両方を持つ複数のネットワーク インターフェースを構成する
次のサンプル コマンドは、2 つのネットワーク インターフェースを持つデュアル スタック インスタンスを作成します。
gcloud compute instances create vm1 \ --network-interface network=dual-int,subnet=int-subnet,stack-type=IPV4_IPV6 \ --network-interface network=dual-ext,subnet=ext-subnet,stack-type=IPV4_IPV6,ipv6-network-tier=PREMIUM \ --machine-type=n1-standard-4 --zone=ZONE_A
インターフェースは次のように作成されます。
nic0
は、ネットワークdual-int
のサブネットint-subnet
に接続され、エフェメラル内部 IPv4 アドレスとエフェメラル内部 IPv6 アドレスが割り振られます。nic1
は、ネットワークdual-ext
のサブネットext-subnet
に接続され、エフェメラル内部 IPv4 アドレスとエフェメラル外部 IPv6 アドレスが割り振られます。
IPv6 アドレスのみを持つ複数のネットワーク インターフェースを構成する
次のサンプル コマンドは、3 つのネットワーク インターフェースを持つ IPv6 専用インスタンス(プレビュー)を作成します。
gcloud compute instances create vm1 \ --network-interface network=ipv6-only-int-a,subnet=int-subnet-a,stack-type=IPV6_ONLY \ --network-interface network=ipv6-only-int-b,subnet=int-subnet-b,stack-type=IPV6_ONLY,internal-ipv6-address=fd20:db8:0:0:1:0:: \ --network-interface network=ipv6-only-ext,subnet=ext-subnet,stack-type=IPV6_ONLY,ipv6-network-tier=PREMIUM,external-ipv6-address=EXTERNAL_IPV6_ADDRESS \ --machine-type=n1-standard-4 --zone=us-west2-a
インターフェースは次のように作成されます。
nic0
は、ネットワークipv6-only-int-a
のサブネットint-subnet-a
に接続され、自動的に割り振られるエフェメラル内部 IPv6 アドレスが割り振られます。nic1
は、ネットワークipv6-only-int-b
のサブネットint-subnet-b
に接続され、カスタム エフェメラル内部 IPv6 アドレスfd20:db8:0:0:1:0::/96
が割り振られます。nic2
は、ネットワークipv6-only-ext
のサブネットext-subnet
に接続され、静的外部 IPv6 アドレスEXTERNAL_IPV6_ADDRESS
が割り当てられます。
インスタンス グループに複数のネットワーク インターフェースを構成する
非マネージド インスタンス グループとマネージド インスタンス グループでは、複数のネットワーク インターフェースを持つインスタンスを使用できます。
非マネージド インスタンス グループの場合は、各インスタンスを個別に作成します。各インスタンスの nic0
ネットワーク インターフェースが同じサブネットに接続するようにします。次に、インスタンスを非マネージド インスタンス グループに追加します。
マネージド インスタンス グループに複数のネットワーク インターフェースを構成するには、各インターフェースに --network-interface
フラグを 1 回設定して、インスタンス テンプレートでインターフェースごとにネットワーク構成を指定する必要があります。次の例では、3 つのネットワーク インターフェースを持つインスタンス テンプレートを作成します。
gcloud compute instance-templates create template-1 \ --network-interface subnet=net0-subnet-a \ --network-interface subnet=net1-subnet-b,no-address \ --network-interface subnet=net2-subnet-c,no-address \ --region REGION_A
プロジェクトの各リージョンのサブネット名は一意である必要があるため、名前でサブネットを指定すると、各インターフェースが暗黙的に VPC ネットワークに関連付けられます。各インターフェースでは、一意の VPC ネットワーク内のサブネットを使用する必要があります。
nic0
はnet0-subnet-a
サブネットを使用します。nic1
はnet1-subnet-b
サブネットを使用します。nic2
はnet2-subnet-c
サブネットを使用します。
--network-interface
フラグの no-address
オプションは、外部 IPv4 アドレスなしでインターフェースが構成されていることを示します。内部 IP アドレスは、インターフェースで使用されるサブネットから取得されます。フラグと構文の詳細については、instance-templates create
コマンドの --network-interface
フラグをご覧ください。