複数のリージョンのターゲット指定
Oracle Cloud Infrastructure Terraformプロバイダを使用して、複数のリージョンにリソースを作成します。
単一のTerraform構成を使用して、複数のリージョンにOracle Cloud Infrastructure (OCI)リソースを作成します。
各リージョンのプロバイダの作成
Terraform構成には単一のOCI Terraformプロバイダ・ブロックのみを含めることができますが、複数のリージョンに適用するには、複数のプロバイダ・ブロックを作成する必要があります。
一般的なOCI Terraformプロバイダ・ブロックは次のようになります:
provider "oci" {
region = var.region
tenancy_ocid = var.tenancy_ocid
user_ocid = var.user_ocid
fingerprint = var.fingerprint
private_key_path = var.private_key_path
}すべてのパラメータは変数を使用して設定する必要があります。
単一のTerraform構成内で複数のリージョンを使用する場合は、複数のプロバイダが必要です。各プロバイダに別名を指定する必要があります。たとえば:
provider "oci" {
alias = "home"
region = var.region
tenancy_ocid = var.tenancy_ocid
user_ocid = var.user_ocid
fingerprint = var.fingerprint
private_key_path = var.private_key_path
}
provider "oci" {
alias = "region2"
region = var.region2
tenancy_ocid = var.tenancy_ocid
user_ocid = var.user_ocid
fingerprint = var.fingerprint
private_key_path = var.private_key_path
}単一のTerraform構成内で複数のリージョンを使用する場合は、複数のプロバイダが必要です。各プロバイダに別名を指定する必要があります。たとえば:
provider "oci" {
alias = "home"
region = var.region
tenancy_ocid = var.tenancy_ocid
user_ocid = var.user_ocid
fingerprint = var.fingerprint
private_key_path = var.private_key_path
}
provider "oci" {
alias = "region2"
region = var.region2
tenancy_ocid = var.tenancy_ocid
user_ocid = var.user_ocid
fingerprint = var.fingerprint
private_key_path = var.private_key_path
}Oracle Cloud Infrastructureにサインアップすると、Oracleによって、1つのリージョン(ホーム・リージョン)のテナンシが作成されます。ホーム・リージョンには特別なプロパティがあります。たとえば、IAMリソースはホーム・リージョンにのみ作成できます。そのため、homeなどの適切な別名でそのリージョンを指定する必要があります。ユーザーが必要なリージョンに構成を簡単にマップできるように、他のリージョンには単純な別名(region2など)を使用します。
特定のリージョン(us-phoenix-1、us-ashburn-1など)は、
regionまたはaliasフィールドにハードコードされません。ホーム・リージョンの検索
複数のOCIリージョンにデプロイする場合は、ホーム・リージョンを構成変数として明示的に渡さなくても済むように、ホーム・リージョンを動的に検索できます。
ある一般的なユースケースでは、コンパートメントも作成されるTerraform構成を使用して、特定のリージョンにリソースをプロビジョニングする必要があります。コンパートメントはホーム・リージョンに作成する必要があるため、次のようなコードを使用すると、ホーム・リージョンが自動的に検索されます:
provider oci {}
provider oci {
alias = "home" region = lookup(local.region_map, data.oci_identity_tenancy.tenancy.home_region_key)
}
variable tenancy_id {}
data oci_identity_regions regions {}
data oci_identity_tenancy tenancy {
tenancy_id = var.tenancy_id
}
locals {
region_map = { for r in data.oci_identity_regions.regions.regions : r.key => r.name }
}
output home_region {
value = lookup(local.region_map, data.oci_identity_tenancy.tenancy.home_region_key)
}
リソースのプロビジョニング
リージョンにリソースをプロビジョニングするには、リソースに別名のプロバイダ名を指定します。
たとえば:
resource "oci_core_instance" "test_instance" {
provider = oci.home
...
}
モジュールと複数のリージョン
通常、モジュールは単一のリージョンのみを使用します。追加のリージョンが必要な場合は、別のモジュールを使用する必要があります。
構成に複数のプロバイダが含まれている場合、次のフォーマットを使用して、モジュールで使用するプロバイダを指定する必要があります:
module "compartments" {
source = "./compartments"
providers = {
oci = "oci.home"
}
}