我正在尝试使用ansible剧本自动化部署并调用lambda函数。为了获得lambda函数的信息,我编写了一个json查询。但是在这里,我只需要arn(arn:aws:lambda:us-west-2:1234567890:function:dev-Hello-World),但是Ansible脚本会生成带有版本号的arn(arn:aws:lambda:us-west- 2:1234567890:function:dev-Hello-World:50)。我使用set_fact和json查询来获取arn。但是,我想最后删除版本号和冒号。
我尝试使用正则表达式并替换以删除字符串。我是JSON和编程新手。
- name: Get the Hello-world arn
set_fact:
populate_arn: "{{ Hello-World | json_query('results[0].configuration.function_arn')}}"
- debug:
var: populate_arn
预期结果:arn:aws:lambda:us-west-2:1234567890:function:dev-Hello-World
实际结果:arn:aws:lambda:us-west-2:1234567890:function:dev-Hello-World:50
答案 0 :(得分:0)
首先,从the Lambda API documentation可以看出,ARN是该函数的正确,稳定的标识符。如果删除:50
限定词,则将得到:$LATEST
的任何内容,它们绝对会产生错误的结果
也就是说,json_query
的输出只是一个字符串,因此您可以使用regex_replace
继续您的jinja2管道以剥离限定符:
- set_fact:
populate_arn: "{{ Hello-World | json_query('results[0].configuration.function_arn') | regex_replace(':[^:]+$', '') }}"