Mah*_*oni 6 amazon-s3 terraform devops
我下载terraform 0.9,并试图跟随迁移指南从移动remote-state到backend
但它似乎没有用.我换了:
data "terraform_remote_state" "state" {
backend = "s3"
config {
bucket = "terraform-state-${var.environment}"
key = "network/terraform.tfstate"
region = "${var.aws_region}"
}
}
Run Code Online (Sandbox Code Playgroud)
同
terraform {
backend "s3" {
bucket = "terraform-backend"
key = "network/terraform.tfstate"
region = "us-west-2"
}
}
Run Code Online (Sandbox Code Playgroud)
但当我在我的terraform一个环境文件夹中运行init 时,我得到:
弃用警告:此环境配置为使用旧版远程状态.Terraform 0.9中的远程状态发生了显着变化.请更新您的远程状态配置以使用新的"后端"设置.目前,Terraform将继续使用您现有的设置.Terraform 0.11中将删除旧版远程状态支持.
您可以在此处找到升级指南:
我也不得不放弃变量插值,因为这是不允许的.这是否意味着一个S3 Bucket用于多个环境?我错过了什么?
在您还必须运行以完成迁移之后,每个升级指南(https://www.terraform.io/docs/backends/legacy-0-8.html)将在s3更新远程状态文件.terraform initterraform plan
至于配置多个环境,我们最终使用包装器shell脚本,为其传入参数${application_name}/${env}/${project}并使用部分配置.
对于像这样的项目结构:
??? projects
? ??? application-name
? ??? dev
? ? ??? bastion
? ? ??? db
? ? ??? vpc
? ? ??? web-cluster
? ??? prod
? ? ??? bastion
? ? ??? db
? ? ??? vpc
? ? ??? web-cluster
? ??? backend.config
??? run-tf.sh
Run Code Online (Sandbox Code Playgroud)
对于每个application_name/env/component =文件夹(即dev/vpc),我们添加了一个占位符后端配置文件,如下所示
backend.tf:
terraform {
backend "s3" {
}
}
Run Code Online (Sandbox Code Playgroud)
每个组件的文件夹内容如下所示:
? ??? prod
? ? ??? vpc
? ? ? ??? backend.tf
? ? ? ??? main.tf
? ? ? ??? outputs.tf
? ? ? ??? variables.tf
Run Code Online (Sandbox Code Playgroud)
在"application_name /"或"application_name/env"级别,我们添加了一个backend.config文件,如下所示:
bucket = "BUCKET_NAME"
region = "region_name"
lock = true
lock_table = "lock_table_name"
encrypt = true
Run Code Online (Sandbox Code Playgroud)
我们的包装shell脚本预计参数application-name,environment,component,和实际terraform cmd运行.
run-tf.sh脚本的内容(简化):
#!/bin/bash
application=$1
envir=$2
component=$3
cmd=$4
tf_backend_config="root_path/$application/$envir/$component/backend.config"
terraform init -backend=true -backend-config="$tf_backend_config" -backend-config="key=tfstate/${application}/${envir}/${component}.json"
terraform get
terraform $cmd
Run Code Online (Sandbox Code Playgroud)
以下是典型的run-tf.sh调用的方式:
$ run-tf.sh application_name dev vpc plan
$ run-tf.sh application_name prod bastion apply
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3037 次 |
| 最近记录: |