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

Serverless部署Laravel调用AWS SQS投递任务返回SignatureDoesNotMatch错误

错误根因

你遇到的SignatureDoesNotMatch错误由两个核心配置不匹配导致:

  1. 区域不匹配:serverless.yml中指定资源部署在us-east-2区域,SQS队列也创建在该区域,但Laravel队列配置里SQS的请求区域默认设为us-east-1,签名凭证的区域和请求目标区域不一致被AWS拒绝。
  2. 队列地址未正确解析:报错请求URL中存在未替换的模板占位符${construct:jobs.queueUrl},说明Laravel队列配置未填入正确的SQS队列地址。
修复步骤

1. 修正Laravel队列配置

编辑项目中config/queue.php的SQS配置段,确保区域和队列参数匹配你的部署配置:

'sqs' => [
    'driver' => 'sqs',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_REGION', 'us-east-2'), // 和serverless.yml的region保持一致
    'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-2.amazonaws.com/你的AWS账号ID'),
    'queue' => env('SQS_QUEUE', 'AlertQueue'), // 对应你在serverless.yml中创建的队列名
],

无需手动填写AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,Lambda运行时会自动注入执行角色的临时凭证

2. 在serverless.yml中注入环境变量并配置权限

在serverless.yml的provider段补充以下配置,避免硬编码队列信息,同时给Lambda开放SQS操作权限:

provider:
  name: aws
  region: us-east-2
  # 保留你原来的其他provider配置
  # 新增环境变量注入
  environment:
    AWS_REGION: ${self:provider.region}
    SQS_QUEUE_ARN: !GetAtt AlertQueue.Arn
  # 新增IAM权限配置
  iam:
    role:
      statements:
        - Effect: Allow
          Action:
            - sqs:SendMessage
            - sqs:ReceiveMessage
            - sqs:DeleteMessage
            - sqs:GetQueueAttributes
          Resource:
            - !GetAtt AlertQueue.Arn
            - !GetAtt DeadLetterQueue.Arn

3. 清理无效占位符

检查你的.env或者队列配置,删除所有未定义的${construct:jobs.queueUrl}类占位符,直接使用上面注入的环境变量读取队列地址即可。

4. 重新部署生效

运行serverless deploy重新发布服务,配置即可生效。


内容的提问来源于stack exchange,提问作者Isaque Palmieri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:24:02