仮想クラウド・ネットワークの作成
Terraformを使用して、Oracle Cloud Infrastructureテナンシに仮想クラウド・ネットワーク(VCN)を作成します。
主なタスクは:
- 基本的なVCNを設定します。
- 次のリソースを定義してネットワークに追加します:
- セキュリティ・リスト
- プライベート・サブネットおよびパブリック・サブネット

詳細は、次を参照してください:
開始前
このチュートリアルを正常に実行するには、次が必要です:
- 有料Oracle Cloud Infrastructureアカウント。無料Oracle Cloudプロモーションのリクエストおよび管理を参照してください。
- MacOS、LinuxまたはWindowsコンピュータ。
- Terraformチュートリアル・リソース:
- 次のすべてのステップを実行します:
- 作成したスクリプトを次のディレクトリに保持します:
$HOME/tf-provider/
$HOME/tf-compartment/
- コンパートメントの作成チュートリアルのコンパートメントをテナントに保持します。
1. 準備
VCNを作成するための環境を準備します。また、チュートリアルを完了するために必要なすべての情報を収集します。
次の情報をメモ帳にコピーします。
この情報を収集する手順については、次の表を参照してください。
項目 | アイテムを収集するステップ |
---|---|
コンパートメント名 | 完成したチュートリアルコンパートメントの作成を参照してください。 |
コンパートメントID |
|
リージョン |
|
ユーザー名がAdministrators
グループ内にある場合は、この項をスキップしてください。それ以外の場合は、テナンシに次のポリシーを追加するよう管理者に依頼してください:
allow group <a-group-your-username-belongs-to> to manage all-resources in compartment <your-compartment-name>
この権限を使用すると、コンパートメント内のすべてのリソースを管理でき、そのコンパートメントでの管理権限が付与されます。
- コンソールで、ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」にある「ポリシー」を選択します。
- コンパートメントを選択します。
- 「ポリシーの作成」を選択します。
- 「ポリシーの作成」ページで、次の値を入力します:
- 名前:
manage-<your-compartment-name>-resources
- 説明:
Allow users to list, create, update, and delete resources in <your-compartment-name>.
- コンパートメント:
<your-tenancy>(root)
- 名前:
- 「ポリシー・ビルダー」に、次の値を入力します:
- ポリシー・ユース・ケース:
コンパートメント管理
- 共通ポリシー・テンプレート:
コンパートメント管理者がコンパートメントを管理できるようにします
- アイデンティティ・ドメイン: <identity-domain>
- グループ:
<a-group-your-username-belongs-to>
- 場所:
<your-compartment-name>
- ポリシー・ユース・ケース:
- 「作成」を選択します。
参照: 共通ポリシー
2. 基本的なネットワークの作成
認証、モジュールで定義された基本的な仮想クラウド・ネットワーク(VCN)および出力用のスクリプトを作成します。
最初に、Terraformスクリプトのディレクトリを設定します。次に、OCI Terraformの設定チュートリアルからプロバイダおよびバージョンのスクリプトをコピーして、Oracle Cloud Infrastructureアカウントがこのディレクトリから実行されているスクリプトを認証できるようにします。
Terraformレジストリに記載されているOracle Cloud Infrastructure仮想クラウド・ネットワーク(VCN)モジュールを使用して、基本的なネットワークを宣言します。次に、スクリプトを実行してネットワークを作成します。次の項では、ネットワークをカスタマイズするためのコンポーネントを追加します。
VCNを作成するためのコンソール・ワークフローからスタックを保存できます。スタックには、VCN構成の参照として使用できるTerraform構成が含まれています。リソース作成ページからのスタックの作成およびスタックのTerraform構成の取得を参照してください。
モジュールについて
モジュールは、一緒に使用される複数のリソースのコンテナです。インフラ・リソースを1つずつ宣言するかわりに、Oracle Cloud Infrastructureが提供するモジュールから開始します。たとえば、基本的なVCNモジュールから始めます。次に、モジュールに含まれていないリソースをスクリプトに追加します。
モジュール・ブロックの宣言
- キーワード
module
を使用してブロックを開始します - モジュールの指定された名前のラベルを追加します:
- 例:
"vcn"
- 例:
- コード・ブロック内部:
- モジュール・ドキュメント「プロビジョニング手順」の項から、
source
およびversion
情報を追加します。 - 必要な入力の値を指定します。デフォルト値はありません。次に例を示します:
# Required Inputs compartment_id = "<compartment-ocid>"
- オーバーライドするオプションの入力の値を指定します。それ以外の場合は、デフォルト値が使用されます。次に例を示します:
# Optional Inputs region = "<region-identifier>" # Changing the following default values vcn_name = "tutorial-vcn" create_internet_gateway = true create_nat_gateway = true create_service_gateway = true
- オプションの入力をコメント・アウトし、そのデフォルト値を表示できるため、後でコードを確認するときに、予期されていた値がわかります。次に例を示します:
# Using the following default values # vcn_dns_label = "vcnmodule" # vcn_cidrs = ["10.0.0.0/16"]
- モジュール・ドキュメント「プロビジョニング手順」の項から、
出力ブロックをコードに追加して、スクリプトの実行後に仮想クラウド・ネットワークに関する情報を取得します。
モジュール出力について
モジュール出力は、そのモジュールに対して返すことができる属性です。
VCNモジュールの出力の検索
vcnページに移動し、「出力」を選択して、VCNモジュールの出力可能な属性のリストを表示します。属性の説明を確認します:
- ig_route_id
- インターネット・ゲートウェイを含むルート表のOCID
- nat_gateway_id
- NATゲートウェイのOCID
- nat_route_id
- NATゲートウェイを含むルート表のOCID
- vcn_id
- VCNのOCID
モジュール出力ブロックの宣言
-
- キーワード
output
を使用してブロックを起動します。 - 出力結果とともに印刷するラベルを追加します:
- ラベルには、文字、数字、アンダースコア(
_
)およびハイフン(-
)を含めることができます。最初の文字は数字にできません。 - 例:
"vcn_id"
- ラベルには、文字、数字、アンダースコア(
- Oracle Terraformモジュールのモジュールの出力から属性を取得します。
- コード・ブロック内で、次の式を使用してモジュール出力の値を入力します:
value = module.<module-name>.<output-attribute>
- 例:
value = module.vcn.vcn_id
- (オプション): コード・ブロック内に説明文字列を追加します。次に例を示します:
description = "OCID of the internet-route table. This route table has an internet gateway to be used for public subnets"
ノート
説明文字列は出力に印刷されないため、ラベルに出力される内容が記述されていることを確認してください。 - 出力ごとに出力ブロックを作成します。
- キーワード
完了!Terraformを使用して、Oracle Cloud Infrastructureアカウントに基本的な仮想ネットワークが正常に作成されました。仮想ネットワークがあるため、この時点で実行できます。次の項では、モジュールから作成されたネットワークをカスタマイズする方法について説明します。
3. ネットワークのカスタマイズ
セキュリティ・リスト、プライベート・サブネットおよびパブリック・サブネットのスクリプトを作成して、コンソール作成ワークフローと同じ仮想ネットワークを作成します。
引数リファレンス(oci_core_security_list)で、必要なすべての引数(第1レベルの箇条書き)を検索します。
- compartment_id
- vcn_id
引数参照(oci_core_security_list)にナビゲートするには:
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左上の「フィルタ」ボックスに、
security list
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、oci_core_security_listを選択します。
- 「引数参照」を選択します。
「引数参照」が開きます。
セキュリティ・リストを次のように宣言します。
- compartment_idの場合: 次を使用します
compartment_id = "<compartment-ocid>"
- vcn_idの場合、基本的な仮想ネットワークのOCIDを使用します。OCIDを認識する前にOCIDを割り当てるには、セキュリティ・リスト・リソースの入力としてモジュールからの出力を割り当てます:
- モジュールの「出力」ページからモジュールの出力属性を取得します。
- 次の式を使用して、リソース引数に値を割り当てます:
<resource argument> = module.<module-name>.<output-attribute>
- 例:
vcn_id = module.vcn.vcn_id
oci_core_security_list resource
とoracle-terraform-modules/vcn
の両方で、仮想クラウド・ネットワークOCIDvcn_id
に同じ引数名を使用します。- 左端の
vcn_id
は、リソースの引数(必須入力)です。 - 右端の
vcn_id
は、モジュールで作成するVCNのOCIDです。 - VCNモジュール・スクリプトを実行してVCNを作成したかどうかは関係ありません。いずれの場合も、VCNモジュールの作成後にVCN OCIDがTerraformによってセキュリティ・リストに割り当てられます。
- ステートレス:いいえ
- 宛先: 0.0.0.0/0
- IPプロトコル:すべてのプロトコル
表の「許可」フィールドは、他のフィールドに基づいて自動的に生成されます。スクリプトに、それの引数を追加することはありません。
private-security-list.tf
の場合は、引数リファレンス(oci_core_security_list)に移動し、次の引数を見つけます。
- egress_security_rules
- ステートレス
- 宛先
- destination_type
- プロトコル
引数参照(oci_core_security_list)にナビゲートするには:
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左上の「フィルタ」ボックスに、
security list
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、oci_core_security_listを選択します。
- 「引数参照」を選択します。
「引数参照」が開きます。
等号(=
)を使用して、ブロック内の引数にのみ値を割り当てます。
- 書込み:
egress_security_rules { <arguments with assigned values> }
- 次のように記述しないでください:
egress_security_rules = { <arguments with assigned values> }
outputs.tf
で出力として使用する属性の場合、「属性参照」を選択して「属性参照」(oci_core_security_list)を開き、次の属性を検索します。
- display_name
- id
完了!エグレス・ルールを含むセキュリティ・リストが仮想クラウド・ネットワークに正常に作成されました。次の項では、このセキュリティ・リストにイングレス・ルールを追加します。
この項では、前の項で作成したセキュリティ・リストに次のイングレス・ルールを追加します。
イングレス・ルール
- ルール1:
- ステートレス:いいえ
- ソース: 10.0.0.0/16
- IPプロトコル: TCP
- ソース・ポート範囲: すべて
- 宛先ポート範囲: 22
- ルール2:
- ステートレス:いいえ
- ソース: 0.0.0.0/0
- IPプロトコル: ICMP
- タイプとコード: 3、4
- ルール3:
- ステートレス:いいえ
- ソース: 10.0.0.0/16
- IPプロトコル: ICMP
- タイプとコード:
表の「許可」フィールドは、他のフィールドに基づいて自動的に生成されます。スクリプトに、それの引数を追加することはありません。
完了!セキュリティ・リストに3つのイングレス・ルールが正常に追加されました。このセキュリティ・リストは、プライベート・サブネットに使用します。次の項では、パブリック・サブネットの別のセキュリティ・リストを作成します。
引数参照(oci_core_security_list)で、次の引数を見つけます。
- ingress_security_rules
- ステートレス
- ソース
- source_type
- プロトコル
- icmp_options
- タイプ
- プログラムを作る
- tcp_options
- 最小
- 最大
引数参照(oci_core_security_list)にナビゲートするには:
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左上の「フィルタ」ボックスに、
security list
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、oci_core_security_listを選択します。
- 「引数参照」を選択します。
「引数参照」が開きます。
- protocolについては、Protocol Numbersを参照してください。
- TCP: 6
- ICMP: 1
- icmp_optionsについては、Internet Control Message Protocol (ICMP) Parametersを参照してください。
- tcp_optionsの場合、「宛先範囲: 22」などのポート範囲がない場合、最大値と最小値を同じ数値に設定します。次に例を示します:
- 最小= 22
- 最大= 22
完了!別のセキュリティ・リストが仮想クラウド・ネットワークに正常に作成されました。
この項では、ネットワークにプライベート・サブネットを作成し、このサブネットにプライベート・セキュリティ・リストを関連付けます。また、VCNモジュールで作成したNATルート表をこのサブネットに追加します。NATルート表には、1つのNATゲートウェイと1つのサービス・ゲートウェイがあり、プライベート・サブネット用に設計されています。チュートリアルの最初のダイアグラムを参照してください。
完了!プライベート・サブネットが仮想クラウド・ネットワークに正常に作成されました。
引数参照(oci_core_subnet)で、必要なすべての引数を検索します。
- compartment_id
- vcn_id
- cidr_block
引数参照(oci_core_subnet)にナビゲートするには:
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左上の「フィルタ」ボックスに、
subnet
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、oci_core_subnetを選択します。
- 「引数参照」を選択します。
「引数参照」が開きます。
- 次のオプションの引数をオーバーライドします:
- route_table_id
- security_list_ids
- display_name
- 次の引数に値を割り当てます:
- cidr_block
- チュートリアルの最初のダイアグラムを参照してください。
- route_table_id
- ルート表のOCID。
- このルート表のゲートウェイを確認するには、チュートリアルの最初のダイアグラムのプライベート・サブネットを参照します:
- NATゲートウェイ
- サービス・ゲートウェイ
- VCNモジュールで作成したNATゲートウェイにルート表を割り当てます。このルート表には、サービス・ゲートウェイも含まれます。ノート
module.vcn.nat_route_id
を使用します。module.vcn.nat_gateway_id
は、ルート表ではなくゲートウェイのOCIDを返すため、使用しないでください。
- (オプション): コンソールで、ルート表のルールを確認し、「ターゲット・タイプ」の値をチュートリアルのダイアグラム(サービス・ゲートウェイ、NAT Gateway)と比較します。
- VCNの詳細ページで、「ルーティング」または「ルート表」(表示内容に応じて)を選択します。
- 「nat-route」を選択します。
- 「ルート・ルール」を選択します。
- security_list_ids
- 文字列のリストを返します。各文字列はセキュリティ・リストのOCIDです。
- プライベート・セキュリティ・リストのOCIDを取得します。
- この引数には大カッコを使用します。次に例を示します:
security_list_ids = ["sec-list-1","sec-list-2","sec-list-3"]
- 1つのセキュリティ・リストを割り当てるには、カンマなしで大カッコ内に配置します。
- 別のリソースで作成されたセキュリティ・リストを参照するには、そのローカル名を使用します。次に例を示します:
security_list_ids = [oci_core_security_list.<local-name>.id] security_list_ids = [oci_core_security_list.private-security-list.id]
- cidr_block
この項では、ネットワークにパブリック・サブネットを作成し、このサブネットにパブリック・セキュリティ・リストを関連付けます。また、VCNモジュールで作成したインターネット・ルート表をこのサブネットに追加します。インターネット・ルート表にはインターネット・ゲートウェイがあり、パブリック・サブネット用に設計されています。チュートリアルの最初のダイアグラムを参照してください。
完了!パブリック・サブネットが仮想クラウド・ネットワークに正常に作成されました。
引数参照(oci_core_subnet)で、必要なすべての引数を検索します。
- compartment_id
- vcn_id
- cidr_block
引数参照(oci_core_subnet)にナビゲートするには:
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左上の「フィルタ」ボックスに、
subnet
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、oci_core_subnetを選択します。
- 「引数参照」を選択します。
「引数参照」が開きます。
- 次のオプションの引数をオーバーライドします:
- route_table_id
- security_list_ids
- display_name
- 次の引数に値を割り当てます:
- cidr_block
- チュートリアルの最初のダイアグラムを参照してください。
- route_table_id
- ルート表のOCID。
- このルート表のゲートウェイを確認するには、チュートリアルの最初のダイアグラムのパブリック・サブネットを参照してください:
- インターネット・ゲートウェイ
- VCNモジュールで作成したインターネット・ゲートウェイにルート表を割り当てます。ノート
- module.vcn.ig_route_idを使用します。
- (オプション): コンソールで、ルート表のルールを確認し、「ターゲット・タイプ」の値をチュートリアルのダイアグラム(インターネット・ゲートウェイ)と比較します。
- VCNの詳細ページで、「ルーティング」または「ルート表」(表示内容に応じて)を選択します。
- 「internet-route」を選択します。
- 「ルート・ルール」を選択します。
- security_list_ids
- 文字列のリストを返します。各文字列はセキュリティ・リストのOCIDです。
- パブリック・セキュリティ・リストのOCIDを取得します。
- この引数には大カッコを使用します。次に例を示します:
security_list_ids = ["sec-list-1","sec-list-2","sec-list-3"]
- 1つのセキュリティ・リストを割り当てるには、カンマなしで大カッコ内に配置します。
- 別のリソースで作成されたセキュリティ・リストを参照するには、そのローカル名を使用します。次に例を示します:
security_list_ids = [oci_core_security_list.<local-name>.id] security_list_ids = [oci_core_security_list.public-security-list.id]
- cidr_block
4.VCNの再作成(オプション)
VCNを破棄します。次に、スクリプトを再実行して、別のVCNを作成します。
前の項では、作業内容を確認するために、リソースを宣言するたびにスクリプトを実行しました。ここでは、これらをまとめて実行します。スクリプトが宣言的であり、Terraformによってオブジェクトの作成順序が解決されることがわかります。
完了!Terraformを使用して、Oracle Cloud Infrastructureアカウントに仮想クラウド・ネットワークとそのコンポーネントが正常に再作成されました。
この仮想クラウド・ネットワークには、コンソールの「VCNの起動ウィザード」を使用して作成された仮想クラウド・ネットワークと同じコンポーネントがあり、「インターネット接続性を持つVCN」オプションがあります。チュートリアルのステップに従って、ネットワークを設定し、このネットワークと比較できます。
参照:
次の処理
次のTerraformチュートリアルについては、次を参照してください:
Oracle製品を使用した開発の詳細を確認するには、次のサイトを参照してください: