问题标签 [terraform]

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

terraform - 如何将 terraform 与 hashcorp vault 一起用于 openstack?

我正在使用 terraform 在私有 openstack 云中配置服务器。运行 terraform 要求 terraform 脚本可以访问我的 openstack 云的用户名和密码。因此,我想将此信息存储在一个秘密文件中并对其进行加密(类似于 ansible vault 的内容)。但是,我发现的将 hashcorp vault 与 terraform 结合使用的唯一示例是AWS。那么,我将如何创建一个 terraform 脚本,该脚本可以读取包含两个变量的 vault 值以使用它们来配置 openstack 实例?

以下是我安装保险库秘密后端的方式供参考:

vault mount generic

这是我的秘密的样子(如果我没有将其写入 json 文件):

vault write generic/logins usernames=myUserName psswrds=myPassword

0 投票
2 回答
6944 浏览

terraform - Terraform 远程执行变量传递

我希望将变量传递给新创建的 aws_instance 上的脚本,但我不确定如何。这是我所拥有的:

我已经验证 zookeeper_ips_list 具有正确的 IP 列表。

我通过 terraform apply 得到的错误是:

所以基本上我想创建这台机器,然后启动我的配置程序脚本,该脚本通过了一个 IP 列表,以便它可以进行配置。

0 投票
0 回答
1907 浏览

escaping - terraform 在远程 exec 内联中转义会杀死脚本

我正在尝试使用带有内联命令的 remote-exec 配置程序来安装和配置 datadog_agent。以下 echo 行运行良好,并且似乎被正确引用/转义。我似乎无法在 sed 行上正确引用/转义。当它取消注释时,看起来整个内联脚本没有运行。

我以为是*,并在尝试逃跑失败后将其取出。我认为 * 很好(红鲱鱼)。

0 投票
1 回答
7781 浏览

amazon-web-services - 尝试使用 Terraform 创建 AWS VPC 安全组时出现循环错误

我想创建 2 个 VPC 安全组。

一个用于 VPC 的堡垒主机,一个用于私有子网。

当我terraform plan这样做时,会返回此错误:

如果我从 PrivateSG 中注释掉 BastionSG 的入口规则,则该计划执行得很好。

此外,如果我从 BastionSG 中注释掉 PrivateSG 的出口规则,它也可以正常执行。

用于构建具有公共/私有子网和堡垒主机的 VPC的AWS 方案 2描述了我尝试设置的架构。

我通过 AWS 控制台配置了完全相同的设置,并且运行良好。

为什么 Terraform 不接受它?还有其他方法可以将 Bastion 安全组与 Private 安全组连接起来吗?

编辑

据我了解,两个 sec 组之间存在一个循环引用,即使在 AWS 中它是有效的,它也需要以某种方式中断。

因此,我考虑允许来自 Bastion sec 组的所有出站流量 (0.0.0.0/0),而不是将其指定给各个安全组。

会不会对安全造成不良影响?

0 投票
1 回答
612 浏览

file-sharing - 如何使用 consul 设置 Terraform "COMMAND: REMOTE CONFIG"

我有一台服务器用于 consul 集群的自我修复和自动缩放。它通过由 consul 监视和运行状况检查运行的 terraform 脚本来做到这一点。

我想为故障转移添加一个额外的备份 terraform 服务器。为此,我必须在我的服务器之间共享terraform.tfstateterraform.tfstate.backup,以便它们可以在相同的资源上运行 terraform。我想使用Terraform "COMMAND: REMOTE CONFIG"共享这些文件,但对我来说,我不清楚如何开始共享。

基本上我希望terraform.tfstateterraform.tfstate.backup文件在两台服务器上不断同步。这是我设置它的尝试。请注意,两个 terraform 服务器都在运行连接到我的 consul 集群其余部分的 consul 客户端:

然而,这显然是错误的语法。尝试运行链接文档中提供的领事示例时,我收到以下输出:

我想让我的 terraform 服务器通过 Terraform“命令:远程配置”而不是像 glusterfs 之类的普通文件共享系统同步。

如何以这种方式正确同步我的 terraform 文件?

0 投票
0 回答
173 浏览

azure - 无法访问在私有 ip 上但不能在公共 ip 上访问的 nginx

我正在使用 terraform 创建资源,并且我在子网 172.1.0.0 中有一个节点,没有为该节点分配安全组或规则;该节点有两个端点 22 和 80。

我使用 nmap 确认端口已打开,它们是:

我已经在节点上安装了 nginx 并运行curl 172.1.0.4curl 127.0.0.1curl 0.0.0.0为我获取了默认的 nginx 页面。

但是运行curl <public ip>curl <dns name>挂起,我得到一个

curl: (56) Recv failure: Connection reset by peer

我的 iptables 规则是:

为什么我不能在节点的公共 ip 上访问 nginx?

该节点位于虚拟网络中,如果需要,我可以发布 terraform 配置172.1.0.0/16的子网。172.1.0.0/24

0 投票
1 回答
1472 浏览

deployment - 为什么盐云与 terraform 相比如此缓慢?

我将salt-cloudterraform作为管理 GCE 基础设施的工具进行比较。我们使用salt stack来管理 VM 配置,所以我自然更愿意使用salt-cloud作为堆栈的一个组成部分,并逐步淘汰 terraform 作为遗留的东西。

但是,我的用例对 VM 部署时间至关重要,因为我们提供 PaaS 解决方案,并根据客户要求部署 VM,因此需要在几秒钟内单击按钮即可交付就绪的 VM。

让我感到困惑的是为什么salt-cloud需要这么长时间来部署基本机器。

我使用terraformsalt-cloud(均以并行模式)基于默认 CentOS7 映像部署了三个虚拟机,创建了并驾齐驱的简单测试。而且时间差是惊人的 - terraform需要大约 30 秒来部署请求的机器(这类似于通过 GCE GUI 部署所需的时间),salt-cloud大约需要 220 秒才能在同一区域的同一帐户下部署完全相同的机器. 特别奇怪的是,前 130 秒salt-cloud没有开始部署,而且似乎什么也没做,只有在大约 130 秒过去后,它才会显示消息deploying VMs,并且这些虚拟机在 GUI 中显示为in deployment.

关于盐云,我是否缺少一些明显的东西让它变得如此缓慢?它可以以某种方式加速吗?我更喜欢使用 full salt stack,但由于目前的速度问题,我真的负担不起。

0 投票
1 回答
784 浏览

docker - Terraform:使用远程 exec 编辑文件

我有一个用例,我正在使用 terraform 配置 GOMaster 和 GOServer,然后使用新配置的 gomaster 注册 goserver。

以下是我正在使用的 terraform 配方。Terraform 也安装在 docker 服务器本身上,我正在从那里执行这个配方。

goagent 资源中的远程执行部分不起作用。我的假设是它登录到配置的 goagent 并根据指定的 sed 命令修改其中的文件。但相反,它正在对 docker 主机执行 ssh 并修改文件。我错过了什么吗?我们是否必须在远程设备的连接块中指定 IP 地址或主机名?

0 投票
1 回答
686 浏览

amazon-web-services - terraform 查找问题

这就是我运行 terraform plan 时得到的结果,它曾经在早期版本中工作过,所以基本上 concat 是返回列表而不是字符串。

我正在使用 terraform 的编译版本

0 投票
0 回答
516 浏览

amazon-web-services - 无法在 terraform 中获取 cache_nodes.0.address

我正在尝试使用以下方法获取弹性缓存节点地址,我在使用以下方法配置弹性缓存集群时使用计数:

收到此错误:

当我尝试 fetchid而不是 时cache_nodes.0.address,它可以工作,但我需要 elasticache 节点地址。关于我如何得到它的任何想法。

更新

更多信息:

下面的代码片段为我创建了 3 个 ecc 节点

现在我想使用下面的方法为所有这些集群创建一个 route53 条目,例如,对于第一个集群,我使用下面的代码,但它确实有效。我在不使用 count 时工作,即只有一个集群和一个路由 43 端点: