问题标签 [terraform0.11]

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 投票
5 回答
96859 浏览

terraform - 如何在 Terraform 中进行简单的字符串连接?

我一定是非常愚蠢,但我不知道如何在 Terraform 中进行简单的字符串连接。

我有以下数据null_data_source

所以当env_name="prod"我想要输出app.api.mydomain.com和其他任何东西时 - 假设env_name="staging"我想要app.api.staging.mydomain.com.

但是上面会输出app.api.stagingmydomain.com<-- 注意 . 后面缺少的点staging

我尝试连接“。” 如果 env_name 不是“prod”而是 Terraform 错误:

错误是__builtin_StringToInt: strconv.ParseInt: parsing ""

TF 中的concat()函数似乎适用于列表而不是字符串。

正如标题所说:如何在 Terraform 中进行简单的字符串连接?

我不敢相信我在问如何将 2 个字符串连接在一起 XD

更新:

对于任何有类似问题的人,我暂时做了这个可怕的解决方法:

main_api_gw = "app.api.${var.env_name == "prod" ? "" : var.env_name}${var.env_name == "prod" ? "" : "."}mydomain.com"

0 投票
1 回答
218 浏览

terraform - 连接列表,设置为资源属性

我正在尝试组合两个列表并将其设置为资源的属性,但出现错误。这是最小的复制:

我收到一个超级无用的错误

错误:加载模块时出错:模块 load_balanced_service:加载 .terraform/modules/188cf031fdce92d75131be4747cedad9/XXX.tf 时出错:读取 aws_ecs_service[ecs_service] 的配置时出错:在 1:10 解析错误:预期表达式但找到“[”

它声称第 1 行,但如果您删除该 security_groups 行,一切正常。

0 投票
1 回答
1003 浏览

aws-lambda - Terraform 0.11:aws_lambda_function 中的条件 vpc_config

我正在尝试在vpc_config块上部署一个带有条件的 Lambda 函数。我曾尝试在内部使用 count ,vpc_config但无法在其中使用 count 语句。根据资源的文档,如果您按如下方式传入空列表,则该vpc_config部分将被忽略:

我可以确认这确实按预期工作(未尝试 VPC 配置)。

subnet_ids因此,我尝试对and使用条件security_group_ids- 类似的东西var.vpc_function ? var.subnet_ids : []- 但你不能在条件语句中传递一个列表。我最接近解决方案的是下面的hacky数字,它加入然后拆分列表:

这适用于第一次无论vpc_function是真还是假,这很好,但是哪里vpc_function是假的,terraform 总是将上述内容视为每次重新应用时的更改:

我想问题是我的加入然后拆分列表没有被视为 [],而是作为包含一些(空白)内容的列表。

还有其他人对此有解决方案吗?我也尝试过使用 Terraform 0.12,但无法弄清楚。也许有人在 Terraform 0.12 中做了类似的事情并且可以提供一些指点?

0 投票
2 回答
3793 浏览

amazon-web-services - 仅当 Terraform 中存在文件时才部署资源

我有一个要求,只有当某个文件存在于某个位置时,我才必须部署资源,否则它将跳过该资源。

就像这里是在某些 AWS 账户中部署某个身份提供商的代码。除了这个身份提供者(比如 abc),许多其他身份提供者也从同一个 main.tf 文件部署,所以所有的都必须在这里。abc-${var.aws_account}.xml唯一的挑战是,在为任何帐户部署 IAM 层时,我们仅在文件部分存在于文件路径中时才会部署此特定资源
saml_metadata_document。如果它不存在于路径中,它将简单地忽略资源创建并继续执行其余代码。

文件夹结构

如何在 Terraform 0.11 中进行条件检查以检查文件是否存在?

0 投票
0 回答
317 浏览

terraform - Terraform:多个 ACM 证书

我正在尝试编写一些 TF,给定站点的单个 FQDN,它将生成 ACM 证书,创建 R53 记录以进行验证并在单个 TF 传递中运行验证。

我没有使用子域,我让它适用于单个 FQDN,但与 TF 的本质一样,我希望将来能够向变量添加另一个 FQDN 以获得多个证书。

当我运行以下代码时,我收到错误:

但我知道 R53 记录确实导出了 fqdn 属性。

acm.tf:

变量.tf:

我的 vars 文件包含这样的条目:

编辑:添加了 Route53 区域的数据查找,即使有多个不同的域,它似乎也只返回变量中提供的第一个域的区域。即 example1.com 和 example2.com 它将为两组 R53 记录使用相同的区域 ID,这显然会失败

0 投票
1 回答
1232 浏览

amazon-web-services - 如何使用 Terraform 0.11 访问其中包含地图的列表列表?

我有几个EKS 节点组。我正在尝试访问autoscaling_groups name所有节点组(例如name = eks-e214c586716a)。在 0.12 中要容易得多,但我们仍在使用 0.11。

这有效:aws_eks_node_group.node-group.resources.0.autoscaling_groups.0.name

但是,当我迭代时,我不成功。

0 投票
1 回答
8457 浏览

amazon-web-services - terraform:有没有办法动态创建 iam 策略语句?

地形版本:0.11

我正在运行多个 eks 集群并尝试在此文档之后的所有集群中启用基于 IAM 角色的服务帐户: https ://www.terraform.io/docs/providers/aws/r/eks_cluster.html#enabling-iam-roles -for-service-accounts

当我在策略语句中硬编码集群名称并创建多个语句时,这有效

由于我有多个集群,我希望能够动态生成语句,因此我进行了以下更改:

我创建了一个count变量并更改了主体和条件中的值

Terraform 现在能够找到集群,但也会生成多个策略。这将不起作用,因为在以下语法中,assume_role_policy 不采用列表

看起来我不需要创建多个策略,而是需要在一个策略中生成多个语句(所以我可以添加到一个 iam_role)。有没有人做过类似的事情?谢谢。

0 投票
3 回答
1260 浏览

azure - Terraform 将默认值分配给局部变量

我的 variables.tfvars 中有以下代码:

以下代码用于创建 azure 资源:

可以看出,我们通过设置变量值来操纵 Azure 上资源的创建: is_premium_service_bus_required 为 0(未创建)或 1(已创建)

我有以下局部变量:

它只负责操作默认连接字符串并在末尾添加协议。

我们有以下代码,它根据“service_bus_type_cloud”的值确定,应该为“service_bus_cloud_connection_string”变量分配什么值,该变量稍后将在不同的 terraform 文件中使用。

现在的问题是,当 "is_premium_service_bus_required" 的值设置为 "0" 时,高级服务总线 azure 服务没有创建并且本地变量 "premium_service_bus_cloud_connection_string" 值为空,我们最终得到以下错误:

有没有办法绕过这个错误或重写逻辑的更好方法?我们正在运行 Terraform 版本 0.11,因此这里提到的条件运算符不能用作使用以下代码:

将评估两个值表达式,即使只返回一个,它似乎是一个在 0.12 中修复的错误,如此处所示

0 投票
1 回答
158 浏览

terraform - terraform 11 和“concat”函数:解析错误

TF v.0.11(我知道它很旧,但我需要这个)

我尝试以这种方式配置输出:

错误信息是

读取输出 FUNCTION_ARN 的配置时出错:在 1:46 解析错误:预期表达式但找到“[”

我做错了什么,如何解决?

0 投票
1 回答
57 浏览

list - 如何从terraform11中的多类型地图中提取属性

我正在尝试cidr_blocks从资源的ingress规则中提取属性aws_security_group。我的 terraform 项目正在运行 version v0.11.13

模块A/main.tf

模块A/输出.tf

这给了我一个类似于以下的输出:

但是,我无法仅提取 terraform 中的cidr_blocksusing查找函数,因为地图值的类型不同(有些是列表,有些是字符串)。我无法在 terraform12 中使用其他高级功能,因为该项目在 terraform11 中运行。

请提出一种从上述输出中仅提取 cidr_blocks 的方法,类似于以下内容。

预期输出:

或者

提前致谢。