可用性ドメインの参照

Oracle Cloud Infrastructure Terraformプロバイダを使用して、可用性ドメインを管理します。

ノート

このページの例では、コンパートメント変数var.compartment_ocidを使用しています。テナンシまたはルート・コンパートメントを指定するには、テナンシ変数var.tenancy_ocidを使用します。

アベイラビリティ・ドメインについては、次のパターンを避けてください:

// Get all availability domains for the region
data "oci_identity_availability_domains" "ads" {
  compartment_id = "${var.compartment_ocid}"
}
  
// Then either use it to get a single AD name based on the index:
resource "oci_core_instance" "nat" {
  availability_domain = "${lookup(data.oci_identity_availability_domains.ads.availability_domains[var.nat_instance_ad],"name")}"
  ...
}
  
// Or iterate through all the ADs:
resource "oci_core_subnet" "nat" {
  count = "${length(data.oci_identity_availability_domains.ads.availability_domains)}"
  availability_domain = "${lookup(data.oci_identity_availability_domains.ad.availability_domains[count.index], "name")}"
  ...
}

かわりに、構成内のリージョンの可用性ドメイン名を明示的にリストすることをお薦めします。これを行うには、次のように定義した変数を使用します:

variable "ad_list" {
  type = list
}

その後、次のように変数を使用できます:

// Index:
resource "oci_core_instance" "nat" {
  availability_domain = "${var.ad_list[var.nat_instance_ad_index]}"
  ...
}
  
// Or iterate through all the ADs:
resource "oci_core_subnet" "nat" {
  count = "${length(var.ad_list)}"
  availability_domain = "${var.ad_list[count.index]}"
  ...
}

その後、次に示すように、ご使用のテナントとリージョンの可用性ドメイン名を使用することで、ad_list変数を直接使用できます:

variable "ad_list" {
  type = list
  default = ["kIdk:PHX-AD-1","kIdk:PHX-AD-2","kIdk:PHX-AD-3"]
}

この方法を使用する利点は、可用性ドメインの使用状況を制御して、時間経過に伴った予期しない変更を防止できることです。ただし、構成がテナントおよびリージョン間で共有されるときには、このアプローチが問題になります。可用性ドメイン名はテナンシ固有かつリージョン固有であるためです。

かわりの方法としては、oci_identity_availability_domainsデータ・ソースを使用してad_list値を設定するのが便利です。これは、構成で行ってから、モジュールに渡します。これにより、ADのリストが効果的に一元化されるため、必要に応じて後で明示的なリストに簡単に切り替えることができます。(モジュール自体では、oci_identity_availability_domainsデータ・ソースを使用しないでください。)

data "oci_identity_availability_domains" "ads" {
  compartment_id = "${var.compartment_ocid}"
}
 
data "template_file" "ad_names" {
  count = "${length(data.oci_identity_availability_domains.ads.availability_domains)}"
  template = "${lookup(data.oci_identity_availability_domains.ads.availability_domains[count.index], "name")}"
}
  
module "ssm_network" {
  ad_list = "${data.template_file.ad_names.*.rendered}"
  ...
}

可用性ドメインが1つのリージョン

一部のOracle Cloud Infrastructureリージョンでは、1つの可用性ドメインがあります。oci_identity_availability_domainsなど、複数のデータ・ソースを使用する構成を記述する際、リージョンで必要な場合には、ドメインが1つであることを説明してください。

次の例では、1つの可用性ドメイン・リージョン内のフォルト・ドメインをリストするときに、oci_identity_availability_domainsデータ・ソースが使用されています。availability_domains索引は0にする必要があります。このリージョンでは、その他の索引値は無効です:

data "oci_identity_availability_domains" "ads" {
  compartment_id = "${var.compartment_ocid}"
}

data "oci_identity_fault_domains" "FaultDomains" {
    availability_domain = data.oci_identity_availability_domains.ads.availability_domains[0]["name"]
    compartment_id = "${var.compartment_ocid}"
}

OCI Terraformプロバイダのサポートされているリソースおよびデータ・ソースの完全なリファレンスには、使用方法、引数および属性の詳細が含まれます。完全なリファレンスは、docs.oracle.comおよびTerraformレジストリから入手できます。