複数のリージョンのターゲット指定

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"
  }
}