OCI Terraformを使用した単純なインフラストラクチャの設定

Terraformを使用して、Oracle Cloud Infrastructureアカウントに単純なインフラストラクチャを設定します。

主なタスクは:

  • 他のTerraformチュートリアルから既存のスクリプトをコピーします。
  • スクリプトを編集して、1つのディレクトリ内のすべてのリソースを結合します。
  • applyコマンドを実行して、次のリソースを作成します:
    • コンパートメント
    • 仮想クラウド・ネットワーク
    • コンピュート・インスタンス
Terraformを使用して単純なインフラストラクチャを作成するために必要なコンポーネントのダイアグラム。ローカルのLinux環境から、ユーザーはTerraformを使用して仮想クラウド・ネットワークを作成します。このネットワークには、インターネットからアクセスできるパブリック・サブネットおよびコンピュート・インスタンスがあります。ネットワークには、NATゲートウェイを介してインターネットに接続し、Oracle Services Networkにプライベートに接続するプライベート・サブネットもあります。CIDRブロックは、仮想クラウド・ネットワークの場合は10.0.0.0/16、パブリック・サブネットの場合は10.0.0.0/24、プライベート・サブネットの場合は10.0.1.0/24です。ローカル・マシンからOracle Cloud Infrastructureテナンシに接続されたユーザーのダイアグラム。

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

開始前

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

要件

1. 準備

前のTerraformチュートリアルで作成したスクリプトを新しいディレクトリにコピーします。

宣言済リソースのコピー
  1. $HOMEディレクトリにtf-simple-infrastructureというディレクトリを作成し、そのディレクトリに移動します。
    mkdir tf-simple-infrastructure
    cd tf-simple-infrastructure
  2. tf-providerディレクトリからTerraformスクリプトをコピーします。
    cp ../tf-provider/*.tf .
    ノート

    状態ファイル(terraform.tfstateまたはterraform.tfstate.backup)はコピーしないでください。これらのファイルには、現在のディレクトリのリソースの状態が含まれています。この新しいディレクトリでスクリプトを実行すると、新しい状態ファイルが作成されます。
  3. outputs.tfファイルの名前をoutputs1.tfに変更します。
    mv outputs.tf outputs1.tf
  4. tf-compartmentディレクトリからTerraformスクリプトをコピーします。
    cp ../tf-compartment/*.tf .
    ノート

    必要なプロバイダ・ファイルはディレクトリごとに1つのみであるため、コピー・コマンドでprovider.tfファイルを別のファイルに置き換えても問題はありません。
  5. outputs.tfファイルの名前をoutputs2.tfに変更します。
    mv outputs.tf outputs2.tf
  6. tf-computeディレクトリからTerraformスクリプトをコピーします。
    cp ../tf-compute/*.tf .
  7. outputs.tfファイルの名前をoutputs3.tfに変更します。
    mv outputs.tf outputs3.tf
  8. tf-vcnディレクトリからTerraformスクリプトをコピーします。
    cp ../tf-vcn/*.tf .
  9. outputs.tfファイルの名前をoutputs4.tfに変更します。
    mv outputs.tf outputs4.tf
  10. 4つの出力ファイルを連結します。
    cat outputs1.tf outputs2.tf outputs3.tf outputs4.tf > outputs.tf
  11. outputs1.tfoutputs2.tfoutputs3.tfおよびoutputs4.tfファイルをtf-simple-infrastructureディレクトリから削除します。
    rm outputs1.tf outputs2.tf outputs3.tf outputs4.tf
  12. ディレクトリに次のファイルがあることを確認します。
    ls
    availability-domains.tf
    compartment.tf
    compute.tf
    outputs.tf
    private-security-list.tf
    private-subnet.tf
    provider.tf
    public-security-list.tf
    public-subnet.tf
    vcn-module.tf
    versions.tf

2. スクリプトの編集

スクリプトを編集してコンパートメントに新しい名前を割り当て、ハードコードされたすべてのOCIDを参照で置き換えます。

コンパートメント名の更新
  1. compartment.tfファイルを開きます。
  2. 前のチュートリアルで<your-compartment-name>をすでに作成している場合は、<your-compartment-name><your-new-compartment-name>で更新します。
    # Source from https://registry.terraform.io/providers/oracle/oci/latest/docs/resources/identity_compartment
    
    resource "oci_identity_compartment" "tf-compartment" {
        # Required
        compartment_id = "<tenancy-ocid>"
        description = "Compartment for Terraform resources."
        name = "<your-new-compartment-name>"
    }
コンパートメント参照の更新
コンパートメントOCIDへの参照の検索

前のチュートリアルでは、コンパートメントOCIDをハードコードしました。ここで、compartment.tfからコンパートメントを参照するように<compartment-ocid>を更新します。

  1. コンパートメントOCIDがoutputs.tfファイルで参照される方法を確認します。
    grep -R compartment outputs.tf

    出力例:

    # Outputs for compartment
    output "compartment-name" {
      value = oci_identity_compartment.tf-compartment.name
    output "compartment-OCID" {
      value = oci_identity_compartment.tf-compartment.id
  2. 次のように、コンパートメントOCIDの値をメモ帳にコピーします:
    oci_identity_compartment.tf-compartment.id
    
ハードコードされたコンパートメントOCIDの更新
  1. compartment_idを参照しているファイルを見つけます。
    grep -Rn compartment_id

    出力例:

    availability-domains.tf:7:  compartment_id = "<tenancy-ocid>"
    compartment.tf:3:   compartment_id = "<tenancy-ocid>"
    compute.tf:4:  compartment_id = "<compartment-ocid>"
    private-security-list.tf:6:  compartment_id = "<compartment-ocid>"
    private-subnet.tf:6:  compartment_id = "<compartment-ocid>"
    public-security-list.tf:6:  compartment_id = "<compartment-ocid>"
    public-subnet.tf:6:  compartment_id = "<compartment-ocid>"
    vcn-module.tf:9:  compartment_id = "<compartment-ocid>"
    ノート

    availability-domains.tfファイルとcompartment.tfファイルは、どちらも<tenancy-ocid>を指します。たとえば、compartment.tfファイルはテナンシを親コンパートメントとしてポイントし、その下にコンパートメントを作成します。この2つのファイルのcompartment_idは編集しないでください。
  2. availability-domains.tfおよびcompartment.tfファイルを除き、grepコマンドの結果の残りのファイルで、compartment_id = "<compartment-ocid>"を次のように置き換えます:
    compartment_id = oci_identity_compartment.tf-compartment.id
サブネット参照の更新
サブネットOCIDへの参照の検索

チュートリアルコンピュート・インスタンスの作成では、コンピュート・インスタンスをホストするパブリック・サブネットをハードコードしました。ここで、public-subnet.tfファイルからpublic-subnet-OCIDを参照するようにcompute.tfファイルを更新します。

  1. サブネットOCIDoutputs.tfファイルでどのように参照されているかを確認します。
    grep -R subnet 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
    # 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
  2. パブリック・サブネットOCIDの値をメモ帳にコピーします:
    oci_core_subnet.vcn-public-subnet.id
    
ハードコードされたサブネットOCIDの更新
  1. subnet_idを参照しているファイルを見つけます。
    grep -Rn subnet_id

    出力例:

    compute.tf:19:        subnet_id = "<your-public-subnet-ocid>"
  2. grepコマンドの結果として得られるcompute.tfファイルで、compartment_id = "<your-public-subnet-ocid>"を次のように置き換えます:
    subnet_id = oci_core_subnet.vcn-public-subnet.id
    

完了!これで、すべてのスクリプトを実行する準備ができました。

3. 単純なインフラストラクチャの作成

Terraformスクリプトを実行して、コンパートメント、仮想クラウド・ネットワークおよびコンピュート・インスタンスをパブリック・サブネットに作成します。

スクリプトの実行
  1. tf-simple-infrastructureディレクトリの作業ディレクトリを初期化します。
    terraform init
  2. 実行計画を作成し、Terraformがアカウントに対して行う予定の変更を確認します:
    terraform plan

    出力例:

    ....
    Terraform will perform the following actions:
    
      # oci_core_instance.ubuntu_instance will be created
    ....
    Plan: 14 to add, 0 to change, 0 to destroy.
    
    Changes to Outputs:
      + all-availability-domains-in-your-tenancy              = [
    ....
  3. Terraformを使用して単純なインフラストラクチャを作成します:
    terraform apply

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

コンソールでの作成の確認(オプション)
  1. ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」で、「コンパートメント」を選択します。
  2. コンパートメント名が表示されるまでページをリフレッシュします。
  3. ナビゲーション・メニューを開き、「ネットワーキング」「仮想クラウド・ネットワーク」の順に選択します。
  4. コンパートメントを選択します。

    コンパートメントがない場合は、ページをリフレッシュします。

  5. VCNを選択し、作成されたリソースを確認します。
  6. ナビゲーション・メニューを開き、「コンピュート」を選択します。「コンピュート」で、「インスタンス」を選択します。
  7. インスタンスがインスタンスのリストに表示されることを確認します。
出力の確認

出力ターミナルで出力を確認します。

ターミナルに表示される出力の例:
oci_identity_compartment.tf-compartment: Creating...
oci_identity_compartment.tf-compartment: Creation complete after 7s [id=xxx]
module.vcn.oci_core_vcn.vcn: Creating...
module.vcn.oci_core_vcn.vcn: Creation complete after 2s [id=xxx]
module.vcn.oci_core_internet_gateway.ig[0]: Creating...
module.vcn.oci_core_nat_gateway.nat_gateway[0]: Creating...
module.vcn.oci_core_default_security_list.lockdown[0]: Creating...
module.vcn.oci_core_service_gateway.service_gateway[0]: Creating...
oci_core_security_list.private-security-list: Creating...
oci_core_security_list.public-security-list: Creating...
module.vcn.oci_core_internet_gateway.ig[0]: Creation complete after 1s [id=xxx]
module.vcn.oci_core_route_table.ig[0]: Creating...
oci_core_security_list.public-security-list: Creation complete after 1s [id=xxx]
module.vcn.oci_core_default_security_list.lockdown[0]: Creation complete after 1s [id=xxx]
oci_core_security_list.private-security-list: Creation complete after 1s [id=xxx]
module.vcn.oci_core_route_table.ig[0]: Creation complete after 1s [id=xxx]
oci_core_subnet.vcn-public-subnet: Creating...
module.vcn.oci_core_nat_gateway.nat_gateway[0]: Creation complete after 2s [id=xxx]
module.vcn.oci_core_service_gateway.service_gateway[0]: Creation complete after 3s [id=xxx]
module.vcn.oci_core_route_table.service_gw[0]: Creating...
module.vcn.oci_core_route_table.nat[0]: Creating...
module.vcn.oci_core_route_table.service_gw[0]: Creation complete after 0s [id=xxx]
module.vcn.oci_core_route_table.nat[0]: Creation complete after 1s [id=xxx]
oci_core_subnet.vcn-private-subnet: Creating...
oci_core_subnet.vcn-public-subnet: Creation complete after 2s [id=xxx]
oci_core_instance.ubuntu_instance: Creating...
oci_core_subnet.vcn-private-subnet: Creation complete after 2s [id=xxx]
oci_core_instance.ubuntu_instance: Still creating... [10s elapsed]
oci_core_instance.ubuntu_instance: Still creating... [20s elapsed]
oci_core_instance.ubuntu_instance: Still creating... [30s elapsed]
oci_core_instance.ubuntu_instance: Creation complete after 38s [id=xxx]

Apply complete! Resources: 14 added, 0 changed, 0 destroyed.

参照:

次の処理

完了!Terraformを使用して、Oracle Cloud Infrastructureアカウントに単純なインフラストラクチャが正常に作成されました。

データ・ソース、リソースおよびモジュールの使用方法がわかったら、Oracle Cloud Infrastructureプロバイダから単純なインフラストラクチャに新しいオブジェクトを追加します。

Oracle製品を使用した開発の詳細を確認するには、次のサイトを参照してください: