问题标签 [terraform-provider-aws]

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 回答
4528 浏览

terraform - Terraform 循环依赖挑战

好的,所以大部分都是有效的,除了......

我们有一个用户数据模板文件,用于让每个新的 AWS 服务器向 Chef Automate 注册。Chef 通过用户数据脚本中设置的“node_name”引用每个客户端,默认为实例 id。但是在 Chef UI 或“刀节点列表”中查看时,实例 ID 并不完全是用户友好的。我们能够使用模板写出一个有意义的 node_name。就像是:

但是,如果我们重建实例,我们会收到来自 Chef 的错误,因为新实例尝试使用相同的名称注册,但使用新生成的密钥。

因此,我们在 node_name 中添加了一个随机数后缀。我们希望每次重建实例时更新这个随机数。第一次尝试是将实例 ID 设置为随机数的“守护者”。这导致了循环错误:( -> 表示“取决于”)实例 -> 用户数据 -> 随机 -> 实例

还尝试转储随机生成并将实例 ID 的子字符串附加到 node_name。同样的问题,虽然周期更短:实例 -> 用户数据 -> 实例。

有什么想法可以解决这个问题吗?简而言之,我们希望将一个字符串附加到 node_name 中,该字符串将插入到用户数据中,并且每次实例终止并重新启动时该字符串都应该更新。没有来自 Terraform 的循环错误。

0 投票
5 回答
78491 浏览

amazon-web-services - 如何在 Terraform 中创建 SSH 密钥?

我需要为不同的用户启动一堆 EC2 盒子。每个用户都应该被沙盒化,因此每个 EC2 框都需要自己的 SSH 密钥。

在 Terraform 中完成此任务的最佳方法是什么?

我发现的几乎所有说明都希望我手动创建 SSH 密钥并将其粘贴到 terraform 脚本中。

(坏)例子:

由于我需要以编程方式为许多用户生成唯一密钥,因此这是不切实际的。

这似乎不是一个困难的用例,但我在任何地方都找不到文档。

在紧要关头,我可以生成 Terraform 脚本并使用 Bash 即时注入 SSH 密钥。但这似乎正是 Terraform 一开始就应该做的事情。

0 投票
2 回答
4473 浏览

amazon-web-services - 如何使用来自 terraform 同级目录的代码

我正在尝试使用同级目录中的特定代码,但这样做时遇到了一些麻烦。例如,请参阅下文了解我的文件的结构:

我想使用我在其中创建的定义,但我brother/main.tf似乎sister/main.tf无法找出正确的方法。我曾尝试使用模块:

这样做行得通,但它没有。我能够导入和使用代码,但由于某种原因,terraform 正在使用新的模块名称(如果有任何意义的话)创建一堆具有新资源名称的其他资源。从本质上讲,它创建了所需的资源,但也创建了 100 多个其他不需要的资源。

通过将我想要使用的定义放在同一个sister目录中,我可以很容易地让它工作,但这不是我想要构造我的文件的方式。这样做的正确方法是什么?如果我有一个在 中定义的 IAM 角色brother,并且我想在 中引用它sister,我该怎么做?提前致谢!

编辑:

当前代码:

姐姐/main.tf

兄弟/main.tf

所以基本上,我希望能够test_assume_rolesister/main.tf.

0 投票
1 回答
99 浏览

python - 如何自动切换角色策略(Terraform)

我使用 Terraform(Engineering.tf、Finance.tf)创建了 2 个角色——Engineering 和 AdministratorAccess 策略,以及 -Finance 和 Billing 策略。我需要编写一个脚本来每 10 分钟切换一次角色策略(无限循环)我不确定在处理 Terraform 文件时该怎么做

0 投票
2 回答
2314 浏览

amazon-web-services - 如何在 Terraform 中正确使用 Count 和选择多个 az 子网

我正在尝试实现一个模块,我试图在已经创建的子网中旋转多个实例(通过 terraform),但我不确定如何在模块中实际使用计数以及如何从 s3 存储桶数据源中选择值来旋转multi-az 中的实例,这是我在模块目录中的资源的样子

这是实际的模块:

0 投票
1 回答
618 浏览

amazon-ec2 - 在heredoc中转义$插值

我有heredoc:

现在,$remote_addr;and$http_host;不应该被插值,但是当我得到输出时是,并且是空的。

我试过使用$$remote_addr; 但这也返回一个空结果,而不是字符串$remote_addr;

谁能看到我在转义 $ 字符方面做错了什么?

解决方法

通过使用 terraforms 插值,我能够渲染${"$remote_addr;"}返回 $remote_addr;的字符串。

但也许存在更好的解决方案?

0 投票
1 回答
11577 浏览

amazon-web-services - 安全组定义中不允许自引用

我正在尝试使用 Terraform 创建一个 sg。

我希望特定 SG 的所有实例都允许它们之间的所有通信,因此我将 SG 本身添加到入口规则中,如下所示:

但是,在运行时terraform plan,我得到:

但是,在 AWS 控制台中,我可以在入站规则中添加 SG 名称,并且我看到我可以添加组本身(即自引用)。

这是为什么?

我也试过这个没有成功:

0 投票
2 回答
1140 浏览

amazon-web-services - `aws_route_table` 的 Terraform `import` 之后想要从状态文件中删除路由

我在将现有 AWS 路由表导入 Terraform 时遇到了一些麻烦。它们导入,并且它们的路由记录在状态文件中,但运行planapply之后总是希望删除这些路由,即使它们也在 Terraform 中定义。

我在 Terraform 中定义了一个现有的 AWS 路由表,如下所示:

然后像这样导入它;terraform import aws_route_table.public_management rtb-abc123.

哪个输出:

然后运行时terraform plan,Terraform 想要删除aws_route它在状态文件中生成的所有资源状态,创建我们刚刚导入的路由表:

我还尝试在aws_route_table资源之外单独定义路由,并通过 ID 将它们附加到路由表,如下所示:

唯一会导致无更改状态的情况是,如果我在路由表上运行导入,定义路由表之外的路由(作为aws_route资源),然后进入并手动更改状态下生成的名称文件到我定义的 tf 文件。但是,我相信这实际上不会在新的运行中起作用,因为在 中定义的路由aws_route_table以及作为单独aws_route资源的路由会发生冲突。

编辑:

据我所知,最有可能的解释是,在导入时,Terraform 很乐意导入路由表中的路由,但随后plan,它希望使用aws_route资源显式声明它们。

问题是;你不能导入aws_route资源,所以你永远不能让你当前的基础设施状态与你的 terraform 状态相匹配。

我认为事后明确声明它们的原因也不起作用,因为状态文件记录导入的路由的方式不同,如果它从import aws_route_table ...命令获取它们,则如果它从apply具有显式aws_route定义的生成它们。

而现在我已经喘不过气来了。

0 投票
1 回答
2263 浏览

amazon-dynamodb - Terraform + DynamoDB:从变量创建属性

我想编写一个 terraform 模块来创建 dynamoDb 表。这些属性应该是从.tfvars默认变量中读取的,而不是已经.tf在资源指南中命名为here

为了进一步解释,假设正在使用属性列表来实现此伪代码:

如何在 terraform plan/apply 期间遍历属性列表并创建属性{}?属性块的数量不能像 terraform 文档中显示的那样是静态的,并且它们的名称必须从变量中读取。

0 投票
0 回答
155 浏览

amazon-web-services - 升级 terraform 到 v0.11.7 后执行 terraform plan 时出错,使用 splat 语法访问定义的属性

升级我的 terraform 后,我的命名模块坏了,我不知道如何修复命名模块。

我得到的错误如下:警告:输出“vpc”:必须使用 splat 语法来访问 data.aws_vpc.vpc 属性“tags”,因为它设置了“count”;使用 data.aws_vpc.*.tags 获取所有实例的属性列表