使用Packer convert函数时出现‘Missing key/value separator’错误求助
解决方法
你的问题出在两个地方:一是SSM参数存储的内容不是标准JSON格式,二是Packer代码里错误地用HCL对象语法包裹了参数值字符串。下面给出两种无需拆分多参数的解决方案:
方案1:将SSM参数改为标准JSON格式(推荐)
把SSM参数/devops/ami/base的内容修改为标准JSON:
{"name_prefix":"base","os":"AmazonLinux2"}
然后修改Packer代码,用jsondecode直接解析参数值:
data "amazon-parameterstore" "base" { name = "/devops/ami/base" } locals { parameters = jsondecode(data.amazon-parameterstore.base.value) }
这样local.parameters就会是一个包含name_prefix和os的map,可以直接通过local.parameters.name_prefix、local.parameters.os引用。
方案2:不修改SSM参数内容,通过字符串转换处理
如果不想改动已存储的SSM参数内容,先把字符串里的=替换为JSON要求的:,再解析成map:
data "amazon-parameterstore" "base" { name = "/devops/ami/base" } locals { # 将非标准键值对转换为标准JSON格式 normalized_json = replace(data.amazon-parameterstore.base.value, "=", ":") parameters = jsondecode(local.normalized_json) }
错误原因说明
你原来的代码中,convert({data.amazon-parameterstore.base.value}, map(string))的写法错误:HCL里{}用来定义对象,要求内部是key = value的结构,但你直接把参数值字符串放进去,HCL无法识别为合法对象,因此抛出"Missing key/value separator"错误。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

