Ansible解析AWS Lambda标签输出时from_json报错如何解决?
报错根因
你执行的shell命令中,xargs会为每个Lambda ARN单独调用一次aws lambda list-tags,每次调用返回一个独立的JSON对象,多个JSON对象直接拼接的结果不符合标准JSON格式,所以from_json解析时会抛出「Extra data」的错误。
解决方案1:修改shell命令直接输出合并后的合法JSON
在原有命令末尾加jq -s add把多个JSON对象合并成一个,修改后的任务代码如下:
- name: Lambda - Retrieve existing instances block: - shell: aws --region {{ AWSRegion }} lambda list-functions | jq -r ".Functions[].FunctionArn" | xargs -I {} aws --region {{ AWSRegion }} lambda list-tags --resource {} --query '{"{}":Tags}' | jq -s add register: LambdaClustersTagR environment: AWS_ACCESS_KEY_ID: "{{ aK }}" AWS_SECRET_ACCESS_KEY: "{{ SK }}" - set_fact: LambdaClustersTag: "{{ LambdaClustersTagR.stdout | from_json }}"
jq -s add会把输入的所有独立JSON对象读取为数组,再把数组合并成单个JSON对象,key为Lambda ARN、value为对应标签,直接符合需求结构。
解决方案2:不修改shell命令,用Ansible过滤器拆分解析
如果不想调整shell逻辑,可以把stdout按JSON对象分隔符拆分后逐个解析再合并:
- set_fact: LambdaClustersTag: >- {{ LambdaClustersTagR.stdout | regex_replace('}\n{', '}---SPLIT---{') | split('---SPLIT---') | map('from_json') | combine }}
内容的提问来源于stack exchange,提问作者user312307
相关产品推荐
相关产品推荐

