不同s3存储桶中的Terraform工作区状态?

时间:2018-11-27 17:09:21

标签: terraform terraform-provider-aws

我使用terraform在开发和生产环境中配置资源。这些环境使用两个不同的AWS帐户。我在本地拥有州,但是现在我想将其推向s3。问题是,terraform将def和prod envs的状态存储在同一s3存储桶中,是否可以将它们分开?如果没有,还有什么其他解决方案可以不分割我的terraform代码库?

2 个答案:

答案 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