问题标签 [terragrunt]

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.

0 投票
1 回答
1121 浏览

heroku - Terragrunt 错误说 terraform 不在 %PATH% 中,即使它是

我第一次尝试使用 Terragrunt。我有 terraform.tfvars 的目录。当我运行“terragrunt get”只是为了让球滚动时,我得到:

[terragrunt] 2017/08/08 11:08:14 exec:“terraform”:在 %PATH% 中找不到可执行文件

尽管事实上我在我的道路上有 terraform。有什么问题?

我在 Windows 7 机器上使用 Gitbash 作为我的 shell。我每天从 gitbash 多次使用 terraform。

真诚感谢任何帮助。

0 投票
1 回答
1026 浏览

terraform - 为什么 terragrunt 会破坏以前创建的资源

我组织了我们的 terraform 代码如下:

在每个组件目录下,我将定义共享模块的属性

我可以转到 ecr 或 ecs 等单个目录,运行“terragrunt init; terragrunt apply”没有问题。它将创建 AWS ECR 或 AWS ECS 集群。但是当我在 ECR 目录中运行 terragrunt 时,它会破坏之前创建的 ECS 集群。如果我先创建 ECR 资源,然后 cd ecs 运行 terragrunt,它将破坏 ECR 资源。即使我将 ECR 依赖项放在 ECS terraform.tfvars 文件中,它也具有相同的结果。我认为这是因为 terragrunt 不包括“基础设施”下所有子文件夹的资源定义。如果是这种情况,是否可以以这种方式构建 terraform 目录?

0 投票
1 回答
130 浏览

amazon-web-services - Terraform 为实例 EBS 块存储应用巨大的索引值

我正在使用 Terraform(如果相关,通过 Terragrunt 调用)从 AMI 创建实例并挂载现有卷:

值得注意的是,用于创建该资源的 AMI 已经有一个从构建过程映射到它的快照,因此该资源基本上只是用不同的快照替换它。我不确定这是否是我遇到问题的原因。

我正在使用生成的资源属性来填充 Python 模板,该模板将被压缩并作为 lambda 函数上传。Python 脚本需要volume-id来自此实例的 EBS 块设备。

实际问题:我不知道如何正确引用上述资源vars部分中的卷 ID。template_file这是结果状态:

问题是 EBS 卷的索引是那个疯狂的整数1440725774。我不知道为什么会这样。在控制台中,我感兴趣的列表中只有一个地图:

似乎引用任何这些键的唯一方法是直接使用该索引值:

当我不知道索引将是什么时,有什么方法可以可靠地引用这样的列表中的单个元素?我不能只是将该整数硬编码到template_file上面的资源中,并假设它每次都相同。有没有人知道为什么会发生这种情况?

0 投票
1 回答
452 浏览

amazon-web-services - Terragrunt v0.14.9、Terraform v0.11.7 从第二个环境读取 AWS VPC ID

我使用 Terragrunt 来编排非默认 AWS VPC 的创建。我有 S3/DynamoDB 状态管理,VPC 代码是一个模块。我已根据README.mdterraform.tfvars将“VPC 环境”代码签入第二个存储库。terragrunt

我创建了第二个模块,它最终将在这个 VPC 中创建主机,但现在只是为了输出它的 ID。我terraform.tfvars为这个模块的实例化创建了一个单独的“主机环境”/。

  1. terragrunt apply在 VPC 环境目录下运行 - VPC created
  2. terragrunt apply在主机环境目录中第二次运行 - 输出指令不起作用(没有错误,但不正确,见下文)。

这是有一天terragrunt apply-all在 VPC/hosts 环境目录的父目录中运行的前兆;我对文档的阅读建议使用terraform_remote_state数据源来公开 VPC ID,因此我data.tf在 hosts模块的文件中指定了这样的访问权限:

然后,在 hosts模块 outputs.tf中,我指定了一个输出来检查分配:

当我在上面运行 (2) 时,它退出时:

申请完成!资源:添加 0 个,更改 0 个,销毁 0 个。

输出:

mon_vpc = 2018-06-02 23:14:42.958848954 +0000 UTC

问题:

  1. 我在设置代码时出错,以便将主机环境配置为从已经存在的 VPC(terraform 状态文件)正确获取 VPC ID - 任何关于此处更改内容的建议将不胜感激。

  2. 看起来我确实设法获得了创建 VPC 的日期而不是它的 ID,因为代码令人困惑——有人知道为什么吗?

我没有使用社区模块 - 都是手工制作的。

编辑:作为对 Brandon Miller 的回应,这里还有更多内容。在我的 VPC 模块中,我有一个 outputs.tf,其中包含其他输出:

并且 vpc.tf 包含

由于这个 cfg 导致创建了一个 vpc,并且大多数参数<computed>都是,而不是咨询不同的状态键)。

编辑 2:首先阅读所有@brendan-miller 的回答和以下评论。使用句点会导致问题,因为它会混淆 terraform(请参阅 Brendan 对以下规范格式的回答):

0 投票
1 回答
693 浏览

terraform - 尝试将 Terragrunt (terraform) 与 Okta 一起使用

我正在尝试在 Terragrunt 中利用 Okta 的使用,并且在担任该角色时遇到了一些问题。我的 ~/.aws/config 文件

没有 terragrunt,只使用 Terraform 和 Okta,我看不到任何问题。

现在使用 Terragrunt

谢谢。

0 投票
1 回答
1388 浏览

amazon-web-services - 如何使用模块指定死信依赖?

我有以下基于这个官方模块的核心模块

我想创建两个队列:xyz 和 xyz_dead。xyz 将其死信消息发送到 xyz_dead。

如何指定deadLetterTargetArn依赖项?

如果我做:

并设置deadLetterTargetArn"${data.aws_sqs_queue.dead_queue.arn}",然后我收到此错误:

错误:data.aws_sqs_queue.thumbnail_requests_queue_dead:“名称”:未设置必填字段错误:data.aws_sqs_queue.thumbnail_requests_queue_dead::无效或未知键:过滤器

0 投票
1 回答
566 浏览

terraform - 有没有办法合并 terraform 变量以跨多个 AWS 区域使用相同的模块?

我是 terraform 的新手,我正在使用 terragrunt 来帮助我完成任务。我有相当数量的基础设施可以迁移并使用 terraform 进行设置,但我首先要脚踏实地。我们在不同地区有多个 VPC,使用了很多相同的安全组规则,即(web、db 等),我想在每个地区复制这些规则。

我有一个简单的示例,说明我目前如何设置 EC2 模块来重新创建安全组规则,并且想知道是否有更好的方法来组织此代码,因此我不必为每个相同的 SG 规则创建一个新模块地区?即一些聪明的方式来利用我的vpc、供应商等的列表......

因为这只是跨两个区域的一个 SG 规则,所以当我们扩展到更多区域并且我输入了多个 SG 规则时,我试图避免这种变得越来越丑陋

我的状态当前存储在 S3 中,在此设置中,我提取状态,以便我可以从用于创建 VPC 的另一个模块访问 VPC 输出

0 投票
1 回答
611 浏览

terraform - 要求使用 terragrunt 为 terraform 模块中设置的变量输入值

我有一个具有以下结构的 terragrunt 项目:

/account/us-east-1/nonprod/s3/terraform.tvars

/modules/s3/main.tf

/source/s3/main.tf

当我从account目录运行 terragrunt 时:

我被要求输入我在 /modules/s3/main.tf 中设置的变量的值

但是,当我terraform planmodules/s3目录运行时,它似乎可以工作。

使用 terragrunt 时此设置有什么问题?

0 投票
1 回答
1612 浏览

terraform - Terraform 在使用 -var 或 -var-file 时忽略 terraform.tfvars 文件

在几个月没有处理基础架构更改之后,我尝试在一台新机器上加载我们的 terragrunt 文件并遇到了几个错误,我找不到解决方案。

基本上,当存在or选项时,terraform似乎忽略了terraform.tfvars文件(或与此相关的任何文件)。*.auto.tfvars-var-var-file

我们使用分层 terragrunt 配置为不同的环境提供不同的凭据配置,这就是为什么有一个account.tfvars包含所有数据的文件的原因。

直到今年 8 月,一切都正常工作,所以也许有一个我在更新日志中没有发现的变化?

模块特定terraform.tfvars

家长terraform.tfvars

terragrunt 执行的命令:

当我将-var-file=terraform.tfvars作为参数添加到文件夹中的terraform plan命令时.terragrunt-cache,它确实有效,因此它不会自动加载。

有什么想法吗?

0 投票
2 回答
693 浏览

amazon-redshift - 使用 terraform/terragrunt 创建多个共享相同子网组和安全组的 redshift 集群

我正在尝试创建一组 terraform/terragrunt 脚本来创建多个 Redshift 集群。我希望它们都共享相同的子网组和安全组,并且如果它们不存在则创建它们。我最初的尝试是创建一个模块“redshift”,定义如下:

这适用于创建单个集群,当创建第二个集群 terraform 无法识别安全组和子网组已经存在时。处理这个问题的正确方法是什么?将网络设置分解成自己的模块,让 redshift 模块依赖它?