terraform - 无效的模板控制关键字

标签 terraform aws-glue terraform-template-file

目前正在开发一个包含一些粘合服务的 TF 模板。尝试初始化模板时,出现以下错误提示:

Error: Invalid template control keyword

on main.tf, in resource "aws_glue_classifier" "SrcPlanClassifier":
grok_pattern   = "%{DATA:col},%{DATA:col2},%{DATA:col3},"%{DATA:col4}",% . 
{DATA:col5},%{DATA:col6},%{DATA:col7},%{DATA:col8},%{DATA:col9},%{DATA:col10},% . 
{DATA:col11},%{DATA:col12},%{DATA:col}13$"

"DATA" is not a valid template control keyword.

此模板是将现有 CloudFormation 模板转换为 Terraform 的结果,因此该模式在过去一直有效。据我在 Glue 的 AWS 文档中得知,DATA 术语是可接受的内置分类器。这对我来说意味着这是 Terraform 端的问题。我在这里缺少什么?

在此先感谢您的帮助!

最佳答案

Terraform 将 %{ 序列理解为引入了一个 template directive ,然后失败,因为 iffor 是 Terraform 语言中唯一允许跟在 %{ 标记之后的关键字。

要在字符串中按字面意义使用 %{,您可以编写 %%{ 来转义介绍符。 Terraform 将看到 %%{ 并在结果字符串中生成 %{:

grok_pattern   = "%%{DATA:col},%%{DATA:col2},%%{DATA:col3},"%%{DATA:col4}",% . 
{DATA:col5},%%{DATA:col6},%%{DATA:col7},%%{DATA:col8},%%{DATA:col9},%%{DATA:col10},% . 
{DATA:col11},%%{DATA:col12},%%{DATA:col}13$"

(我认为您分享的消息中存在一些换行问题,因此我已尽我所能对其进行更新以进行转义,但您可能需要自己进行一些额外的转义。总体思路是替换每个 %{%%{ 在你引用的字符串中。)


另一种选择是将相关字符串移动到一个单独的文件中,然后让 Terraform 读取该文件:

  grok_pattern = file("${path.module}/grok_pattern.txt")

file 函数只是逐字地获取给定文件中的文本,不会针对模板序列或任何其他特殊标记对其进行解析。

关于terraform - 无效的模板控制关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59411891/

相关文章:

go - Terraform Schema Elem 支持多种类型吗?

azure - 使用 Terraform 创建增量 Azure 托管磁盘快照

terraform - 使用 for_each 创建的资源中带有 for_each 的动态 block

aws-lambda - 有没有办法在 AWS Glue 作业结束时触发 AWS Lambda 函数?

terraform - 使用 Cloud Watch 和 Terraform 拍摄计划的 EBS 快照

Terraform - 与环境关联的实例配置文件不存在

python - 如何在AWS-Glue脚本中编写用户定义函数?

linux - 错误: host for provisioner cannot be empty

azure - Terraform 如何根据条件创建代码块

amazon-web-services - 通过 AWS CloudFormation 部署 AWS Glue 作业 : Failed to properly render job config field for: language