ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
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を使用してVCNを作成し、このVCNを管理する状態ファイルとTerraform構成ファイルを作成します。
-
OCIテナンシに新しいリソース(コンピュート)を手動で追加します。
すでにあるTerraform構成および状態ファイルを使用して新しく追加したコンピュートを管理する場合は、Terraformインポート・コマンドを使用できますが、それに従うステップが他にもあり、Terraform構成ファイルを更新する必要があります。
Terraform v1.5.0
以上では、インポート・ブロックがサポートされます。このアプローチでは、既存のTerraformコードは変更されません。既存のTerraform構成ファイルに統合することを選択できますが、これは必須ではありません。目的は、OCIリソースをTerraformで管理されていないTerraform状態ファイルにインポートすることです。
重要な側面の1つは、インポート・ブロックがCI/CDパイプラインと連携することです。また、状態を変更する前にインポート操作をプレビューできます。結局のところ、すべてはお客様とユースケースの複雑さによって異なります。
目的
- リソースを手動で(OCI Compute Virtual Machine)作成し、既存のTerraform状態ファイルにインポートして、Terraformでさらに管理します。
前提条件
-
Terraform
v1.5.0
以上。 -
Terraformによって作成および管理されるインフラストラクチャ環境。このチュートリアルでは、いくつかのサブネット、セキュリティ・リスト、ルート表などを含むVCNがあります。
タスク1: Terraformで作成された既存のインフラストラクチャの確認
-
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、サブネット、セキュリティ・リストおよびルート表があります。
-
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
という名前のファイルを作成します(別の名前を付けることができます)。
-
import_block.tf
.import { to = oci_core_instance.demo_inst_1 id = "ocid1.instance.oc1.iad.anuwcljswe6j4fqcqxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
- id:タスク2で作成したコンピュートOCID。
- to:リソースが状態ファイルに持つインスタンス・アドレス。
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_gbs
をshape_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.
関連リンク
承認
- 作成者 - Francisc Vass
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Import Oracle Cloud Infrastructure Resources into a Terraform State File
F96415-01
April 2024