ノート:

Terraform状態ファイルへのOracle Cloud Infrastructureリソースのインポート

イントロダクション

Terraformを使用してOracle Cloud Infrastructure (OCI)リソースを管理すると、多くのメリットがあります。その1つは、インフラストラクチャ・デプロイメントに一貫性と再現性をもたらすことです。もう1つは、Terraform構成を複数のプロジェクトでモジュール化および再利用できるため、インフラストラクチャ構成を簡単に管理および拡張できることです。同様に、Terraformを使用すると、インフラストラクチャのプロビジョニングと管理を自動化し、一貫性のある繰り返し可能なデプロイメントを実現できます。もう1つの重要な側面は、Terraformがインフラストラクチャの現在の状態を追跡する状態ファイルを保持することです。この状態ファイルは、変更の計画と適用に使用され、Terraformは、目的の状態を達成するために必要な変更を決定できます。

ただし、Oracle Cloud Infrastructure (OCI)内のすべてのリソースがTerraformによって管理されない場合があります。これは通常、Terraformを使用してリソースをプロビジョニングするときに発生します。Terraformは状態ファイルに存在し、他のリソースは別のユーザーが手動で作成します。後で、これらの手動で作成されたリソースをTerraformで管理する必要があることがわかります。

次を考慮してください:

すでにあるTerraform構成および状態ファイルを使用して新しく追加したコンピュートを管理する場合は、Terraformインポート・コマンドを使用できますが、それに従うステップが他にもあり、Terraform構成ファイルを更新する必要があります。

Terraform v1.5.0以上では、インポート・ブロックがサポートされます。このアプローチでは、既存のTerraformコードは変更されません。既存のTerraform構成ファイルに統合することを選択できますが、これは必須ではありません。目的は、OCIリソースをTerraformで管理されていないTerraform状態ファイルにインポートすることです。

重要な側面の1つは、インポート・ブロックがCI/CDパイプラインと連携することです。また、状態を変更する前にインポート操作をプレビューできます。結局のところ、すべてはお客様とユースケースの複雑さによって異なります。

目的

前提条件

タスク1: Terraformで作成された既存のインフラストラクチャの確認

  1. terraform state listコマンドを実行して、Terraform構成ファイルによって管理されているOCIリソースを確認します。

    terraform state list
    module.network.data.oci_core_services.all_oci_services
    module.network.oci_core_internet_gateway.igw["igw"]
    module.network.oci_core_nat_gateway.ngw["ngw"]
    module.network.oci_core_route_table.route_table["rt_priv"]
    module.network.oci_core_route_table.route_table["rt_pub"]
    module.network.oci_core_security_list.sl["sl_priv"]
    module.network.oci_core_security_list.sl["sl_public"]
    module.network.oci_core_service_gateway.this["sgw"]
    module.network.oci_core_subnet.subnets["sn1_priv"]
    module.network.oci_core_subnet.subnets["sn1_pub"]
    module.network.oci_core_subnet.subnets["sn2_priv"]
    module.network.oci_core_subnet.subnets["sn3_priv"]
    module.network.oci_core_virtual_network.vcn["vcn1"]
    

    ご覧のとおり、VCN、サブネット、セキュリティ・リストおよびルート表があります。

  2. Terraform構成ファイルを次に示します。

    ~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -l
    total 120
    -rwxr-xr-x@ 1 fvass  staff    849 Jul 10  2023 main.tf
    drwxr-xr-x@ 3 fvass  staff     96 May 25  2023 modules
    -rwxr-xr-x@ 1 fvass  staff    387 May 25  2023 output.tf
    -rw-r--r--  1 fvass  staff    379 Apr  3 09:18 provider.auto.tfvars
    -rw-r--r--  1 fvass  staff  29040 Apr  3 11:00 terraform.tfstate
    -rw-r--r--  1 fvass  staff    182 Apr  3 11:00 terraform.tfstate.backup
    -rwxr-xr-x@ 1 fvass  staff   6007 Apr  3 10:59 terraform.tfvars
    -rwxr-xr-x@ 1 fvass  staff   2869 May 25  2023 variables.tf
    

タスク2: OCIコンソールを使用したOCI Compute VMの作成

タスク1で他のOCIリソースが作成されたリージョンと同じリージョンにOCI Compute VMを作成します。このチュートリアルでは、タスク1に存在するサブネットの1つで作成します(これらのサブネットのいずれかに存在する必要はありません)。作成後は、追加のタスクで必要になるため、コンピュートOracle Cloud Identifier (OCID)を取得します。

ノート:このVMは、現時点ではTerraformによって管理されていません。

タスク3: import_block.tfファイルの作成

Terraformコードがあるフォルダと同じフォルダに、import_block.tfという名前のファイルを作成します(別の名前を付けることができます)。

oci_core_instanceタイプを使用してコンピュート・リソースをインポートします。リソース名はdemo_inst_1になります。terraform planコマンドを実行すると、Terraformはこのファイルを読み取り、新しいリソースを既存の状態ファイルにインポートする必要があることを認識します。

タスク4: terraform planコマンドの実行

次のコマンドを実行しますこの引数generate-config-outは、タスク2で作成したコンピュート用のTerraform構成を含むファイルを生成します。

terraform plan --generate-config-out=compute.tf

出力は次のようになります:

Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.
╷
│ Warning: Config generation is experimental
│
│ Generating configuration during import is currently experimental, and the generated configuration format may change in future versions.
╵

─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Terraform has generated configuration and written it to compute.tf. Please review the configuration and edit it as necessary before adding it to version control.

次に、compute.tfファイルがあります。

~/workORCL/_MY_OCI_INFRA/oci-vcn> ls -ltr
total 144
-rwxr-xr-x@ 1 fvass  staff    387 May 25  2023 output.tf
drwxr-xr-x@ 3 fvass  staff     96 May 25  2023 modules
-rwxr-xr-x@ 1 fvass  staff   2869 May 25  2023 variables.tf
-rw-r--r--  1 fvass  staff    379 Apr  3 09:18 provider.auto.tfvars
-rwxr-xr-x@ 1 fvass  staff   6007 Apr  3 10:59 terraform.tfvars
-rw-r--r--  1 fvass  staff    182 Apr  3 11:00 terraform.tfstate.backup
-rw-r--r--  1 fvass  staff  29040 Apr  3 11:00 terraform.tfstate
-rwxr-xr-x@ 1 fvass  staff    855 Apr  3 11:12 main.tf
-rw-r--r--  1 fvass  staff    142 Apr  3 11:12 import_block.tf
-rw-r--r--  1 fvass  staff   4421 Apr  3 11:17 compute.tf

タスク5: terraform applyコマンドの実行

次のコマンドを実行して、コンピュートをTerraform状態ファイルに追加します。

terraform apply

出力は次のようになります:

Plan: 1 to import, 0 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.

ここで、構成を適用します。

タスク6: 状態ファイルの確認

terraform state listコマンドを実行して、oci_core_instance.demo_inst_1が存在することを確認します。

~/workORCL/_MY_OCI_INFRA/oci-vcn> terraform state list
oci_core_instance.demo_inst_1
module.network.data.oci_core_services.all_oci_services
module.network.oci_core_internet_gateway.igw["igw"]
module.network.oci_core_nat_gateway.ngw["ngw"]
module.network.oci_core_route_table.route_table["rt_priv"]
module.network.oci_core_route_table.route_table["rt_pub"]
module.network.oci_core_security_list.sl["sl_priv"]
module.network.oci_core_security_list.sl["sl_public"]
module.network.oci_core_service_gateway.this["sgw"]
module.network.oci_core_subnet.subnets["sn1_priv"]
module.network.oci_core_subnet.subnets["sn1_pub"]
module.network.oci_core_subnet.subnets["sn2_priv"]
module.network.oci_core_subnet.subnets["sn3_priv"]
module.network.oci_core_virtual_network.vcn["vcn1"]

タスク7: import_block.tfファイルの削除

この時点で、import_block.tfファイルを安全に削除できます。いずれにしても、Terraformでは無視されます。

タスク8: コンピュートでのテスト

コンピュート・シェイプを変更できます。compute.tfで、memory_in_gbsshape_configから変更し、terraform planを実行して変更を確認します。

出力は次のようになります:

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  ~ update in-place

Terraform will perform the following actions:

  # oci_core_instance.demo_inst_1 will be updated in-place
  ~ resource "oci_core_instance" "demo_inst_1" {
        id                  = "ocid1.instance.oc1.iad.anuwcljswe.........."
        # (20 unchanged attributes hidden)

      ~ shape_config {
          ~ memory_in_gbs                 = 16 -> 32
            # (8 unchanged attributes hidden)
        }

        # (7 unchanged blocks hidden)
    }

Plan: 0 to add, 1 to change, 0 to destroy.

承認

その他の学習リソース

docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。