115
Aug. 18, 2024, 12:24 p.m.
Создание нескольких окружений для разработки Terraform
Задача: разделить инфраструктуру на несколько сред
Для достижения результата потребуется изменить и написать скрипт, который будет формировать конфигурации.
Исходно имеем такой код:
terraform {
backend "s3" {
bucket = "terraform"
key = "prod/myproject/aws_sg/terraform.tfstate"
region = "eu-central-1"
}
}
provider "aws" {
region = "eu-central-1"
}
data "terraform_remote_state" "vpc" {
backend = "s3"
config = {
bucket = "terraform"
key = "prod/myproject/aws_vpc/terraform.tfstate"
region = "eu-central-1"
}
}
Сделаем так чтобы переменная среды TF_VAR_ENVIRONMENT=<env>
подставлялась в конфигурацию и определяла местонахождение remote state
.
terraform {
backend "s3" {}
}
variable "ENVIRONMENT" {
type = string
default = "develop"
}
provider "aws" {
region = "eu-central-1"
}
data "terraform_remote_state" "vpc" {
backend = "s3"
config = {
bucket = "terraform"
key = "${var.ENVIRONMENT}/myproject/aws_vpc/terraform.tfstate"
region = "eu-central-1"
}
}
Важно чтобы ваши модули или код умели тоже принимать var.ENVIRONMENT
так как некоторые ресурсы, даже при хранении в разных remote state
, могут конфликтовать или затирать друг друга
Теперь чтобы не делать всё руками добавим скрипт config.sh
#! /bin/bash
cat > backend-config.tfvars <<- EOM
bucket = "terraform"
key = "${TF_VAR_ENVIRONMENT}/myproject/aws_sg/terraform.tfstate"
region = "eu-central-1"
EOM
terraform init -backend-config=backend-config.tfvars --reconfigure
Теперь при выполнении backend для терраформа будет генерироваться автоматически.