2

我正在尝试使用 ansible playbook 自动化部署和调用 lambda 函数。为了获取 lambda 函数的 arn,我编写了一个 json 查询。但是在这里,我只需要 arn(arn:aws:lambda:us-west-2:1234567890:function:dev-Hello-World) 但 Ansible 脚本会生成带有版本号的 arn (arn:aws:lambda:us-west- 2:1234567890:功能: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

4

1 回答 1

1

首先,从Lambda API 文档中可以看出,ARN 是函数的正确、稳定的标识符。如果您删除:50限定符,您将得到:$LATEST绝对会产生错误结果的任何内容

也就是说,输出json_query只是一个字符串,因此您可以继续使用 jinja2 管道(如您所述)regex_replace以剥离限定符:

- set_fact:
    populate_arn: "{{ Hello-World | json_query('results[0].configuration.function_arn') | regex_replace(':[^:]+$', '') }}"
于 2019-01-03T23:34:49.043 回答