问题标签 [terraform-template-file]

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 投票
2 回答
2975 浏览

terraform - 如何在 terraform 中管理三个(每个环境)用户数据文件?

我为三种不同的环境提供了三个特定的用户数据文件。根据用户对env(环境)变量的输入,我们必须为aws_instanceterraform 资源选择任一用户数据文件。

以下是三个用户数据文件:

  1. user_data_dev.sh

    /li>
  2. user_data_prod.sh

    /li>
  3. user_data_qa.sh

    /li>
0 投票
2 回答
1953 浏览

terraform - 如何仅基于 Terraform 环境加载某些文件?

要运行我的 terraform 脚本,我会terraform apply -var 'ENV=dev' -var-file="dev.tfvars"

在 内dev.tfvars,我想加载仅用于开发环境的变量的其他文件。

我应该能够对staging.tfvars等做同样的事情。

有什么想法吗?

0 投票
2 回答
1651 浏览

terraform - 使用 Terraform 进行分层部署

我是 Terraform 的新手,所以甚至不确定这样的事情是否可行。例如,假设我有一个在其中部署 Azure 资源组和密钥保管库的模板。然后假设我有另一个将虚拟机部署到同一资源组的模板。是否可以在不破坏密钥保管库和资源组的情况下使用虚拟机模板进行破坏?我们正在尝试划分大型解决方案的各个部分,而不必将它们全部放在一个模板中,并且我们希望能够单独管理每个部分而不影响其他部分。

在相关说明中……我们将状态文件存储在 Azure 存储帐户中。如果我们将部署分解为多个划分的部署......每个部署应该有自己的状态文件还是应该都使用相同的状态文件?

0 投票
1 回答
2141 浏览

azure - 传递在 Shell 脚本中分配的变量

我正在尝试通过 Shell 脚本运行 Terraform 部署,在 Shell 脚本中,我首先动态收集 Azure 存储帐户的访问密钥并将其分配给变量。然后我想在 terraform 命令行上的 -var 赋值中使用该变量。此方法在为远程状态配置后端时效果很好,但不适用于进行部署。模板中使用的其他变量是从 terraform.tfvars 文件中提取的。下面是我的 Shell 脚本和 Terraform 模板:

外壳脚本:

部署模板:

我尝试在 terraform.tfvars 文件中定义变量:

access_key 定义似乎被忽略了。

然后我尝试不使用terraform.tfvars文件,并在下面创建了 variables.tf 文件:

然后我修改了我的deploy.sh脚本以使用下面的行来运行我的 terraform 部署:

这导致错误invalid value "variables.tf" for flag -var-file: multiple map declarations not supported for variables Usage: terraform apply [options] [DIR-OR-PLAN]被抛出。

0 投票
1 回答
1889 浏览

azure - Terraform - 长时间运行 Azure 部署错误

我们正在使用通过 Bash 窗口中的 shell 脚本执行的 Terraform 来部署应用服务环境。部署应用服务环境需要 1 到 2 小时才能完成。

Terraform 部署在 1 小时后超时,并显示以下错误:

azurerm_template_deployment.ase: Error creating deployment: azure#WaitForCompletion: context has been cancelled: StatusCode=200 -- Original Error: context deadline exceeded

部署实际上并没有停止并最终成功。如果在它完成后(如 Azure 门户中所观察到的)我们重新运行 Terraform 部署,则部署成功完成。

地形日志文件:

https://gist.github.com/Phydeauxman/0f9aa3d1c1379c36e2f8f420d0ae345e

地形配置文件:

0 投票
2 回答
5595 浏览

terraform - 正确使用 Terraform 外部数据源

我正在使用 Azure 中 bash 云外壳中的 Terraform。我正在尝试将外部数据源添加到我的 Terraform 配置文件中,该文件将用于az cli查询virtualip模板部署的 Microsoft.Web/hostingEnvironment 上的对象。

AZ CLI 命令行: az resource show --ids /subscriptions/<subscription Id>/resourceGroups/my-ilbase-rg/providers/Microsoft.Web/hos tingEnvironments/my-ilbase/capacities/virtualip

从命令行运行时的输出:

在我的 Terraform 配置中,我为该--ids值创建了一个变量:

然后我以这种方式构建数据源:

当我执行我的配置时,我收到以下错误:

任何想法我做错了什么?

0 投票
2 回答
3669 浏览

git - Terraform 无法下载 GIT 存储库

我有企业 GIT 和一个名为“Terraform”的公共存储库。我使用了下面的配置文件,并在执行路径下创建了一个名为“jaish”的文件夹。但是在运行 init 时收到错误消息

这里有什么遗漏吗?

0 投票
1 回答
279 浏览

azure - Azure 应用程序网关的 IP 地址列表的正确格式

我正在创建一个 Terraform 配置以在 Azure 中部署一个应用程序网关,该网关将位于配置为使用内部负载均衡器的应用服务环境 (ASE) 前面。我使用 shell 脚本从 Azure Cloud Shell 运行我的 terraform 配置。在 shell 脚本中,我运行 AZ CLI 命令来获取 ASE 内部负载均衡器的 IP 地址,然后将其作为命令行变量输入到 Terraform 配置中。我不断收到一个错误,说 ip_address_list 应该是一个列表,但我不确定这意味着什么格式。

下面是我用来获取 IP 地址的命令:

这将返回格式如下的 IP 地址。我将它作为 shell 脚本的一部分进行回显,以便验证它是否已成功获取:

"10.10.1.11"

下面是我在 shell 脚本中使用的 Terraform 命令行:

以下是我尝试应用 IP 地址的 Terraform 配置中的代码:

我已经尝试过了,[]但得到了同样的错误。

0 投票
3 回答
2433 浏览

digital-ocean - 是否可以为不同的资源重用 Terraform 模板,为变量提供不同的值?

我正在使用 Terraform 在 DigitalOcean 上设置多个运行 Consul 的液滴。也许我遗漏了一些基本的东西,但为它们提供正确的配置似乎非常困难。

每台机器都有两个网络接口——公共的和私有的。有了这个设置,似乎有必要提供bind_addr指向每个 droplet 的私有 IP 地址 - 否则 consul 退出时会出现错误,指出有多个私有(?!)地址。

最直接的解决方案是为每台机器提供一个配置文件,在每种情况下几乎相同,但bind_addr字段值不同,如下所示:

这不是模板的用途吗?我不知道如何以这种方式使用它们。在定义模板时,模板的变量似乎只能提供一次:

我试图将数据块嵌套在资源块中,但随后出现如下错误:

我目前使用的解决方法是将配置拆分为两部分(服务器和自定义)并将自定义的内容内联到文件配置器中:

它可以工作,但由于以下几个原因阻碍了可读性:

  1. 所有引号都必须转义

  2. 一切都必须在单行(?)

  3. 文本编辑器没有语法高亮或类似帮助

或者,我考虑使用外部程序(如envsubst)来呈现模板或使用内置format函数文件函数,但每一个看起来都很麻烦。

有没有直接的方法来实现我想要的?

0 投票
1 回答
20888 浏览

terraform - 在 terraform 中使用 count.index?

我正在尝试从模板生成一堆文件。我需要用 count.index 替换硬编码的 1,不确定 terraform 允许我使用什么格式。

我正在运行: