小编Sal*_*tro的帖子

AWS SAM 模板 - 定义由 API Gateway 触发的 SQS 队列

我在尝试通过 部署我的堆栈时遇到问题AWS SAM CLI。我正在使用我打包和部署的 SAM 简化模板。

我想要的只是创建一个 SQS 队列并隐式创建一个 API 网关,该网关仅将有效负载放入队列中。

这是我到目前为止所尝试的(我定义 Queue + Api 的代码段):

MyProjectQueue:
    Type: AWS::SQS::Queue
    Properties:
        Events:
            MyProjectApi:
                Type: Api
                Properties:
                    Path: /myproject/push
                    Method: post
Run Code Online (Sandbox Code Playgroud)

sam validate当我跑步时一切都很好sam package,但当我跑步时却失败了sam deploy。获取我使用的错误aws cloudformation describe-stack-events --stack-name myproject-stack

STACKEVENTS     
MyProjectQueue-CREATE_FAILED-2018-10-30T16:33:29.764Z       
MyProjectQueue                      
CREATE_FAILED   
Encountered unsupported property Events AWS::SQS::Queue arn:aws:cloudformation:eu-west-1:<MY_AWS>:stack/myproject-stack/<GIUD>     
myproject-stack  2018-10-30T16:33:29.764Z
Run Code Online (Sandbox Code Playgroud)

它清楚地表明了这一点Events it's not supported for AWS::SQS::Queue。但这适用于 Lambda(资源类型AWS::Serverless::Function),这就是我尝试这种方式的原因。

但是,如果可能的话,我想避免在网关和队列之间使用 lambda。

是否可以直接为SQS队列定义API网关?如何?

谢谢!

amazon-sqs amazon-web-services aws-cloudformation aws-sam-cli aws-sam

6
推荐指数
2
解决办法
2661
查看次数

测试异步 SQS sendMessage

我有一个异步 lambda,它执行异步 SQS sendMessage 请求。SQS 队列是标准队列,不是 FIFO,只是为了澄清。

这是一个代码示例(没有不相关的逻辑部分):

exports.functionHandler = async (event, context, callback) => {
    try {
        let parsedBody = JSON.parse(event.Records[0].body);
        let modifiedBody = await doStuff(parsedBody);

        let sqsPayload = {
            MessageBody: JSON.stringify(modifiedBody),
            QueueUrl: my-queue-url
        };

        await sqs.sendMessage(sqsPayload).promise();

        callback(null, utils.respondSuccess("Done"));
    } catch (err) {
        // Handle error

        callback(null, utils.respondError(err));
    }
};

const doStuff = async payload => {
    // Do stuff 
}
Run Code Online (Sandbox Code Playgroud)

很简单。

现在的问题是:我正在尝试使用包来测试这个功能aws-sdk-mock。当 lambda 不是异步的并且 sendMessage 函数正在使用回调时,这就是我如何存根 sendMessage 函数:

it("an awesome title for my test", async () …
Run Code Online (Sandbox Code Playgroud)

javascript amazon-sqs node.js aws-lambda aws-sdk-mock

2
推荐指数
1
解决办法
1万
查看次数