Uso dello storage degli oggetti per i file di stato
Memorizza i file di stato Terraform nello storage degli oggetti OCI.
Dei tipi backend descritti in questa pagina, si consiglia di utilizzare un uso del backend nativo OCI.
Uso del backend nativo OCI
Eseguire l'upgrade a Terraform versione v1.12.0 o successiva per utilizzare il backend nativo OCI.
Utilizzo di un backend compatibile con S3 (obsoleto)
Il metodo backend compatibile con S3 non è più valido. Utilizzare questo metodo solo se non si è in grado di eseguire l'upgrade a Terraform versione v1.12.0 o successiva.
Per configurare il backend compatibile con S3, attenersi alla procedura descritta nelle sezioni riportate di seguito.
Task 1: Impostazione dell'accesso a OCI
Task 2: Configura autenticazione
Task 3: configurare il backend S3 in Terraform
terraform_remote_state
. Per maggiori informazioni, vedere Accessing Remote States.Uso di un backend HTTP
Poiché il backend HTTP richiede una richiesta preautenticata (PAR, Pre-Authenticated Request) per ciascun file di stato, il metodo preferito per memorizzare i file di stato nello storage degli oggetti è Uso del backend nativo OCI.
Utilizzare il tipo di backend HTTP per memorizzare lo stato utilizzando un client REST e per recuperare, aggiornare e rimuovere lo stato utilizzando i metodi HTTP
GET
, POST
e DELETE
.
Per configurare il backend HTTP, attenersi alla procedura descritta nelle sezioni seguenti.
Task 1: Carica stato esistente
HTTP
PUT
all'URL dell'area di memorizzazione degli oggetti:
curl -X PUT -H "Content-Type: text/plain" --data-binary "@path/to/local/tfstate" http://<prefix>/<my-access-uri>
Task 2: Creare una richiesta preautenticata di lettura/scrittura
Nel caso di una richiesta preautenticata (PAR, Pre-authenticated Request) nello storage degli oggetti che specifica le autorizzazioni di lettura/scrittura, è possibile accedere al file di stato Terraform senza fornire le credenziali.
Per istruzioni su come creare una richiesta PAR utilizzando la console, l'interfaccia CLI o l'interfaccia API, vedere Creazione di una richiesta preautenticata nello storage degli oggetti.
Task 3: configurare il backend HTTP in Terraform
terraform_remote_state
. Per maggiori informazioni, vedere Accessing Remote States.Accesso agli stati remoti
Utilizzare terraform_remote_state per accedere alle proprietà degli oggetti in una configurazione Terraform da un'altra configurazione.
Ad esempio, è possibile utilizzare una configurazione per definire i compartimenti e un'altra per definire le reti VCN. Se le risorse si trovano nella stessa cartella di configurazione Terraform, è possibile fare riferimento a un OCID compartimento dalla configurazione della VCN utilizzando un elemento quale: module.iam_compartment_SANDBOX.compartment_id
.
Ma supponiamo che le nostre definizioni non condividano un file di stato e abbiamo una struttura di file simile alla seguente:
.
├── 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
In questo esempio:
- Le configurazioni
governance
enetworking
memorizzano i rispettivi file di stato in un bucket di storage degli oggetti OCI utilizzando i fileremote-backend.tf
eterraform-states_bucket_credentials
. - Il file
compartments.tf
crea un compartimento a livello radice utilizzando il moduloiam-compartment
del registro Terraform come indicato di seguito.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 }
Definizione degli output
L'origine dati terraform_remote_state
può accedere ai valori di output da un'altra configurazione Terraform utilizzando il file di stato più recente con un backend remoto. Affinché la configurazione networking
possa accedere alla configurazione governance
e recuperare dinamicamente le proprietà delle risorse Terraform, è necessario definire gli output per la configurazione Terraform governance
. Senza un output definito, i valori non possono essere utilizzati dall'esterno della relativa configurazione.
Il file governance/outputs.tf
ha un aspetto simile al seguente:
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
}
}
Riferimento a uno stato remoto
In questo esempio, viene utilizzato il modulo vcn
del registro Terraform per definire una nuova VCN. La configurazione networking
fa riferimento alla configurazione governance
per definire l'OCID del compartimento della VCN:
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"
}
Tuttavia, affinché la riga compartment_id = data.terraform_remote_state.governance.outputs.iam_compartment_SANDBOX["id"]
venga interpretata correttamente, è necessario definire un oggetto data.terraform_remote_state
.
Definizione dell'origine dati dello stato remoto
Dopo aver aggiunto la seguente origine dati terraform_remote_state
alla configurazione networking
, è possibile accedere agli output Terraform governance
dalle configurazioni all'interno della cartella networking
:
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
}
}
Se si definisce l'origine dati dello stato remoto in un file separato, ad esempio remote-state-data_governance.tf
, è possibile copiare e incollare il file in base alle esigenze. Ogni nuova configurazione può quindi fare riferimento al compartimento nello stesso modo.