问题标签 [terraform-remote-state]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
terraform - 无法使用“terraform init -reconfigure”将 S3 后端中的 Terraform 远程状态转换为本地状态
我正在使用 Terraform v1.0.0 并使用 AWS S3 和 AWS DynamoDB 创建了一个远程后端,正如 Yevgeniy Brikman 在Terraform Up & Running中解释的那样:
- 我为 S3 存储桶和 DynamoDB 表编写了代码,并通过
terraform apply
- 我添加
terraform { backend "S3" {} }
到我的代码中 - 我创建了一个
backend.hcl
包含所有相关参数的文件 - 我通过调用将我的本地状态移动到 S3
terraform init -backend-config=backend.hcl
现在我想将远程状态转换回本地状态,这样我就可以安全地删除远程后端。Brikman 解释说,要做到这一点,必须删除backend
配置并调用terraform init
. 当我尝试这个时,我看到了这个:
我认为正确的方法是使用-reconfigure
乍一看似乎有效的方法:
但是,执行terraform plan
显示初始化没有成功:
取消设置后端的唯一方法似乎是通过terraform init -migrate-state
:
terraform init -reconfigure
尽管 Terraform 明确告诉我,是否无法通过转换状态?如果是这样,具体terraform init -reconfigure
做什么?
amazon-web-services - 远程后端的传输中加密,即 s3
我可以看到很多关于静态加密的问题,用于在 terraform 中使用远程后端存储状态文件,例如 s3,但想确认一下;terraform 在此过程中是否使用 ssh/tls 安全地传输/读取状态文件。
虽然我们可以使用 TLS 提供程序来实现这一点,但就像官方版本一样,因为我在文档中找不到任何有用的东西。
terraform - Terraform Remote StateFile 用于相同配置和 Terraform 设计的多个实例
我需要为我们的每个客户创建一组相同数量的实例。让我们假设我的客户是沃尔玛、苹果和 eBay。每个客户都有相同数量的实例,但配置(子网、磁盘数量和磁盘大小、操作系统映像)会发生变化。所以我为每个客户创建了一个变量文件并用它来启动实例。到目前为止,一切都按预期工作。我可以为每个客户使用他们自己的配置启动实例,还可以根据需要修改实例。
现在,我正在尝试将状态文件从本地移动到远程。在backend.tf
我如何采取key
动态?经过调查backed.tf
,不能接受任何插值(变量),因为它的加载时间远远早于 Terraform 的核心可以初始化。
- 我该如何解决这个问题?我尝试了以下方法,但
init
每次切换客户时都必须运行。
terraform init --backend-config "key=apple.tfstate"
我使用单独的变量文件创建实例的方法是否存在任何基本问题?
我是否需要为所有客户使用单一状态文件?如果是这样,我有 40 多个客户,将所有客户放在一个文件中可能有风险/庞大/缓慢,对吗?
我没有使用 Terraform Enterprise 或 Terraform Cloud。请让我知道如何进行。谢谢!
我使用以下命令应用 terraform 更改
文件夹结构
amazon-web-services - 在 S3 中存储 terraform 远程状态文件动态位置
基本上,我有多个运行环境,所以当我尝试上传 terraform .tfstate 状态文件的硬代码密钥地址时,它可以完美运行,但我想根据环境变量或条件存储我的 .tfstate 文件,以便区分我的开发服务器或产品服务器
我的环境变量可以是:dev、stage 或 prod
下面的代码只是一个示例,所以了解我想要做什么
terraform - Terraform 远程状态 - 状态文件位置
我将 Terraform 与 AWS 和 S3/Dynamo 一起用于我们所有模块的远程状态。这很好用而且很棒。
但是您要在哪里保存模块的状态文件,在哪里创建 S3 存储桶和 DynamoDB(用于远程状态)?
这听起来像是一个“鸡还是蛋”的问题。我是否应该将状态文件上传到 GIT 存储库,即使我不应该将它存储在那里?
通常这个状态不再被触及,但是如果所有开发者都可以访问这个状态会更干净,不是吗?你的最佳实践是什么?
azure - 使用 Azure 的 Terraform 云运行触发器
我在访问我的数据“ terrafrom_remote_state
”对象时遇到问题。所以我正在关注 hashcorp 站点,以使用带有运行触发器的 terraform 云部署 azure 资源。触发器正在工作,正在运行第二个工作区的计划,但它无法访问我通过输出传递的数据。
我已经为要共享的第一个工作区设置了“状态”,并将第二个工作区上的运行触发器设置为由第一个工作区触发。这里没有问题。
我试图关注 hasicorp 网站上的内容,但它是针对 aws 的,也许对于天蓝色我错过了一些东西。我将发布我的输出,然后发布第二个工作区的一些代码。
输出:我在状态文件中查看过并且看起来不错。
第二工作区
错误是
错误:不支持的属性│ │ 在 main.tf 第 26 行,资源“azurerm_public_ip”“pip1”中:│ 26:location = data.terraform_remote_state.network.outputs.location │<br />├──────── ──────── │ │ data.terraform_remote_state.network.outputs 是没有属性的对象 │ │ 这个对象没有名为“位置”的属性。
我无法访问 data.terraform_remote_state.network.outputs
amazon-web-services - 如何在加密的 s3 存储桶上设置 terraform 状态
在 Austin Davis 的这个出色回答之后,我已经为 terraform state 设置了一个 s3 后端。我按照 Matt Lavin 的建议添加了加密存储桶的策略。
不幸的是,桶策略意味着terraform state list
现在抛出
加载失败状态:AccessDenied:访问被拒绝状态码:403,请求ID:XXXXXXXXXXXXXXXX,主机ID:XXXX...
我怀疑我错过了在 terraform 端传递或配置某些东西来加密通信或额外的策略条目以能够读取加密状态。
这是添加到 tf-state 存储桶的策略:
terraform - CDK/Cloudformation 共享状态
对 CDK/Cloudformation 来说非常新,刚从 Terraform 迁移过来,想知道 CDK/Cloudformation 是否有类似于 Terraform 的远程状态的东西?或者不同团队成员可以通过其他方式更新相同的 AWS 资源,而无需销毁/重新创建所有内容。