Terraform: 仮想クラウド・ネットワークの作成

このチュートリアルでは、Terraformを使用して、Oracle Cloud Infrastructureテナンシに仮想クラウド・ネットワークを作成します。

主なタスクは:

  • 基本的な仮想クラウド・ネットワークを設定します。
  • 次のリソースを定義してネットワークに追加します:
    • セキュリティ・リスト
    • プライベート・サブネットおよびパブリック・サブネット
Terraformを使用してOracle Cloud Infrastructure仮想クラウド・ネットワークを作成するために必要なコンポーネントのダイアグラム。ローカルのLinux環境から、ユーザーはTerraformを使用して仮想クラウド・ネットワークを作成します。このネットワークには、インターネットからアクセスできるパブリック・サブネットがあります。ネットワークには、NATゲートウェイを介してインターネットに接続し、Oracle Services Networkにプライベートに接続するプライベート・サブネットもあります。仮想クラウド・ネットワークのCIDRブロックは10.0.0.0/16、パブリック・サブネットのCIDRブロックは10.0.0.0/24、プライベート・サブネットのCIDRブロックは10.0.1.0/24です。

その他の情報については、次のWebサイトを参照してください。

開始する前に

このチュートリアルを正常に実行するには、次が必要です:

要件

1. 準備

仮想クラウド・ネットワークを作成するための環境を準備します。また、チュートリアルを完了するために必要なすべての情報を収集します。

必要な情報の収集

次の情報をメモ帳にコピーします。

  1. コンパートメント名: <your-compartment-name>
    • 開始する前にの項で実行したコンパートメントの作成チュートリアルからコンパートメント名を見つけます。
  2. コンパートメントID: <compartment-ocid>
    • Oracle Cloud Infrastructureコンソールの検索バーで、<your-compartment-name>と入力します。
    • 検索結果内の<your-compartment-name>をクリックします。
    • OCIDをコピーします。
  3. リージョン: <region-identifier>
リソース・ポリシーの追加

ユーザー名が管理者グループ内にある場合は、この項をスキップしてください。それ以外の場合は、管理者に依頼してテナンシに次のポリシーを追加します:

allow group <the-group-your-username-belongs> to manage all-resources in compartment <your-compartment-name>

この権限を使用すると、コンパートメント内のすべてのリソースを管理でき、基本的にそのコンパートメントでの管理権限が付与されます。

ポリシーを追加するステップ
  1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」をクリックします。「アイデンティティ」で、「ポリシー」をクリックします。
  2. 「コンパートメント」ドロップダウンからコンパートメントを選択します。
  3. 「ポリシーの作成」をクリックします。
  4. 次の情報を入力します:
    • 名前: manage-<your-compartment-name>-resources
    • 説明: ユーザーが<your-compartment-name>のリソースをリスト、作成、更新および削除できるようにします。
    • コンパートメント: <your-tenancy>(root)
  5. 「ポリシー・ビルダー」で、次の選択肢を選択します:
    • ポリシー・ユース・ケース: コンパートメント管理
    • 共通ポリシー・テンプレート: コンパートメント管理者がコンパートメントを管理できるようにします
    • グループ: <the-group-your-username-belongs>
    • 場所: <your-tenancy>(root)
  6. 「作成」をクリックします。

参照: 共通ポリシー

2. 基本的なネットワークの作成

認証、モジュールで定義された基本的な仮想クラウド・ネットワーク、および出力用のスクリプトを作成します。

認証の追加

最初に、Terraformスクリプトのディレクトリを設定します。次に、Oracle Cloud Infrastructureアカウントがこのディレクトリから実行されるスクリプトを認証できるように、プロバイダ・スクリプトを追加します。

  1. $HOMEディレクトリにtf-vcnというディレクトリを作成し、そのディレクトリに移動します。
    mkdir tf-vcn
    cd tf-vcn
  2. 開始する前にの項に記載されているOCI Terraformの設定チュートリアルのprovider.tfファイルをtf-vcnディレクトリにコピーします。
    cp ../tf-provider/provider.tf .
基本的なネットワークの宣言

Terraformレジストリに記載されているOracle Cloud Infrastructure仮想クラウド・ネットワーク(VCN)モジュールを使用して、基本的なネットワークを宣言します。次に、スクリプトを実行してネットワークを作成します。次の項では、ネットワークをカスタマイズするためのコンポーネントを追加します。

  1. Terraformレジストリに移動します。
  2. 「モジュールの参照」をクリックします。
  3. 左側のナビゲーション・プロバイダ・リストで、ociをクリックします。
    Oracle Cloud Infrastructure提供のモジュールのリストが表示されます。
  4. oracle-terraform-modules/vcnをクリックします。
  5. 「バージョン」で、リストからVersion 3.1.0をクリックします。
    このチュートリアルではバージョン3.1.0を使用します。別のバージョンを使用する場合、必要な入力の数が異なり、vcnに異なるリソースを作成することがあります。
  6. vcn-module.tfというファイルを作成します。
  7. ページのプロビジョニング手順の項のコードをvcn-module.tfにコピーします。

    例:

    module "vcn" {
      source  = "oracle-terraform-modules/vcn/oci"
      version = "3.1.0"
      # insert the 5 required variables here
    }
  8. 「入力」をクリックし、すべての必須入力を検索します。
  9. オーバーライドするオプションの入力を確認します。
  10. vcn-module.tfに、次のコードを追加します。
    # Source from https://registry.terraform.io/modules/oracle-terraform-modules/vcn/oci/
    module "vcn"{
      source  = "oracle-terraform-modules/vcn/oci"
      version = "3.1.0"
      # insert the 5 required variables here
    
      # Required Inputs
      compartment_id = "<compartment-ocid>"
      region = "<region-identifier>"
    
      internet_gateway_route_rules = null
      local_peering_gateways = null
      nat_gateway_route_rules = null
    
      # Optional Inputs
      vcn_name = "vcn-module"
      vcn_dns_label = "vcnmodule"
      vcn_cidrs = ["10.0.0.0/16"]
      
      create_internet_gateway = true
      create_nat_gateway = true
      create_service_gateway = true  
    }
    • <compartment-ocid>および<region-identifier>を、必要な情報の収集の項の情報に置き換えます。
    • <your-vcn-name>を任意の名前に置き換えます。デフォルト値はvcn-moduleです
    • <your-dns-label>を任意のラベルに置き換えます。デフォルト値はvcnmoduleです。
      ノート

      • 仮想クラウド・ネットワークのDNSドメイン名は次のとおりです:
        <your-dns-label>.oraclevcn.com
  11. vcn-module.tfファイルを保存します。
説明
モジュールについて

モジュールは、一緒に使用される複数のリソースのコンテナです。インフラストラクチャ・リソースを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"]
出力の追加

出力ブロックをコードに追加して、スクリプトの実行後に仮想クラウド・ネットワークに関する情報を取得します。

  1. tf-vcnディレクトリに、outputs.tfというファイルを作成します。
  2. outputs.tfに、次のコードを追加します。
    # Outputs for the vcn module
    
    output "vcn_id" {
      description = "OCID of the VCN that is created"
      value = module.vcn.vcn_id
    }
    output "id-for-route-table-that-includes-the-internet-gateway" {
      description = "OCID of the internet-route table. This route table has an internet gateway to be used for public subnets"
      value = module.vcn.ig_route_id
    }
    output "nat-gateway-id" {
      description = "OCID for NAT gateway"
      value = module.vcn.nat_gateway_id
    }
    output "id-for-for-route-table-that-includes-the-nat-gateway" {
      description = "OCID of the nat-route table - This route table has a nat gateway to be used for private subnets. This route table also has a service gateway."
      value = module.vcn.nat_route_id
    }
  3. outputs.tfファイルを保存します。
    ノート

    outputs.tfprovider.tfおよびvcn-module.tfが同じディレクトリにあることを確認してください。
説明
モジュール出力について
モジュール出力は、そのモジュールに対して返すことができる属性です。vcnモジュールの出力を検索するには:
  • OCIモジュール: vcnページに移動します。
  • 「出力」をクリックします。
  • VCNモジュールに対して出力できる属性のリストが表示されます。
  • 属性の説明を確認します:
    • ig_route_id
      • インターネット・ゲートウェイを含むルート表のOCID。
    • nat_gateway_id
      • NATゲートウェイのOCID
    • nat_route_id
      • NATゲートウェイを含むルート表のOCID。
    • vcn_id
      • VCNのOCID
モジュール出力ブロックの宣言
    • キーワード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"
      ノート

      説明文字列は出力に印刷されないため、ラベルに出力内容が記述されていることを確認してください。
    • 出力ごとに出力ブロックを作成します。
基本的なネットワークの作成
  1. Terraformを使用して基本的なネットワークを作成します:
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、作成するリソースにyesを入力します。

    仮想ネットワークが作成されると、定義した出力が出力ターミナルに表示されます。

  2. (オプション)コンソールから作成を確認します:
    • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
    • コンパートメントを選択します。
    • 仮想クラウド・ネットワークがネットワークのリストに表示されることを確認します。

完了しました。Terraformを使用して、Oracle Cloud Infrastructureアカウントに基本的な仮想ネットワークが正常に作成されました。仮想ネットワークがあるため、この時点で実行できます。次の項では、モジュールから作成されたネットワークをカスタマイズする方法について説明します。

3. ネットワークのカスタマイズ

セキュリティ・リスト、プライベート・サブネットとパブリック・サブネットのスクリプトを作成して、コンソールのウィザードと同じ仮想ネットワークを作成します。

プライベート・サブネットのセキュリティ・リストの作成
セキュリティ・リストの宣言
  1. private-security-list.tfというファイルを作成します。
  2. private-security-list.tfに、次のコードを追加します。
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/core_security_list
    
    resource "oci_core_security_list" "private-security-list"{
    
    # Required
      compartment_id = "<compartment-ocid>"
      vcn_id = module.vcn.vcn_id
    
    # Optional
      display_name = "security-list-for-private-subnet"
    }
    • <compartment-ocid>を、情報の収集の項の情報に置き換えます。
    • vcn_idを、モジュールで作成したVCN OCIDにポイントします:
      vcn_id = module.vcn.vcn_id
説明
  • 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プロトコル: すべてのプロトコル
ノート

表の「許可」フィールドは、他のフィールドに基づいて自動的に生成されます。スクリプトに、それの引数を追加することはありません。
  1. private-security-list.tfに、次のコードを追加します:
      
      egress_security_rules {
          stateless = false
          destination = "0.0.0.0/0"
          destination_type = "CIDR_BLOCK"
          protocol = "all" 
      }
  2. private-security-list.tfファイルを保存します。
  3. outputs.tfに、次のコードを追加します。
    
    # Outputs for private security list
    
    output "private-security-list-name" {
      value = oci_core_security_list.private-security-list.display_name
    }
    output "private-security-list-OCID" {
      value = oci_core_security_list.private-security-list.id
    }
  4. outputs.tfファイルを保存します。
    ノート

    private-security-list.tfoutputs.tfprovider.tfおよびvcn-module.tfが同じディレクトリにあることを確認してください。
説明

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
セキュリティ・リストの作成
  1. Terraformを使用してプライベート・サブネットのセキュリティ・リストを作成します:
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、作成するリソースにyesを入力します。

    セキュリティ・リストが作成されると、定義した出力が出力ターミナルに表示されます。

  2. (オプション)コンソールからネットワークの作成を確認します。
    • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
    • <your-vcn-name>をクリックします。
    • 「リソース」セクションで、「セキュリティ・リスト」をクリックします。
    • 「security-list-for-private-subnet」をクリックします。
    • 「エグレス・ルール」をクリックします。

完了しました。エグレス・ルールを含むセキュリティ・リストが仮想クラウド・ネットワークに正常に作成されました。次の項では、このセキュリティ・リストに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
ノート

表の「許可」フィールドは、他のフィールドに基づいて自動的に生成されます。スクリプトに、それの引数を追加することはありません。
  1. private-security-list.tfに、次のコードを追加します:
     
    ingress_security_rules { 
          stateless = false
          source = "10.0.0.0/16"
          source_type = "CIDR_BLOCK"
          # Get protocol numbers from https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml TCP is 6
          protocol = "6"
          tcp_options { 
              min = 22
              max = 22
          }
        }
      ingress_security_rules { 
          stateless = false
          source = "0.0.0.0/0"
          source_type = "CIDR_BLOCK"
          # Get protocol numbers from https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml ICMP is 1  
          protocol = "1"
      
          # For ICMP type and code see: https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
          icmp_options {
            type = 3
            code = 4
          } 
        }   
      
      ingress_security_rules { 
          stateless = false
          source = "10.0.0.0/16"
          source_type = "CIDR_BLOCK"
          # Get protocol numbers from https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml ICMP is 1  
          protocol = "1"
      
          # For ICMP type and code see: https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
          icmp_options {
            type = 3
          } 
        }
    
  2. private-security-list.tfファイルを保存します。
  3. スクリプトを実行します。
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、作成するリソースにyesを入力します。

  4. (オプション)コンソールから作成を確認します:
    • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
    • <your-vcn-name>をクリックします。
    • 「リソース」セクションで、「セキュリティ・リスト」をクリックします。
    • 「security-list-for-private-subnet」をクリックします。
    • イングレス・ルールをクリックします。

完了しました。セキュリティ・リストに3つのイングレス・ルールが正常に追加されました。このセキュリティ・リストは、プライベート・サブネットに使用します。次の項では、パブリック・サブネットの別のセキュリティ・リストを作成します。

説明
  • Oracle Cloud Infrastructureプロバイダに移動します。
  • 左側のナビゲーション・フィルタで、security listと入力します。

    結果は、データ・ソースリソースの両方に対して返されます。

  • 「コア」で、「リソース」に移動し、「oci_core_security_list」をクリックします。
  • 引数リファレンスの項で、次の引数を見つけます:
    • ingress_security_rules
      • ステートレス
      • ソース
      • source_type
      • プロトコル
      • icmp_options
        • タイプ
        • プログラムを作る
      • tcp_options
        • 最小
        • 最大
  • protocolについては、プロトコル番号を参照してください:
    • TCP: 6
    • ICMP: 1
  • icmp_optionsについては、ICMPパラメータを参照してください。
  • tcp_optionsについては、「宛先範囲: 22」などのポート範囲がない場合、最大値と最小値を同じ数値に設定します。例:
    • 最小= 22
    • 最大= 22
パブリック・サブネットのセキュリティ・リストの作成

この項では、エグレス・ルールおよびイングレス・ルールを使用して、ネットワークにセキュリティ・リストを作成します。後で、このセキュリティ・リストをパブリック・サブネットに割り当てます。

  1. tf-vcnディレクトリに、private-security-list.tfファイルをコピーし、public-security-list.tfという名前を付けます。
    cp private-security-list.tf public-security-list.tf
  2. public-security-list.tfファイルを開き、次を更新します:
    • リソース・ブロックのローカル名: "private-security-list"から"public-security-list"
    • セキュリティ・リスト名: display_name = "security-list-for-public-subnet"
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/core_security_list
    
    resource "oci_core_security_list" "public-security-list"{
    
    # Required
      compartment_id = "<compartment-ocid>"
      vcn_id = module.vcn.vcn_id
    
    # Optional
      display_name = "security-list-for-public-subnet"
  3. プライベートの場合と同じエグレス・ルールを使用します。

    エグレス・ルール

    • ステートメント:いいえ
    • 宛先: 0.0.0.0/0
    • IPプロトコル: すべてのプロトコル
      
      egress_security_rules {
          stateless = false
          destination = "0.0.0.0/0"
          destination_type = "CIDR_BLOCK"
          protocol = "all" 
      }
  4. 次の表に基づいて、最初のイングレス・ルールTCPルールを更新します:
    • source = "10.0.0.0/16"からsource = "0.0.0.0/0"

    イングレス・ルール

    • ルール1:
      • ステートメント:いいえ
      • ソース: 0.0.0.0/0
      • IPプロトコル: TCP
      • ソース・ポート範囲: すべて
      • 宛先ポート範囲: 22
    • ルール2:
      • ステートメント:いいえ
      • ソース: 0.0.0.0/0
      • IPプロトコル: ICMP
      • タイプとコード: 3、4
    • ルール3:
      • ステートメント:いいえ
      • ソース: 10.0.0.0/16
      • IPプロトコル: ICMP
      • タイプとコード: 3
     
    ingress_security_rules { 
          stateless = false
          source = "0.0.0.0/0"
          source_type = "CIDR_BLOCK"
          # Get protocol numbers from https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml TCP is 6
          protocol = "6"
          tcp_options { 
              min = 22
              max = 22
          }
        }
      ingress_security_rules { 
          stateless = false
          source = "0.0.0.0/0"
          source_type = "CIDR_BLOCK"
          # Get protocol numbers from https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml ICMP is 1  
          protocol = "1"
      
          # For ICMP type and code see: https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
          icmp_options {
            type = 3
            code = 4
          } 
        }   
      
      ingress_security_rules { 
          stateless = false
          source = "10.0.0.0/16"
          source_type = "CIDR_BLOCK"
          # Get protocol numbers from https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml ICMP is 1  
          protocol = "1"
      
          # For ICMP type and code see: https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
          icmp_options {
            type = 3
          } 
        }
    
  5. public-security-list.tfファイルを保存します。
  6. outputs.tfに、次のコードを追加します。
    
    # Outputs for public security list
    
    output "public-security-list-name" {
      value = oci_core_security_list.public-security-list.display_name
    }
    output "public-security-list-OCID" {
      value = oci_core_security_list.public-security-list.id
    }
  7. outputs.tfファイルを保存します。
    ノート

    public-security-list.tfprivate-security-list.tfoutputs.tfprovider.tfおよびvcn-module.tfが同じディレクトリにあることを確認してください。
  8. スクリプトを実行します。
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、作成するセキュリティ・リストにyesを入力します。

  9. (オプション)コンソールから作成を確認します。
    • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
    • <your-vcn-name>をクリックします。
    • 「リソース」セクションで、「セキュリティ・リスト」をクリックします。
    • 「security-list-for-public-subnet」をクリックします。
    • イングレス・ルールをクリックします。
    • 「エグレス・ルール」をクリックします。

完了しました。別のセキュリティ・リストが仮想クラウド・ネットワークに正常に作成されました。

プライベート・サブネットの作成

この項では、ネットワークにプライベート・サブネットを作成し、このサブネットにプライベート・セキュリティ・リストを関連付けます。また、vcnモジュールで作成したNATルート表をこのサブネットに追加します。NATルート表には、1つのNATゲートウェイと1つのサービス・ゲートウェイがあり、プライベート・サブネット用に設計されています。チュートリアルの最初のダイアグラムを参照してください。

  1. tf-vcnディレクトリで、private-subnet.tfというファイルを作成し、それに次のコードを追加します:
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/core_subnet
    
    resource "oci_core_subnet" "vcn-private-subnet"{
    
      # Required
      compartment_id = "<compartment-ocid>"
      vcn_id = module.vcn.vcn_id
      cidr_block = "10.0.1.0/24"
     
      # Optional
      # Caution: For the route table id, use module.vcn.nat_route_id.
      # Do not use module.vcn.nat_gateway_id, because it is the OCID for the gateway and not the route table.
      route_table_id = module.vcn.nat_route_id
      security_list_ids = [oci_core_security_list.private-security-list.id]
      display_name = "private-subnet"
    }
    • <compartment-ocid>を、必要な情報の収集の項で収集した情報に置き換えます。
  2. private-subnet.tfファイルを保存します。
  3. outputs.tfに、次のコードを追加します。
    
    # Outputs for private subnet
    
    output "private-subnet-name" {
      value = oci_core_subnet.vcn-private-subnet.display_name
    }
    output "private-subnet-OCID" {
      value = oci_core_subnet.vcn-private-subnet.id
    }
  4. outputs.tfファイルを保存します。
    ノート

    private-subnet.tftf-vcnディレクトリにあることを確認してください。
  5. スクリプトを実行します。
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、作成するプライベート・サブネットにyesを入力します。

  6. (オプション)コンソールから作成を確認します:
    • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
    • <your-vcn-name>をクリックします。
    • 「リソース」セクションで、「サブネット」をクリックします。
    • 「private-subnet」をクリックします。
    • 「サブネット情報」セクションで、「ルート表: nat-route」を確認します
    • 「セキュリティ・リスト」セクションで、「security-list-for-private-subnet」を確認します。

完了しました。プライベート・サブネットが仮想クラウド・ネットワークに正常に作成されました。

説明
  • 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]
パブリック・サブネットの作成

この項では、ネットワークにパブリック・サブネットを作成し、このサブネットにパブリック・セキュリティ・リストを関連付けます。また、VCNモジュールで作成したインターネット・ルート表をこのサブネットに追加します。インターネット・ルート表にはインターネット・ゲートウェイがあり、パブリック・サブネット用に設計されています。チュートリアルの最初のダイアグラムを参照してください。

  1. tf-vcnディレクトリで、public-subnet.tfというファイルを作成し、それに次のコードを追加します:
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/core_subnet
    
    resource "oci_core_subnet" "vcn-public-subnet"{
    
      # Required
      compartment_id = "<compartment-ocid>"
      vcn_id = module.vcn.vcn_id
      cidr_block = "10.0.0.0/24"
     
      # Optional
      route_table_id = module.vcn.ig_route_id
      security_list_ids = [oci_core_security_list.public-security-list.id]
      display_name = "public-subnet"
    }
    • <compartment-ocid>を、必要な情報の収集の項で収集した情報に置き換えます。
  2. public-subnet.tfファイルを保存します。
  3. outputs.tfに、次のコードを追加します。
    
    # Outputs for public subnet
    
    output "public-subnet-name" {
      value = oci_core_subnet.vcn-public-subnet.display_name
    }
    output "public-subnet-OCID" {
      value = oci_core_subnet.vcn-public-subnet.id
    }
  4. outputs.tfファイルを保存します。
    ノート

    public-subnet.tftf-vcnディレクトリにあることを確認してください。
  5. スクリプトを実行します。
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、作成するパブリック・サブネットにyesを入力します。

  6. (オプション)コンソールから作成を確認します:
    • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
    • <your-vcn-name>をクリックします。
    • 「リソース」セクションで、「サブネット」をクリックします。
    • 「public-subnet」をクリックします。
    • 「サブネット情報」セクションで、「ルート表: internet-route」を確認します
    • 「セキュリティ・リスト」セクションで、「security-list-for-public-subnet」を確認します。

完了しました。パブリック・サブネットが仮想クラウド・ネットワークに正常に作成されました。

説明
  • 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]

4. 仮想クラウド・ネットワークの再作成(オプション)

仮想クラウド・ネットワークを破棄します。次に、スクリプトを再実行して、別の仮想クラウド・ネットワークを作成します。

スクリプトの実行

前の項では、作業内容を確認するために、リソースを宣言するたびにスクリプトを実行しました。ここでは、これらをまとめて実行します。スクリプトが宣言的であり、Terraformによってオブジェクトが作成される順序が解決されることがわかります。

  1. Terraformを使用してインスタンスを破棄します:
    terraform destroy

    確認を求められた場合は、破棄するリソースにyesを入力します。

  2. (オプション)コンソールから終了を確認します:
    • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
    • コンパートメントを選択します。
    • 仮想クラウド・ネットワークがネットワークのリストに表示されなくなることを確認します。
  3. Terraformを使用して新しい仮想クラウド・ネットワークを作成します:
    terraform init
    terraform plan
    terraform apply

    確認を求められた場合は、作成するリソースにyesを入力します。

    ネットワークが作成されると、定義した出力が出力ターミナルに表示されます。

    ノート

    この新しい仮想クラウド・ネットワークには、そのリソース用の新しいOCIDがあります。このネットワークは、破棄したネットワークと同じではありません
  4. (オプション)コンソールから作成を確認します:
    • ナビゲーション・メニューを開いて「ネットワーキング」をクリックし、「仮想クラウド・ネットワーク」をクリックします。
    • コンパートメントを選択します。
    • 仮想クラウド・ネットワークがネットワークのリストに表示されることを確認します。
  5. 出力を再度表示します。
    terraform output

完了しました。Terraformを使用して、Oracle Cloud Infrastructureアカウントに仮想クラウド・ネットワークとそのコンポーネントが正常に作成されました。

ノート

この仮想クラウド・ネットワークには、コンソールVCNの起動ウィザードを使用して作成した仮想クラウド・ネットワークと同じコンポーネントがあります。「インターネット接続性を持つVCN」オプションを選択します。チュートリアルのステップに従って、ウィザードを使用してネットワークを設定し、このネットワークと比較できます。

参照: