Terraform工作区在不同的s3桶中的状态



我使用terraform在开发和生产环境中提供资源。这些环境依赖于两个不同的aws帐户。我所在的州是本地的,但我现在想把它推到s3。问题是,terraform将def和prod环境的状态存储在同一个s3存储桶中,是否可以将它们分开?如果没有,在不拆分我的地形代码库的情况下,有什么替代解决方案?

我有一个围绕terraform的bash包装器,并为每个帐户创建一个状态文件以分离关注点。我还将自动化分解为许多组件,以保持状态较小,这样性能就不会受到影响,并将状态下载和上传到bucket:

function set_backend () {
local STATE_PATH=$1
if [[ $BACKEND == "s3" ]]; then
cat << EOF > ./backend.tf
terraform {
backend "s3" {
bucket = "${TF_VAR_state_bucket}"
dynamodb_table = "${DYNAMODB_STATE_TABLE}"
key    = "terraform/$STATE_PATH/terraform.tfstate"
region = "$REGION"
encrypt = "true"
}
}
provider "aws" {
region  = "$REGION"
version = "1.51.0"
}
provider "aws" {
region  = "$DR_REGION"
version = "1.51.0"
alias = "dr"
}
provider "archive" { version = "1.1.0" }
provider "external" { version = "1.0.0" }
provider "local" { version = "1.1.0" }
provider "null" { version = "1.0.0" }
provider "random" { version = "2.0.0" }
provider "template" { version = "1.0.0" }
provider "tls" { version = "1.2.0" }
EOF
fi
}

Terragrunt是一个很好的工具,用于管理不同环境的地形状态文件,并将状态文件存储在不同的存储桶中,而不是使用地形工作区。

有用的链接,https://transcend.io/blog/why-we-use-terragrunt

https://blog.gruntwork.io/how-to-manage-terraform-state-28f5697e68fa

相关内容

  • 没有找到相关文章

最新更新