2

目前正在开发一个包含一些胶水服务的 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 端的一个问题。我在这里想念什么?

在此先感谢您的帮助!

4

1 回答 1

6

Terraform 将%{序列理解为引入了一个模板指令,然后它失败了,因为if并且for是 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函数只逐字获取给定文件中的文本,而不解析模板序列或任何其他特殊标记。

于 2019-12-19T17:44:35.330 回答