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

使用@aws-sdk在AWS Lambda发送SQS消息时遇MissingParameter错误

问题描述

尝试从AWS Lambda向AWS SQS发送消息时失败,抛出如下错误:

2022-12-26T14:58:31.651Z    282ada00-ea4a-45b6-afe4-e3a7f16e8c5a    INFO    MissingParameter: The request must contain the parameter Label.
    at throwDefaultError (/var/task/node_modules/@aws-sdk/smithy-client/dist-cjs/default-error-handler.js:8:22)
    at deserializeAws_queryAddPermissionCommandError (/var/task/node_modules/@aws-sdk/client-sqs/dist-cjs/protocols/Aws_query.js:292:51)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async /var/task/node_modules/@aws-sdk/middleware-serde/dist-cjs/deserializerMiddleware.js:7:24
    at async /var/task/node_modules/@aws-sdk/middleware-signing/dist-cjs/middleware.js:14:20
    at async /var/task/node_modules/@aws-sdk/middleware-retry/dist-cjs/retryMiddleware.js:27:46
    at async /var/task/node_modules/@aws-sdk/middleware-logger/dist-cjs/loggerMiddleware.js:5:22
    at async sendToSQS (/var/task/sendToSqs.js:28:20)
    at async exports.handler (/var/task/index.js:19:22) {
  '$fault': 'client',
  '$metadata': {
    httpStatusCode: 400,
    requestId: 'bf137e9a-24bc-52bd-9416-22b99c6b82f5',
    extendedRequestId: undefined,
    cfId: undefined,
    attempts: 1,
    totalRetryDelay: 0
  },
  Type: 'Sender',
  Code: 'MissingParameter',
  Detail: ''
}

用于发送消息的代码如下(主模块传递简单数据作为消息内容):

const { SQSClient, AddPermissionCommand } = require("@aws-sdk/client-sqs");


 const sendToSQS=async(data)=>{
    const client = new SQSClient({ region: "eu-west-1" });


    var params = {
      DelaySeconds: 0,
      MessageAttributes: {
        "Author": {
          DataType: "String",
          StringValue: "event params"
        },
      },
      MessageGroupId:`${data}`,
      MessageBody:JSON.stringify(data),
      QueueUrl:"https://sqs.eu-west-1.amazonaws.com/000011110000/Salesforce-cqd-orders-delayer-retry"
    };
    
    
    try{
        
    const command = new AddPermissionCommand(params);
        
    let queueRes = await client.send(command);
    
    console.info("[LAMBDA/@sqs] retry mechanism has succeeded. Data sent to SQS successfully")
    console.log(queueRes)
   
         const response = {
            statusCode: 200,
            body: "Data sent from lambda to sqs successfully.",
        }; 
    return response
            
        
        
    }catch(error){
        
        console.error("[LAMBDA/@s] retry mechanism has failed. Data wasn't sent to SQS")
        console.log(error)
        
            
        const response = {
            statusCode: 200,
            body: "Lambda to SQS error",
        };
    
        return response;
        
}


 }


 module.exports={sendToSQS}
问题根源

你用错了SQS的API命令:AddPermissionCommand是用来给SQS队列添加权限的(比如允许其他AWS账户访问队列),这个命令必须要求Label参数,所以才会抛出"MissingParameter: The request must contain the parameter Label"错误。而你实际需要的是发送消息到队列,应该使用SendMessageCommand。

修复方案

修改代码中的命令导入和实例化部分,具体如下:

const { SQSClient, SendMessageCommand } = require("@aws-sdk/client-sqs"); // 替换AddPermissionCommand为SendMessageCommand


 const sendToSQS=async(data)=>{
    const client = new SQSClient({ region: "eu-west-1" });


    var params = {
      DelaySeconds: 0,
      MessageAttributes: {
        "Author": {
          DataType: "String",
          StringValue: "event params"
        },
      },
      MessageGroupId:`${data}`, // 仅FIFO队列需要该参数,标准队列可移除
      MessageBody:JSON.stringify(data),
      QueueUrl:"https://sqs.eu-west-1.amazonaws.com/000011110000/Salesforce-cqd-orders-delayer-retry"
    };
    
    
    try{
        
    const command = new SendMessageCommand(params); // 替换AddPermissionCommand为SendMessageCommand
        
    let queueRes = await client.send(command);
    
    console.info("[LAMBDA/@sqs] retry mechanism has succeeded. Data sent to SQS successfully")
    console.log(queueRes)
   
         const response = {
            statusCode: 200,
            body: "Data sent from lambda to sqs successfully.",
        }; 
    return response
            
        
        
    }catch(error){
        
        console.error("[LAMBDA/@s] retry mechanism has failed. Data wasn't sent to SQS")
        console.log(error)
        
            
        const response = {
            statusCode: 200,
            body: "Lambda to SQS error",
        };
    
        return response;
        
}


 }


 module.exports={sendToSQS}

额外说明:

  • MessageGroupId是FIFO队列的必填参数,如果你的队列是标准队列,可以移除这个参数;如果是FIFO队列,保留即可。
  • 确保Lambda的IAM角色拥有sqs:SendMessage权限,否则会出现权限错误。

内容的提问来源于stack exchange,提问作者That Coder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:15:39