Terraform 模板控件关键字无效

Terraform 模板控件关键字无效,terraform,aws-glue,terraform-template-file,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},%

目前正在开发包含一些胶水服务的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的结果,因此该模式在过去一直有效。从AWS Glue文档中可以看出,数据术语是一个可接受的内置分类器。这对我来说意味着这是一个关于地形的问题。我错过了什么


提前感谢您的帮助

Terraform将%{序列理解为引入了一个标记,然后失败了,因为在Terraform语言中,if和for是唯一允许跟随该%{标记的关键字

要在字符串中按字面意思使用%{,可以改为编写%%%{以转义介绍人。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将%{sequences理解为引入了a,然后失败了,因为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函数只是逐字提取给定文件中的文本,不分析它的模板序列或任何其他特殊标记。

您需要通过将%符号对折来转义。@ydaetskcoR是的,在进行了一些尝试后,找到了这个符号。感谢您提供了正确的答案!您需要通过将%符号对折来转义。@ydaetskcoR是的,经过一番尝试后,我发现了这个问题。感谢您提供了正确的答案!正如我在上面的评论中提到的,问题确实是关于转义这些字符的。感谢您的详细指导,我将在将来研究使用这些表达式的单独文件。正如我在评论中提到的e、 问题确实是关于转义这些字符。感谢您的详细指导,我将在将来研究如何为这些表达式使用单独的文件。