问题标签 [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.
terraform - Terraform 循环依赖挑战
好的,所以大部分都是有效的,除了......
我们有一个用户数据模板文件,用于让每个新的 AWS 服务器向 Chef Automate 注册。Chef 通过用户数据脚本中设置的“node_name”引用每个客户端,默认为实例 id。但是在 Chef UI 或“刀节点列表”中查看时,实例 ID 并不完全是用户友好的。我们能够使用模板写出一个有意义的 node_name。就像是:
但是,如果我们重建实例,我们会收到来自 Chef 的错误,因为新实例尝试使用相同的名称注册,但使用新生成的密钥。
因此,我们在 node_name 中添加了一个随机数后缀。我们希望每次重建实例时更新这个随机数。第一次尝试是将实例 ID 设置为随机数的“守护者”。这导致了循环错误:( -> 表示“取决于”)实例 -> 用户数据 -> 随机 -> 实例
还尝试转储随机生成并将实例 ID 的子字符串附加到 node_name。同样的问题,虽然周期更短:实例 -> 用户数据 -> 实例。
有什么想法可以解决这个问题吗?简而言之,我们希望将一个字符串附加到 node_name 中,该字符串将插入到用户数据中,并且每次实例终止并重新启动时该字符串都应该更新。没有来自 Terraform 的循环错误。
amazon-web-services - 如何在 Terraform 中创建 SSH 密钥?
我需要为不同的用户启动一堆 EC2 盒子。每个用户都应该被沙盒化,因此每个 EC2 框都需要自己的 SSH 密钥。
在 Terraform 中完成此任务的最佳方法是什么?
我发现的几乎所有说明都希望我手动创建 SSH 密钥并将其粘贴到 terraform 脚本中。
(坏)例子:
- https://github.com/hashicorp/terraform/issues/1243 ,
- http://2ninjas1blog.com/terraform-assigning-an-aws-key-pair-to-your-ec2-instance-resource/
- Terraform 无法使用 Amazon EC2 导入密钥对)
由于我需要以编程方式为许多用户生成唯一密钥,因此这是不切实际的。
这似乎不是一个困难的用例,但我在任何地方都找不到文档。
在紧要关头,我可以生成 Terraform 脚本并使用 Bash 即时注入 SSH 密钥。但这似乎正是 Terraform 一开始就应该做的事情。
amazon-web-services - 如何使用来自 terraform 同级目录的代码
我正在尝试使用同级目录中的特定代码,但这样做时遇到了一些麻烦。例如,请参阅下文了解我的文件的结构:
我想使用我在其中创建的定义,但我brother/main.tf
似乎sister/main.tf
无法找出正确的方法。我曾尝试使用模块:
这样做行得通,但它没有。我能够导入和使用代码,但由于某种原因,terraform 正在使用新的模块名称(如果有任何意义的话)创建一堆具有新资源名称的其他资源。从本质上讲,它创建了所需的资源,但也创建了 100 多个其他不需要的资源。
通过将我想要使用的定义放在同一个sister
目录中,我可以很容易地让它工作,但这不是我想要构造我的文件的方式。这样做的正确方法是什么?如果我有一个在 中定义的 IAM 角色brother
,并且我想在 中引用它sister
,我该怎么做?提前致谢!
编辑:
当前代码:
姐姐/main.tf
兄弟/main.tf
所以基本上,我希望能够test_assume_role
在sister/main.tf
.
python - 如何自动切换角色策略(Terraform)
我使用 Terraform(Engineering.tf、Finance.tf)创建了 2 个角色——Engineering 和 AdministratorAccess 策略,以及 -Finance 和 Billing 策略。我需要编写一个脚本来每 10 分钟切换一次角色策略(无限循环)我不确定在处理 Terraform 文件时该怎么做
amazon-web-services - 如何在 Terraform 中正确使用 Count 和选择多个 az 子网
我正在尝试实现一个模块,我试图在已经创建的子网中旋转多个实例(通过 terraform),但我不确定如何在模块中实际使用计数以及如何从 s3 存储桶数据源中选择值来旋转multi-az 中的实例,这是我在模块目录中的资源的样子
这是实际的模块:
amazon-ec2 - 在heredoc中转义$插值
我有heredoc:
现在,$remote_addr;
and$http_host;
不应该被插值,但是当我得到输出时是,并且是空的。
我试过使用$$remote_addr
; 但这也返回一个空结果,而不是字符串$remote_addr;
谁能看到我在转义 $ 字符方面做错了什么?
解决方法
通过使用 terraforms 插值,我能够渲染${"$remote_addr;"}
返回 $remote_addr;的字符串。
但也许存在更好的解决方案?
amazon-web-services - 安全组定义中不允许自引用
我正在尝试使用 Terraform 创建一个 sg。
我希望特定 SG 的所有实例都允许它们之间的所有通信,因此我将 SG 本身添加到入口规则中,如下所示:
但是,在运行时terraform plan
,我得到:
但是,在 AWS 控制台中,我可以在入站规则中添加 SG 名称,并且我看到我可以添加组本身(即自引用)。
这是为什么?
我也试过这个没有成功:
amazon-web-services - `aws_route_table` 的 Terraform `import` 之后想要从状态文件中删除路由
我在将现有 AWS 路由表导入 Terraform 时遇到了一些麻烦。它们导入,并且它们的路由记录在状态文件中,但运行plan
或apply
之后总是希望删除这些路由,即使它们也在 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
定义的生成它们。
而现在我已经喘不过气来了。
amazon-dynamodb - Terraform + DynamoDB:从变量创建属性
我想编写一个 terraform 模块来创建 dynamoDb 表。这些属性应该是从.tfvars
默认变量中读取的,而不是已经.tf
在资源指南中命名为here
为了进一步解释,假设正在使用属性列表来实现此伪代码:
如何在 terraform plan/apply 期间遍历属性列表并创建属性{}?属性块的数量不能像 terraform 文档中显示的那样是静态的,并且它们的名称必须从变量中读取。
amazon-web-services - 升级 terraform 到 v0.11.7 后执行 terraform plan 时出错,使用 splat 语法访问定义的属性
升级我的 terraform 后,我的命名模块坏了,我不知道如何修复命名模块。
我得到的错误如下:警告:输出“vpc”:必须使用 splat 语法来访问 data.aws_vpc.vpc 属性“tags”,因为它设置了“count”;使用 data.aws_vpc.*.tags 获取所有实例的属性列表