Référencement de domaines de disponibilité

Utilisez le fournisseur Oracle Cloud Infrastructure Terraform pour gérer les domaines de disponibilité.

Concernant les domaines de disponibilité, nous déconseillons d'utiliser un modèle commun, comme indiqué ici :

// Get all availability domains for the region
data "oci_identity_availability_domains" "ads" {
  compartment_id = "${var.tenancy_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")}"
  ...
}

Il est alors recommandé de répertorier explicitement les noms de domaine de disponibilité pour les régions de votre configuration. Pour ce faire, utilisez une variable que vous avez définie comme suit :

variable "ad_list" {
  type = list
}

Vous pouvez alors utiliser la variable comme indiqué ici :

// 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]}"
  ...
}

Vous pouvez ensuite définir la variable ad_list directement à l'aide des noms de domaine de disponibilité pour votre locataire et votre région, comme indiqué ici :

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

Cette méthode présente l'avantage de pouvoir contrôler l'utilisation de votre domaine de disponibilité et d'éviter toute modification inattendue dans le temps. Cependant, cette approche pose problème lorsque les configurations sont partagées entre des locations et des régions, car les noms de domaine de disponibilité sont propres à une location et à une région.

Une alternative pratique consiste à définir la valeur ad_list à l'aide de la source de données oci_identity_availability_domains. Effectuez cette opération dans la configuration, puis transmettez les valeurs dans les modules. Cela centralise la liste des domaines de disponibilité, ce qui facilite le basculement vers une liste explicite plus tard si nécessaire : les modules eux-mêmes ne doivent pas utiliser la source de données oci_identity_availability_domains.

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

Régions avec un seul domaine de disponibilité

Certaines régions Oracle Cloud Infrastructure comportent un seul domaine de disponibilité. Lorsque vous écrivez des configurations utilisant plusieurs sources de données, comme oci_identity_availability_domains, veillez à prendre en compte un seul domaine si votre région le requiert.

L'exemple suivant utilise la source de données oci_identity_availability_domains pour répertorier les domaines de pannes dans une région à domaine de disponibilité unique. L'index availability_domains doit être 0. Les autres valeurs d'index ne sont pas valides dans cette région :

data "oci_identity_availability_domains" "AvailabilityDomains" {
    compartment_id = var.tenancy_ocid
}

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

La référence complète des ressources et sources de données prises en charge par le fournisseur OCI Terraform contient les détails relatifs à la syntaxe, aux arguments et aux attributs. La référence complète est disponible à l'adresse docs.oracle.com et dans le registre Terraform.