Terraform: 仮想クラウド・ネットワークの作成
このチュートリアルでは、Terraformを使用して、Oracle Cloud Infrastructureテナンシに仮想クラウド・ネットワークを作成します。
主なタスクは:
- 基本的な仮想クラウド・ネットワークを設定します。
- 次のリソースを定義してネットワークに追加します:
- セキュリティ・リスト
- プライベート・サブネットおよびパブリック・サブネット
その他の情報については、次のWebサイトを参照してください。
開始する前に
このチュートリアルを正常に実行するには、次が必要です:
- 有料Oracle Cloud Infrastructureアカウント。Oracle Cloud Infrastructureへのサインアップを参照してください。
- MacOS、LinuxまたはWindowsコンピュータ。
- Terraformチュートリアル・リソース:
- 次のすべてのステップを実行します:
- 作成したスクリプトを次のディレクトリに保持します:
$HOME/tf-provider/
$HOME/tf-compartment/
- コンパートメントの作成チュートリアルのコンパートメントをテナンシに保持します。
1. 準備
仮想クラウド・ネットワークを作成するための環境を準備します。また、チュートリアルを完了するために必要なすべての情報を収集します。
次の情報をメモ帳にコピーします。
ユーザー名が管理者グループ内にある場合は、この項をスキップしてください。それ以外の場合は、管理者に依頼してテナンシに次のポリシーを追加します:
allow group <the-group-your-username-belongs> to manage all-resources in compartment <your-compartment-name>
この権限を使用すると、コンパートメント内のすべてのリソースを管理でき、基本的にそのコンパートメントでの管理権限が付与されます。
- ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
- 「コンパートメント」ドロップダウンからコンパートメントを選択します。
- 「ポリシーの作成」をクリックします。
- 次の情報を入力します:
- 名前:
manage-<your-compartment-name>-resources
- 説明:
ユーザーが<your-compartment-name>のリソースをリスト、作成、更新および削除できるようにします。
- コンパートメント:
<your-tenancy>(root)
- 名前:
- 「ポリシー・ビルダー」で、次の選択肢を選択します:
- ポリシー・ユース・ケース:
コンパートメント管理
- 共通ポリシー・テンプレート:
コンパートメント管理者がコンパートメントを管理できるようにします
- グループ:
<the-group-your-username-belongs>
- 場所:
<your-tenancy>(root)
- ポリシー・ユース・ケース:
- 「作成」をクリックします。
参照: 共通ポリシー
2. 基本的なネットワークの作成
認証、モジュールで定義された基本的な仮想クラウド・ネットワーク、および出力用のスクリプトを作成します。
最初に、Terraformスクリプトのディレクトリを設定します。次に、Oracle Cloud Infrastructureアカウントがこのディレクトリから実行されるスクリプトを認証できるように、プロバイダ・スクリプトを追加します。
Terraformレジストリに記載されているOracle Cloud Infrastructure仮想クラウド・ネットワーク(VCN)モジュールを使用して、基本的なネットワークを宣言します。次に、スクリプトを実行してネットワークを作成します。次の項では、ネットワークをカスタマイズするためのコンポーネントを追加します。
モジュールについて
モジュールは、一緒に使用される複数のリソースのコンテナです。インフラストラクチャ・リソースを1つずつ宣言するかわりに、Oracle Cloud Infrastructure提供のモジュールから始めます。たとえば、基本的な仮想クラウド・ネットワーク・モジュールから始めます。次に、モジュールに含まれていないリソースをスクリプトに追加します。
モジュール・ブロックの宣言
- キーワード
module
を使用してブロックを開始します。 - モジュールの指定された名前のラベルを追加します:
- 例:
"vcn"
- 例:
- コード・ブロック内部
- モジュール・ドキュメントのプロビジョニング手順の項から、ソースおよびバージョン情報を追加します。
- 必要な入力の値を指定します。デフォルト値はありません。例:
- compartment_id
- internet_gateway_route_rules
- local_peering_gateways
- nat_gateway_route_rules
- リージョン
- オーバーライドするオプションの入力の値を指定します。それ以外の場合は、デフォルト値が使用されます。例:
- create_internet_gateway
- create_nat_gateway
- create_service_gateway
- vcn_dns_label
- vcn_cidrs
- vcn_name
- オプションの入力をデフォルト値で宣言できるため、後でコードを確認するときに、使用した値がわかります。例:
vcn_name = "vcn-module" vcn_dns_label = "vcnmodule" vcn_cidrs = ["10.0.0.0/16"]
出力ブロックをコードに追加して、スクリプトの実行後に仮想クラウド・ネットワークに関する情報を取得します。
モジュール出力について
vcn
モジュールの出力を検索するには:- OCIモジュール: vcnページに移動します。
- 「出力」をクリックします。
- VCNモジュールに対して出力できる属性のリストが表示されます。
- 属性の説明を確認します:
- ig_route_id
- インターネット・ゲートウェイを含むルート表のOCID。
- nat_gateway_id
- NATゲートウェイのOCID
- nat_route_id
- NATゲートウェイを含むルート表のOCID。
- vcn_id
- VCNのOCID
- ig_route_id
モジュール出力ブロックの宣言
-
- キーワード
output
を使用してブロックを開始します。 - 出力結果とともに印刷するラベルを追加します:
- ラベルには、文字、数字、アンダースコア(_)およびハイフン(-)を含めることができます。最初の文字は数字にできません。
- 例:
"vcn_id"
- モジュールの「出力」ページから属性を取得します。
- コード・ブロック内で、次の式を使用してモジュール出力の値を入力します:
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. ネットワークのカスタマイズ
セキュリティ・リスト、プライベート・サブネットとパブリック・サブネットのスクリプトを作成して、コンソールのウィザードと同じ仮想ネットワークを作成します。
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左側のナビゲーション・フィルタで、
security list
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、「oci_core_security_list」をクリックします。
- 引数リファレンスの項で、最上位レベル(黒い実線)の箇条書きのすべての(必須)引数を見つけます:
- compartment_id
- vcn_id
- 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リソースとoracle-terraform-modules/vcnの両方で、仮想クラウド・ネットワークOCID
vcn_id
に同じ引数名を使用します。 - 等式の左側にある
vcn_id
は、リソースの引数(必須入力)です。 - 等式の右側にある
vcn_id
は、モジュールで作成するVCNのOCIDです。 - VCNモジュール・スクリプトを実行してVCNを作成したかどうかは関係ありません。いずれの場合も、VCNモジュールの作成後に、TerraformによってVCN OCIDがセキュリティ・リストに割り当てられます。
エグレス・ルール
- ステートメント:いいえ
- 宛先: 0.0.0.0/0
- IPプロトコル: すべてのプロトコル
表の「許可」フィールドは、他のフィールドに基づいて自動的に生成されます。スクリプトに、それの引数を追加することはありません。
oci_core_security_listページの引数リファレンスの項で、private-security-list.tf
の次の引数を見つけます:
- egress_security_rules
- ステートレス
- 宛先
- destination_type
- プロトコル
引数に値を割り当てるには、等号(=)を使用します。引数
egress_security_rules
は、値を直接取得しません。独自の引数を持ち、それぞれが値を取得します。したがって、等号はブロック内でのみ使用してください。- Write:
egress_security_rules { <arguments with assigned values> }
- 次のように記述しないでください:
egress_security_rules = { <arguments with assigned values> }
oci_core_security_listページの属性リファレンスの項で、outputs.tf
の出力として使用する次の属性を見つけます:
- display_name
- id
完了しました。エグレス・ルールを含むセキュリティ・リストが仮想クラウド・ネットワークに正常に作成されました。次の項では、このセキュリティ・リストに3つのイングレス・ルールを追加します。
この項では、前の項で作成したセキュリティ・リストに次の3つのイングレス・ルールを追加します。
イングレス・ルール
- ルール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
表の「許可」フィールドは、他のフィールドに基づいて自動的に生成されます。スクリプトに、それの引数を追加することはありません。
完了しました。セキュリティ・リストに3つのイングレス・ルールが正常に追加されました。このセキュリティ・リストは、プライベート・サブネットに使用します。次の項では、パブリック・サブネットの別のセキュリティ・リストを作成します。
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左側のナビゲーション・フィルタで、
security list
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、「oci_core_security_list」をクリックします。
- 引数リファレンスの項で、次の引数を見つけます:
- ingress_security_rules
- ステートレス
- ソース
- source_type
- プロトコル
- icmp_options
- タイプ
- プログラムを作る
- tcp_options
- 最小
- 最大
- ingress_security_rules
この項では、エグレス・ルールおよびイングレス・ルールを使用して、ネットワークにセキュリティ・リストを作成します。後で、このセキュリティ・リストをパブリック・サブネットに割り当てます。
完了しました。別のセキュリティ・リストが仮想クラウド・ネットワークに正常に作成されました。
この項では、ネットワークにプライベート・サブネットを作成し、このサブネットにプライベート・セキュリティ・リストを関連付けます。また、vcnモジュールで作成したNATルート表をこのサブネットに追加します。NATルート表には、1つのNATゲートウェイと1つのサービス・ゲートウェイがあり、プライベート・サブネット用に設計されています。チュートリアルの最初のダイアグラムを参照してください。
完了しました。プライベート・サブネットが仮想クラウド・ネットワークに正常に作成されました。
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左側のナビゲーション・フィルタで、
subnet
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、「oci_core_subnet」をクリックします。
- 引数リファレンスの項で、すべての(必須)引数を見つけます:
- compartment_id
- vcn_id
- cidr_block
- 次のオプションの引数をオーバーライドします:
- 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を返すため、使用しないでください。
- (オプション): コンソールで、
your-vcn-name
に移動します。「リソース」で、「ルート表」、「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モジュールで作成したインターネット・ルート表をこのサブネットに追加します。インターネット・ルート表にはインターネット・ゲートウェイがあり、パブリック・サブネット用に設計されています。チュートリアルの最初のダイアグラムを参照してください。
完了しました。パブリック・サブネットが仮想クラウド・ネットワークに正常に作成されました。
- Oracle Cloud Infrastructureプロバイダに移動します。
- 左側のナビゲーション・フィルタで、
subnet
と入力します。結果は、データ・ソースとリソースの両方に対して返されます。
- 「コア」で、「リソース」に移動し、「oci_core_subnet」をクリックします。
- 引数リファレンスの項で、すべての(必須)引数を見つけます:
- compartment_id
- vcn_id
- cidr_block
- 次のオプションの引数をオーバーライドします:
- route_table_id
- security_list_ids
- display_name
- 引数に値を割り当てます:
- cidr_block
- チュートリアルの最初のダイアグラムを参照してください。
- route_table_id
- ルート表のOCID。
- このルート表のゲートウェイを確認するには、チュートリアルの最初のダイアグラムのパブリック・サブネットを参照してください:
- インターネット・ゲートウェイ
- VCNモジュールで作成したインターネット・ゲートウェイにルート表を割り当てます。ノート
- module.vcn.ig_route_idを使用します。
- (オプション): コンソールで、
your-vcn-name
に移動します。「リソース」で、「ルート表」、「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. 仮想クラウド・ネットワークの再作成(オプション)
仮想クラウド・ネットワークを破棄します。次に、スクリプトを再実行して、別の仮想クラウド・ネットワークを作成します。
前の項では、作業内容を確認するために、リソースを宣言するたびにスクリプトを実行しました。ここでは、これらをまとめて実行します。スクリプトが宣言的であり、Terraformによってオブジェクトが作成される順序が解決されることがわかります。
完了しました。Terraformを使用して、Oracle Cloud Infrastructureアカウントに仮想クラウド・ネットワークとそのコンポーネントが正常に作成されました。
この仮想クラウド・ネットワークには、コンソールでVCNの起動ウィザードを使用して作成した仮想クラウド・ネットワークと同じコンポーネントがあります。「インターネット接続性を持つVCN」オプションを選択します。チュートリアルのステップに従って、ウィザードを使用してネットワークを設定し、このネットワークと比較できます。
参照:
次の手順
次のTerraform: スタート・ガイド・チュートリアルは、次を参照してください:
Oracle製品を使用した開発の詳細を確認するには、次のサイトを参照してください: