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

Terraformを使用して、Oracle Cloud Infrastructureテナンシに仮想クラウド・ネットワーク(VCN)を作成します。

主なタスクは:

  • 基本的なVCNを設定します。
  • 次のリソースを定義してネットワークに追加します:
    • セキュリティ・リスト
    • プライベート・サブネットおよびパブリック・サブネット
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です。

詳細は、次を参照してください:

開始前

要件

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

1. 準備

VCNを作成するための環境を準備します。また、チュートリアルを完了するために必要なすべての情報を収集します。

必要な情報の収集

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

この情報を収集する手順については、次の表を参照してください。

項目 アイテムを収集するステップ
コンパートメント名 完成したチュートリアルコンパートメントの作成を参照してください。
コンパートメントID
  1. コンソールの検索バーで、<your-compartment-name>と入力します。
  2. 検索結果内の<your-compartment-name>を選択します。
  3. OCIDの横にある「コピー」を選択します。
リージョン
  1. コンソールのナビゲーション・バーで、リージョンを検索します。

    例: 米国東部(アッシュバーン)

    詳細は、リージョンでの作業を参照してください。

  2. リージョンの識別子は、リージョンおよび可用性ドメインで調べます。

    例: us-ashburn-1

リソース・ポリシーの追加

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

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

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

ポリシーを追加するステップ
  1. コンソールで、ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」にある「ポリシー」を選択します。
  2. コンパートメントを選択します。
  3. 「ポリシーの作成」を選択します。
  4. 「ポリシーの作成」ページで、次の値を入力します:
    • 名前: manage-<your-compartment-name>-resources
    • 説明: Allow users to list, create, update, and delete resources in <your-compartment-name>.
    • コンパートメント: <your-tenancy>(root)
  5. 「ポリシー・ビルダー」に、次の値を入力します:
    • ポリシー・ユース・ケース: コンパートメント管理
    • 共通ポリシー・テンプレート: コンパートメント管理者がコンパートメントを管理できるようにします
    • アイデンティティ・ドメイン: <identity-domain>
    • グループ: <a-group-your-username-belongs-to>
    • 場所: <your-compartment-name>
  6. 「作成」を選択します。

参照: 共通ポリシー

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

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

認証の追加

最初に、Terraformスクリプトのディレクトリを設定します。次に、OCI Terraformの設定チュートリアルからプロバイダおよびバージョンのスクリプトをコピーして、Oracle Cloud Infrastructureアカウントがこのディレクトリから実行されているスクリプトを認証できるようにします。

  1. $HOMEディレクトリにtf-vcnというディレクトリを作成し、そのディレクトリに移動します。
    mkdir tf-vcn
    cd tf-vcn
  2. provider.tfファイルをtf-vcnディレクトリにコピーします。
    cp ../tf-provider/provider.tf .
  3. versions.tfファイルをtf-vcnディレクトリにコピーします。
    cp ../tf-provider/versions.tf .
基本的なネットワークの宣言

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

ヒント

VCNを作成するためのコンソール・ワークフローからスタックを保存できます。スタックには、VCN構成の参照として使用できるTerraform構成が含まれています。リソース作成ページからのスタックの作成およびスタックのTerraform構成の取得を参照してください。
  1. Terraformレジストリで、vcnのOCI VCNモジュールに移動します。
    このページにナビゲートする方法:
    1. Terraformレジストリに移動します。
    2. 「モジュール」を選択します。
    3. 「プロバイダ」リストで、Oracleを選択します。
    4. oracle-terraform-modules/vcnを選択します。
  2. 「バージョン」で、リストからVersion 3.6.0を選択します。
    このチュートリアルではバージョン3.6.0を使用します。異なるバージョンでは、異なる入力が必要になり、VCNに異なるリソースが作成される場合があります。必須およびオプションの入力を確認するには、「入力」を選択します。
  3. vcn-module.tfというファイルを作成します。
  4. プロビジョニング手順から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.6.0"
      # insert the 1 required variable here
    }
  5. 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.6.0"
      # insert the 1 required variable here
    
      # 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"]
    }
    • <compartment-ocid>および<region-identifier>を、必要な情報の収集の情報に置き換えます。
    • カスタムDNSラベルが必要な場合は、vcn_dns_labelの行のコメントを解除し、値をデフォルトの"vcnmodule"から変更します。
      ノート

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

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

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

  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ファイルを保存します。
  4. tf-vcnディレクトリ内のすべてのファイルをリストします。
    ls

    次のファイルが同じディレクトリに存在することを確認します。

    • outputs.tf
    • provider.tf
    • vcn-module.tf
    • versions.tf
説明
モジュール出力について

モジュール出力は、そのモジュールに対して返すことができる属性です。

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"
      ノート

      説明文字列は出力に印刷されないため、ラベルに出力される内容が記述されていることを確認してください。
    • 出力ごとに出力ブロックを作成します。
基本的なネットワークの作成
  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
  3. private-security-list.tfファイルを保存します。
説明

引数リファレンス(oci_core_security_list)で、必要なすべての引数(第1レベルの箇条書き)を検索します。

  • compartment_id
  • vcn_id
このURLに移動するには

引数参照(oci_core_security_list)にナビゲートするには:

  1. Oracle Cloud Infrastructureプロバイダに移動します。
  2. 左上の「フィルタ」ボックスに、security listと入力します。

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

  3. 「コア」で、「リソース」に移動し、oci_core_security_listを選択します。
  4. 「引数参照」を選択します。

    「引数参照」が開きます。

セキュリティ・リストを次のように宣言します。

  • 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 resourceoracle-terraform-modules/vcnの両方で、仮想クラウド・ネットワークOCID vcn_idに同じ引数名を使用します。
      • 左端のvcn_idは、リソースの引数(必須入力)です。
      • 右端のvcn_idは、モジュールで作成するVCNのOCIDです。
      • VCNモジュール・スクリプトを実行してVCNを作成したかどうかは関係ありません。いずれの場合も、VCNモジュールの作成後にVCN OCIDがTerraformによってセキュリティ・リストに割り当てられます。
エグレス・ルールの追加
次の値に基づいて、エグレス・ルールをセキュリティ・リストに追加します:
  • ステートレス:いいえ
  • 宛先: 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ファイルを保存します。
  5. tf-vcnディレクトリ内のすべてのファイルをリストします。
    ls

    次のファイルが同じディレクトリに存在することを確認します。

    • outputs.tf
    • private-security-list.tf
    • provider.tf
    • vcn-module.tf
    • versions.tf
説明

private-security-list.tfの場合は、引数リファレンス(oci_core_security_list)に移動し、次の引数を見つけます。

  • egress_security_rules
    • ステートレス
    • 宛先
    • destination_type
    • プロトコル
このURLに移動するには

引数参照(oci_core_security_list)にナビゲートするには:

  1. Oracle Cloud Infrastructureプロバイダに移動します。
  2. 左上の「フィルタ」ボックスに、security listと入力します。

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

  3. 「コア」で、「リソース」に移動し、oci_core_security_listを選択します。
  4. 「引数参照」を選択します。

    「引数参照」が開きます。

ノート

等号(=)を使用して、ブロック内の引数にのみ値を割り当てます。

  • 書込み:
    egress_security_rules {
    <arguments with assigned values>
    }
  • 次のように記述しないでください:
    egress_security_rules = {
    <arguments with assigned values>
    }

outputs.tfで出力として使用する属性の場合、「属性参照」を選択して「属性参照」(oci_core_security_list)を開き、次の属性を検索します。

  • display_name
  • id
セキュリティ・リストの作成
  1. Terraformを使用してプライベート・サブネットのセキュリティ・リストを作成します:
    terraform init
    terraform plan
    terraform apply

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

    セキュリティ・リストが作成されると、定義した出力が出力ターミナルに表示されます。
  2. (オプション)コンソールからネットワークの作成を確認します。
    1. ナビゲーション・メニューを開き、「ネットワーキング」「仮想クラウド・ネットワーク」の順に選択します。
    2. VCNを選択します。
    3. 詳細ページで、表示されるオプションに応じて「セキュリティ」または「セキュリティ・リスト」を選択します。
    4. プライベート・サブネット用に作成されたセキュリティ・リスト(security-list-for-private-subnet)を選択します。
    5. 表示されるオプションに応じて、「セキュリティ・ルール」または「エグレス・ルール」を選択します。

完了!エグレス・ルールを含むセキュリティ・リストが仮想クラウド・ネットワークに正常に作成されました。次の項では、このセキュリティ・リストにイングレス・ルールを追加します。

プライベート・サブネットのイングレス・ルールの作成

この項では、前の項で作成したセキュリティ・リストに次のイングレス・ルールを追加します。

イングレス・ルール

  • ルール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
    • タイプとコード:
ノート

表の「許可」フィールドは、他のフィールドに基づいて自動的に生成されます。スクリプトに、それの引数を追加することはありません。
  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. (オプション)コンソールから作成を確認します:
    1. ナビゲーション・メニューを開き、「ネットワーキング」「仮想クラウド・ネットワーク」の順に選択します。
    2. VCNを選択します。
    3. 詳細ページで、表示されるオプションに応じて「セキュリティ」または「セキュリティ・リスト」を選択します。
    4. プライベート・サブネット用に作成されたセキュリティ・リスト(security-list-for-private-subnet)を選択します。
    5. 表示されるオプションに応じて、「セキュリティ・ルール」または「イングレス・ルール」を選択します。

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

説明

引数参照(oci_core_security_list)で、次の引数を見つけます。

  • ingress_security_rules
    • ステートレス
    • ソース
    • source_type
    • プロトコル
    • icmp_options
      • タイプ
      • プログラムを作る
    • tcp_options
      • 最小
      • 最大
このURLに移動するには

引数参照(oci_core_security_list)にナビゲートするには:

  1. Oracle Cloud Infrastructureプロバイダに移動します。
  2. 左上の「フィルタ」ボックスに、security listと入力します。

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

  3. 「コア」で、「リソース」に移動し、oci_core_security_listを選択します。
  4. 「引数参照」を選択します。

    「引数参照」が開きます。

  • protocolについては、Protocol Numbersを参照してください。
    • TCP: 6
    • ICMP: 1
  • icmp_optionsについては、Internet Control Message Protocol (ICMP) Parametersを参照してください。
  • 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
      • タイプとコード:
     
    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ファイルを保存します。
  8. tf-vcnディレクトリ内のすべてのファイルをリストします。
    ls

    次のファイルが同じディレクトリに存在することを確認します。

    • outputs.tf
    • private-security-list.tf
    • provider.tf
    • public-security-list.tf
    • vcn-module.tf
    • versions.tf
  9. スクリプトを実行します。
    terraform init
    terraform plan
    terraform apply

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

  10. (オプション)コンソールから作成を確認します。
    1. ナビゲーション・メニューを開き、「ネットワーキング」「仮想クラウド・ネットワーク」の順に選択します。
    2. VCNを選択します。
    3. 詳細ページで、表示されるオプションに応じて「セキュリティ」または「セキュリティ・リスト」を選択します。
    4. パブリック・サブネット用に作成されたセキュリティ・リスト(security-list-for-public-subnet)を選択します。
    5. 表示されるオプションに応じて、「セキュリティ・ルール」または「イングレス・ルール」を選択します。
    6. 表示されるオプションに応じて、「セキュリティ・ルール」または「エグレス・ルール」を選択します。

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

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

この項では、ネットワークにプライベート・サブネットを作成し、このサブネットにプライベート・セキュリティ・リストを関連付けます。また、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"
    }
  2. private-subnet.tfファイルを保存します。
    ノート

    private-subnet.tftf-vcnディレクトリにあることを確認してください。
  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ファイルを保存します。
    すべての*.tfファイルが同じディレクトリにあることを確認します。Terraformは、関係に基づいて、ディレクトリ内のすべてのファイルを正しい順序で処理します。
  5. スクリプトを実行します。
    terraform init
    terraform plan
    terraform apply

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

  6. (オプション)コンソールから作成を確認します:
    1. ナビゲーション・メニューを開き、「ネットワーキング」「仮想クラウド・ネットワーク」の順に選択します。
    2. VCNを選択します。
    3. 詳細ページで「サブネット」を選択します。
    4. プライベート・サブネット(private-subnet)を選択します。
    5. 詳細ページで、ルート表nat-routeを見つけます。
    6. 「セキュリティ」または「セキュリティ・リスト」(表示内容に応じて)を選択し、セキュリティ・リスト(security-list-for-private-subnet)を検索します。

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

説明

引数参照(oci_core_subnet)で、必要なすべての引数を検索します。

  • compartment_id
  • vcn_id
  • cidr_block
このURLに移動するには

引数参照(oci_core_subnet)にナビゲートするには:

  1. Oracle Cloud Infrastructureプロバイダに移動します。
  2. 左上の「フィルタ」ボックスに、subnetと入力します。

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

  3. 「コア」で、「リソース」に移動し、oci_core_subnetを選択します。
  4. 「引数参照」を選択します。

    「引数参照」が開きます。

  • 次のオプションの引数をオーバーライドします:
    • 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)と比較します。
        1. VCNの詳細ページで、「ルーティング」または「ルート表」(表示内容に応じて)を選択します。
        2. 「nat-route」を選択します。
        3. 「ルート・ルール」を選択します。
    • 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"
    }
  2. public-subnet.tfファイルを保存します。
    ノート

    public-subnet.tftf-vcnディレクトリにあることを確認してください。
  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ファイルを保存します。
    すべての*.tfファイルが同じディレクトリにあることを確認します。Terraformは、関係に基づいて、ディレクトリ内のすべてのファイルを正しい順序で処理します。
  5. スクリプトを実行します。
    terraform init
    terraform plan
    terraform apply

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

  6. (オプション)コンソールから作成を確認します:
    1. ナビゲーション・メニューを開き、「ネットワーキング」「仮想クラウド・ネットワーク」の順に選択します。
    2. VCNを選択します。
    3. 詳細ページで「サブネット」を選択します。
    4. パブリック・サブネット(public-subnet)を選択します。
    5. 詳細ページで、ルート表internet-routeを見つけます。
    6. 「セキュリティ」または「セキュリティ・リスト」(表示内容に応じて)を選択し、セキュリティ・リスト(security-list-for-public-subnet)を検索します。

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

説明

引数参照(oci_core_subnet)で、必要なすべての引数を検索します。

  • compartment_id
  • vcn_id
  • cidr_block
このURLに移動するには

引数参照(oci_core_subnet)にナビゲートするには:

  1. Oracle Cloud Infrastructureプロバイダに移動します。
  2. 左上の「フィルタ」ボックスに、subnetと入力します。

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

  3. 「コア」で、「リソース」に移動し、oci_core_subnetを選択します。
  4. 「引数参照」を選択します。

    「引数参照」が開きます。

  • 次のオプションの引数をオーバーライドします:
    • route_table_id
    • security_list_ids
    • display_name
  • 次の引数に値を割り当てます:
    • cidr_block
      • チュートリアルの最初のダイアグラムを参照してください。
    • route_table_id
      • ルート表のOCID。
      • このルート表のゲートウェイを確認するには、チュートリアルの最初のダイアグラムのパブリック・サブネットを参照してください:
        • インターネット・ゲートウェイ
      • VCNモジュールで作成したインターネット・ゲートウェイにルート表を割り当てます。
        ノート

        • module.vcn.ig_route_idを使用します。
      • (オプション): コンソールで、ルート表のルールを確認し、「ターゲット・タイプ」の値をチュートリアルのダイアグラム(インターネット・ゲートウェイ)と比較します。
        1. VCNの詳細ページで、「ルーティング」または「ルート表」(表示内容に応じて)を選択します。
        2. 「internet-route」を選択します。
        3. 「ルート・ルール」を選択します。
    • 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.VCNの再作成(オプション)

VCNを破棄します。次に、スクリプトを再実行して、別のVCNを作成します。

スクリプトの実行

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

  1. Terraformを使用してVCNを破棄します:
    terraform destroy

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

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

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

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

    ノート

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

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

ノート

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

参照: