我在尝试通过 部署我的堆栈时遇到问题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
我有一个异步 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) amazon-sqs ×2
aws-lambda ×1
aws-sam ×1
aws-sam-cli ×1
aws-sdk-mock ×1
javascript ×1
node.js ×1