我使用terraform在开发和生产环境中配置资源。这些环境使用两个不同的AWS帐户。我在本地拥有州,但是现在我想将其推向s3。问题是,terraform将def和prod envs的状态存储在同一s3存储桶中,是否可以将它们分开?如果没有,还有什么其他解决方案可以不分割我的terraform代码库?
答案 0 :(得分:0)
我在terraform周围有一个bash包装器,并为每个帐户创建一个状态文件以分离关注点。我还将自动化分为许多组件,以保持状态很小,以免影响性能,并将状态下载并上传到存储桶中:
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
}
答案 1 :(得分:0)
Terragrunt是一个很棒的工具,可用于管理不同环境的terraform状态文件并将状态文件存储在不同的存储桶中,而不是使用terraform工作区。
有用的链接, https://transcend.io/blog/why-we-use-terragrunt
https://blog.gruntwork.io/how-to-manage-terraform-state-28f5697e68fa