【发布时间】:2017-12-30 04:16:37
【问题描述】:
按照blog post 启用在每个 ecs 主机上运行任务,我创建了一个 Ansible 角色,该角色成功创建了触发 Lambda 函数的 Cloudwatch 事件规则。
事件规则在 AWS 控制台中看起来没问题,并且似乎在指标中被触发,但 lambda 函数没有运行(ecs 服务未更改)。
当简单地编辑规则并保存它不做任何更改时,规则开始工作,并且 ecs 服务按预期更改。
这是我最初的剧本和角色,如果需要,我可以创建一个更简单的示例。
剧本:
- name: "create lambda and cloudwatch event rules"
hosts: localhost
roles:
- {
role: aws/lambda/lookup,
lambda: ecs-task-on-all-hosts,
lambda_lookup_register_as: lambda_lookup
}
- {
role: aws/cloudwatch/event/rule/create,
event_rule: ecs-task-on-all-hosts,
cluster: "{{ cluster }}",
lambda_ecs_task_on_all_hosts_arn: "{{ lambda_lookup.arn }}"
}
角色aws/lambda/lookup:
- name: "lookup lambda {{ lambda }}"
lambda_facts:
region: "{{ region }}"
query: config #right now everything we need is given here
function_name: "{{ lambda }}"
register: _lambda_function_details
- name: "set lambda lookup result facts"
set_fact:
"{{ lambda_lookup_register_as }}":
arn: "{{ _lambda_function_details.ansible_facts.lambda_facts.function[lambda].function_arn }}"
name: "{{ _lambda_function_details.ansible_facts.lambda_facts.function[lambda].function_name }}"
角色aws/cloudwatch/event/rule/create:
tasks/main.yml
- name: "include variables in file {{ event_rule }}.yml"
include_vars: "files/{{ event_rule }}.yml"
- name: "verify mandatory parameters were provided"
include_role:
name: utilities/verify-parameters
vars:
mandatory: "{{ event_mandatory_parameters }}"
when: event_mandatory_parameters is defined
- name: "create cloudwatch event rule"
cloudwatchevent_rule:
region: "{{ region }}"
name: "{{ event_definition.name }}"
description: "{{ event_definition.description }}"
event_pattern: "{{ event_definition.event_pattern | to_json }}"
targets: "{{ event_definition.targets }}"
正在使用的文件files/ecs-task-on-all-hosts:
event_mandatory_parameters: [ "cluster", "lambda_ecs_task_on_all_hosts_arn" ]
event_definition:
name: ecs-task-on-all-hosts
description: Ensure a task is running on all hosts in the cluster
event_pattern: |-
{
"source": [
"aws.ecs"
],
"detail-type": [
"ECS Container Instance State Change"
],
"detail": {
"clusterArn": [
"arn:aws:ecs:{{ region }}:{{ account_id }}:cluster/{{ cluster }}"
]
}
}
targets:
- id: lambda_ecs_task_on_all_hosts
arn: "{{ lambda_ecs_task_on_all_hosts_arn }}"
here 提出了一个类似的问题,但它有点不同,仍然没有答案,所以我在这里提供了所有我能提供的细节。如果需要更多信息,请告诉我。
【问题讨论】:
标签: ansible aws-lambda amazon-cloudwatch amazon-ecs