【发布时间】:2021-06-19 07:45:45
【问题描述】:
背景:
我正在通过 Terraform 开发自定义 AWS github-webhook。我正在使用 AWS API Gateway 触发 AWS Lambda 函数,该函数从请求标头验证 GitHub Webhook 的 sha256 签名。如果 lambda 函数成功验证请求,我希望通过 Lambda 提供的异步调用目标功能调用子 lambda 函数。
问题:
即使我已经使用目标子 Lambda 函数配置了异步调用,但在父 Lambda 函数成功时不会触发子函数。这反映在子 Lambda 函数的关联 CloudWatch 日志组为空这一事实。
相关代码:
这是 Lambda 函数目标的 Terraform 配置:
resource "aws_lambda_function_event_invoke_config" "lambda" {
function_name = module.github_webhook.function_name
destination_config {
on_success {
destination = module.lambda.function_arn
}
}
}
如果需要模块中的更多代码,请随时在 cmets 中询问。该模块的完整源代码在这里:https://github.com/marshall7m/terraform-aws-codebuild/tree/master/modules/dynamic-github-source
尝试:
- 确保父/子 Lambda 函数都有权在各自的 Cloudwatch 日志组中创建日志(均附有
arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole政策) - 确保父 Lambda 函数具有调用子函数的正确权限:
"lambda:InvokeFunction", "lambda:InvokeAsync" - 为成功和失败的父 Lambda 运行设置子 lambda 函数的异步调用(子函数仍未触发)
- 添加 API 集成请求参数 `{'X-Amz-Invocation-Type': 'Event'},如:https://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-lambda-integration-async.html
- 对于解决此问题的每一次尝试,我都确保从源(github webhook 页面)重新发送请求,而不是通过 AWS Lambda 控制台。
【问题讨论】:
标签: amazon-web-services aws-lambda amazon-cloudwatch