2017-08-14 8 views
0

Mon équipe dépend fortement de l'état à distance S3 à partir de Terraform. Nous utilisons la fonction -backend-config de la CLI pour spécifier la configuration S3 lors de l'initialisation des projets, de sorte que notre code terraform réelle ressemble:Terraform terraform_remote_state Configuration partielle

terraform { 
    backend "s3" {} 
} 

Les travaux ci-dessus une grande aussi longtemps que tous les attributs S3 sont spécifiés sur la CLI avec -backend-config .

Nous aimerions utiliser une stratégie similaire pour référencer ces états ailleurs dans nos configurations. Puisque les paramètres du backend sont dynamiques et spécifiés sur la CLI, nous cherchons à faire de même.

data "terraform_remote_state" "dns" { 
    backend = "s3" 
    config { 
    key = "configurations/production/dns/terraform.tfstate" 
    } 
} 

Dans l'exemple ci-dessus, nous avons omis les paramètres region et bucket nécessaires, ce qui bien sûr entraîne un plan/apply à l'échec (avec not a valid region:).

Existe-t-il une méthode par laquelle nous pouvons spécifier la région et le compartiment pour les références d'état distant à partir de l'interface de ligne de commande au lieu de les coder en dur?

+0

Comment vous spécifiez le S3 attributs pour la configuration de back-end? Appelez-vous Terraform via un script d'aide? – ydaetskcoR

Répondre

1

Le bloc backend est plutôt spécial car il est traité si tôt dans le flux de travail de Terraform et n'a donc pas accès aux fonctionnalités Terraform normales telles que les variables. C'est pourquoi il a son propre mécanisme spécial pour le configurer. D'autre part, la source de données terraform_remote_state est simplement une source de données régulière et donc toute stratégie d'interpolation normale peut être utilisée avec elle. Pour passer les paramètres de la CLI, par exemple, vous pouvez utiliser des variables:

variable "dns_state_region" { 
} 

variable "dns_state_key" { 
} 

data "terraform_remote_state" "dns" { 
    backend = "s3" 
    config { 
    region = "${var.dns_state_region}" 
    key = "${var.dns_state_key}" 
    } 
} 

Vous pouvez ensuite les transmettre à la commande terraform plan:

$ terraform plan \ 
    -var="dns_state_region=us-west-1" \ 
    -var="dns_state_key=configurations/production/dns/terraform.tfstate"