gpt4 book ai didi

amazon-web-services - 如何启动一个新的 Terraform 项目并将 s3 设置为后端

转载 作者:行者123 更新时间:2023-12-04 04:24:17 24 4
gpt4 key购买 nike

过去几个月我一直在研究 Terraform。阅读这个主题,您会自动点击为您的状态文件配置 S3 后端等项目,而不是在本地使用该文件。

但是当您希望从一开始就将 terraform.tfstate 文件保存在 s3 存储桶中时,我找不到启动新 terraform 项目的好方法。

我遇到的关于这个主题的所有文档都在谈论创建 S3 存储桶、创建 DymanoDB 表、使用配置的 S3 后端设置执行新的初始化。但是所有这些步骤都依赖于已经存在可用的本地 terraform.tfstate 文件这一事实。

当您想要在没有可用的 tfstate 文件的情况下开始一个新项目时如何工作?

我为什么这么努力。

为了开始使用我的 env-t 项目,我首先运行这个系统命令来设置所有正确的 s3 后端设置。 (我采用了这种结构,所以我可以轻松地在不同的环境之间切换,这些环境都需要应用相同的 TF 代码。变化是通过使用 var 文件完成的。)

文件 set_env_env-t.sh

#!/bin/sh
export TF_VAR_CMDLINE_environment=env-t
export TF_VAR_CMDLINE_tf_state_bucket=tfstate-files-env-t
export TF_VAR_CMDLINE_tf_state_table=tfstate-locks-env-t
export TF_VAR_CMDLINE_region=eu-west10001

export AWS_PROFILE=$TF_VAR_CMDLINE_environment

/tmp/terraform init -backend-config "bucket=$TF_VAR_CMDLINE_tf_state_bucket" -backend-config "dynamodb_table=$TF_VAR_CMDLINE_tf_state_table" -backend-config "region=$TF_VAR_CMDLINE_region" -backend-config "key=$TF_VAR_CMDLINE_environment/terraform.tfstate"

然后在我的 main.tf 中使用这段代码,所以之前设置的后端配置是也可在 TF 脚本中使用。

variable "CMDLINE_environment"                   {}
variable "CMDLINE_tf_state_bucket" {}
variable "CMDLINE_tf_state_table" {}
variable "CMDLINE_region" {}

terraform {
backend "s3" {
}
}

data "terraform_remote_state" "state" {
backend = "s3"
config = {
profile = var.CMDLINE_environment
bucket = var.CMDLINE_tf_state_bucket
dynamodb_table = var.CMDLINE_tf_state_table
region = var.CMDLINE_region
key = "${var.CMDLINE_environment}/terraform.tfstate"
}
}

设置 S3 后端一切正常。

. ./set_env_env-t.sh

但是一旦我运行这个计划命令,它就会退出并出现没有 tfstate 的错误在 S3 后端可用 没错,这是我的第一次运行......

terraform plan -var-file=env-t/vars.tfvars

错误:无法找到远程状态

在 main.tf 第 53 行,数据“terraform_remote_state”“状态”中: 53:数据“terraform_remote_state”“状态”{

在给定后端中找不到给定工作区的存储状态。

我现在唯一的解决方法是首先使用本地 terraform.tfstate 文件配置所有的东西要求。对于 S3 后端。做一个新的 init 然后 terraform 会检测到本地状态文件并提供将其移动到 S3 存储桶的选项。

是否有更好/更简单的解决方法?

最佳答案

您只需提供适当的凭据即可:

terraform {
backend "s3" {
bucket = "mybucket"
key = "path/to/my/key"
region = "us-east-1"
}
}

要将状态文件存储在 S3 中,您不需要 data.terraform_remote_state 源。

关于amazon-web-services - 如何启动一个新的 Terraform 项目并将 s3 设置为后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58199358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com