我创建了一个AWS lambda,当我对其进行测试以及通过cloudwatch规则手动创建cron作业时,它可以很好地工作。
它将度量标准报告为调用(未失败),并记录有关执行的详细信息。
然后,我决定删除该手动创建的cloudwatch规则,以创建具有ansible的规则。
- name: Create lambda service.
lambda:
name: "{{ item.name }}"
state: present
zip_file: "{{ item.zip_file }}"
runtime: 'python2.7'
role: 'arn:aws:iam::12345678901:role/lambda_ecr_delete'
handler: 'main.handler'
region: 'eu-west-2'
environment_variables: "{{ item.env_vars }}"
with_items:
- name: lamda_ecr_cleaner
zip_file: assets/scripts/ecr-cleaner.zip
env_vars:
'DRYRUN': '0'
'IMAGES_TO_KEEP': '20'
'REGION': 'eu-west-2'
register: new_lambda
- name: Schedule a cloudwatch event.
cloudwatchevent_rule:
name: ecr_delete
schedule_expression: "rate(1 day)"
description: Delete old images in ecr repo.
targets:
- id: ecr_delete
arn: "{{ item.configuration.function_arn }}"
with_items: "{{ new_lambda.results }}"
这就创建了几乎完全相同的cloudwatch规则。我可以看到的与手动创建的唯一区别是在目标中,当手动创建时,lambda版本/别名设置为“默认”,而将其设置为version时,则使用ansible创建时具有相应的版本号。
使用ansible创建的cloudwatch规则仅调用失败。
知道为什么会这样吗?我看不到任何日志。有没有办法通过ansible中的cloudwatchevent_rule模块将版本设置为Default?
最佳答案
我也为此花费了很多时间,同样的错误和困惑(为什么没有失败发票的日志?),我将分享我的““解决方案”“,它将解决这个问题给某人,并且将帮助其他人调试并找到最终的解决方案。
注意:请谨慎,这可能允许任何AWS账户执行您的lambda函数
由于您是通过手动创建规则目标来调用该函数的,因此我假设您已从CloudWatch向lambda添加了调用权限,但是当该事件由cli / api创建以及由何时创建时,看起来源帐户ID是不同的de AWS仪表板/控制台
如果您要在lambda中添加源帐户条件,请从主体“ events.amazonaws.com”调用权限以防止任何AWS账户执行您的lambda,只需将其删除(在您的责任之下!)。
因此,如果您的Lambda策略如下所示:
{
"Sid": "<sid>",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "lambda:InvokeFunction",,
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "<account-id>"
}
},
"Resource": "arn:aws:lambda:<region>:<account-id>:function:<lambda-function>"
}
删除“条件”字段
{
"Sid": "sid",
"Effect": "Allow",
"Principal": {
"Service": "events.amazonaws.com"
},
"Action": "lambda:InvokeFunction",,
"Resource": "arn:aws:lambda:<region>:<account-id>:function:<lambda-function>"
}
而且“也许”它将为您工作。
我认为当cli / api创建事件时,cloudwatch事件所有者/创建者数据正在发生一些奇怪的事情……也许是错误?不确定。我会继续努力
关于amazon-web-services - Ansible Cloudwatch规则报告调用失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43364956/