状態ファイル用のオブジェクト・ストレージの使用
Terraform状態ファイルをOCIオブジェクト・ストレージに格納します。
OCIネイティブ・バックエンドの使用
データ・ソース構成(OCIバックエンド)を参照してください。
S3互換バックエンドの使用方法(非推奨)
S3互換バックエンドを構成するには、次の項のステップを実行します。
タスク1: OCIへのアクセスの設定
タスク2: 認証の構成
タスク3: TerraformでのS3バックエンドの構成
terraform_remote_state
のバックエンド構成を使用します。詳細は、「リモート状態へのアクセス」を参照してください。HTTPバックエンドの使用
HTTPバックエンドには各状態ファイルに対して事前認証済リクエスト(PAR)が必要であるため、オブジェクト・ストレージに状態ファイルを格納するための推奨方法はOCIネイティブ・バックエンドの使用です。
HTTPバックエンド・タイプでは、RESTクライアントを使用して状態を格納し、HTTP
GET
、POST
およびDELETE
メソッドを使用して状態のフェッチ、更新およびパージを行います。
HTTPバックエンドを構成するには、次の各項のステップを実行します。
タスク1: 既存の状態のアップロード
HTTP
PUT
リクエストを作成します。
curl -X PUT -H "Content-Type: text/plain" --data-binary "@path/to/local/tfstate" http://<prefix>/<my-access-uri>
タスク2: 読取り/書込み事前認証済リクエストの作成
読取り/書込み権限を指定するオブジェクト・ストレージ内の事前認証済リクエスト(PAR)を使用すると、資格証明を指定せずにTerraform状態ファイルにアクセスできます。
コンソール、CLIまたはAPIを使用してPARを作成する手順は、オブジェクト・ストレージでの事前認証済リクエストの作成を参照してください。
タスク3: TerraformでのHTTPバックエンドの構成
terraform_remote_state
のバックエンド構成を使用します。詳細は、「リモート状態へのアクセス」を参照してください。リモート状態へのアクセス
terraform_remote_stateを使用して、あるTerraform構成内のオブジェクトのプロパティに別の構成からアクセスします。
たとえば、ある構成を使用してコンパートメントを定義し、別の構成を使用してVCNを定義できます。リソースが同じTerraform構成フォルダにある場合は、module.iam_compartment_SANDBOX.compartment_id
などを使用して、VCN構成からコンパートメントのOCIDを参照できます。
ただし、定義で状態ファイルが共有されておらず、次のようなファイル構造であるとします:
.
├── governance
│ ├── compartments.tf
│ ├── outputs.tf
│ ├── remote-backend.tf
│ └── variables.tf
├── networking
│ ├── outputs.tf
│ ├── remote-backend.tf
│ ├── remote-state-data_governance.tf
│ ├── variables.tf
│ └── vcns.tf
└── terraform-states_bucket_credentials
この例では:
- Both
governance
andnetworking
configurations store their respective state files on an OCI Object Storage bucket using theremote-backend.tf
andterraform-states_bucket_credentials
files. compartments.tf
ファイルは、Terraformレジストリのiam-compartment
モジュールを使用して、次のようにルート・レベルでコンパートメントを作成します:module "iam_compartment_SANDBOX" { source = "oracle-terraform-modules/iam/oci//modules/iam-compartment" version = "2.0.0" tenancy_ocid = var.tenancy_ocid compartment_id = var.tenancy_ocid # define the parent compartment. Creation at tenancy root if omitted compartment_name = "SANDBOX" compartment_description = "Test and evaluate OCI features here" compartment_create = true # if false, a data source with a matching name is created instead enable_delete = true # if false, on `terraform destroy`, compartment is deleted from the terraform state but not from oci }
出力の定義
terraform_remote_state
データ・ソースは、リモート・バックエンドを含む最新の状態ファイルを使用して、別のTerraform構成の出力値にアクセスできます。networking
構成でgovernance
構成にアクセスし、Terraformリソースのプロパティを動的に取得するには、governance
Terraform構成の出力を定義する必要があります。出力が定義されていないと、その構成の外から値を使用することはできません。
governance/outputs.tf
ファイルは、次のようになります:
output "iam_compartment_SANDBOX" {
description = "compartment ocid, parent ocid, name, description"
value = {
id = module.iam_compartment_SANDBOX.compartment_id
parent_id = module.iam_compartment_SANDBOX.parent_compartment_id
name = module.iam_compartment_SANDBOX.compartment_name
description = module.iam_compartment_SANDBOX.compartment_description
}
}
リモート状態の参照
この例では、Terraformレジストリのvcn
モジュールを使用して、新しいVCNを定義しています。networking
構成は、governance
構成を参照して、VCNのコンパートメントのOCIDを定義します:
module "vcn_hub1iad" {
source = "oracle-terraform-modules/vcn/oci"
version = "2.2.0"
# general oci parameters
compartment_id = data.terraform_remote_state.governance.outputs.iam_compartment_SANDBOX["id"]
tags = var.tags
# vcn parameters
create_drg = false
internet_gateway_enabled = true
lockdown_default_seclist = true
nat_gateway_enabled = false
service_gateway_enabled = false
vcn_cidr = "10.0.0.0/16"
vcn_dns_label = "hub1iad"
vcn_name = "hub1"
}
ただし、compartment_id = data.terraform_remote_state.governance.outputs.iam_compartment_SANDBOX["id"]
の行が正しく解釈されるには、data.terraform_remote_state
オブジェクトを定義する必要があります。
リモート状態のデータ・ソースの定義
次のterraform_remote_state
データ・ソースがnetworking
構成に追加された後、networking
フォルダ内の構成からgovernance
Terraformの出力にアクセスできます:
data "terraform_remote_state" "governance" {
backend = "oci"
config = {
bucket = "terraform-states"
key = "governance/terraform.tfstate"
region = "us-phoenix-1"
endpoint = "https://acme.compat.objectstorage.us-phoenix-1.oraclecloud.com"
shared_credentials_file = "../terraform-states_bucket_credentials"
skip_region_validation = true
skip_credentials_validation = true
skip_metadata_api_check = true
force_path_style = true
}
}
remote-state-data_governance.tf
などの別のファイルにリモート状態のデータ・ソースを定義する場合は、必要に応じてファイルをコピーして貼り付けることができます。その後、新しい構成のそれぞれが、同じ方法でコンパートメントを参照できます。