You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lambda函数无法向SQS目标发送消息,求技术排查建议

Lambda调用后SQS收不到消息的排查建议

结合你提供的Terraform配置,先指出几个直接的配置错误,再给你分步排查方向:

一、配置里的明显错误

  1. SQS队列策略资源ARN不匹配
    你的SQS队列名称是SQSqueue,但队列策略里的Resource写的是arn:aws:sqs:us-east-1:694418723508:test_lambda,完全和实际队列不符,必须改成队列的正确ARN:arn:aws:sqs:us-east-1:694418723508:SQSqueue。另外当前策略给了*全权限,生产环境建议收紧,先确保功能正常再说。

  2. Lambda权限的函数名引用不规范
    aws_lambda_permission.allow_bucket里的function_name直接写死字符串test_lambda,建议改成引用资源属性aws_lambda_function.test_lambda.function_name,避免手动输入出错。

  3. IAM角色策略附件参数错误
    aws_iam_role_policy_attachment.test-attach中的policy_arn用了aws_iam_policy.policy.id,规范写法应该用aws_iam_policy.policy.arn,虽然部分场景id和arn可能一致,但按官方要求来更稳妥。

二、分步排查流程

  • 先确认Lambda有没有被触发
    去CloudWatch日志里找Lambda的执行日志,要是连日志都没有,说明S3的通知根本没触发Lambda:

    • 登录AWS控制台,去S3桶的「属性」-「事件通知」里确认规则存在,且你上传的文件符合AWSLogs/前缀和.log后缀的过滤条件。
    • 检查aws_lambda_permission.allow_bucket是否生效,确保S3有权限调用Lambda。
  • 确认Lambda执行是否成功
    如果有Lambda日志,仔细看日志里有没有报错:

    • 核对Lambda的IAM角色权限,确保sqs:SendMessage的资源ARN和目标SQS队列完全一致。
    • 检查Lambda代码逻辑,有没有未捕获的异常导致执行失败(失败的话,异步调用的成功目标不会收到消息),或者代码里是否正确走了成功分支。
  • 确认SQS能不能接收消息
    就算Lambda有权限发消息,也要确保SQS允许接收:

    • 修正队列策略的资源ARN后,在控制台手动给SQS发一条测试消息,确认队列本身没问题。
    • 检查SQS的访问策略是否允许Lambda所在账号发送消息。
  • 检查Lambda异步调用配置
    去Lambda控制台的「配置」-「异步调用」里,确认成功目标确实设置成了你的SQS队列,确保aws_lambda_function_event_invoke_config.example配置生效。

修正后的关键配置片段

修正后的SQS队列策略

resource "aws_sqs_queue_policy" "test" {
  queue_url = aws_sqs_queue.sqs_trigger.id

  policy = <<POLICY
{
"Version": "2012-10-17",
"Id": "sqspolicy",
"Statement": [
{
  "Sid": "First",
  "Effect": "Allow",
  "Principal": "*",
  "Action": "sqs:SendMessage",
  "Resource": "arn:aws:sqs:us-east-1:694418723508:SQSqueue"
   }
  ]
 }
POLICY
}

修正后的Lambda权限

resource "aws_lambda_permission" "allow_bucket" {
  statement_id  = "AllowS3Bucket"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.test_lambda.function_name
  principal     = "s3.amazonaws.com"
  source_arn    = aws_s3_bucket.bucket.arn
}

修正后的IAM角色策略附件

resource "aws_iam_role_policy_attachment" "test-attach" {
  role       = aws_iam_role.role.id
  policy_arn = aws_iam_policy.policy.arn
}

内容的提问来源于stack exchange,提问作者Dany Munoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:37:51