4

尝试通过AWS SAM CLI. 我正在使用我打包和部署的 SAM 简化模板。

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

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

MyProjectQueue:
    Type: AWS::SQS::Queue
    Properties:
        Events:
            MyProjectApi:
                Type: Api
                Properties:
                    Path: /myproject/push
                    Method: post

当我运行时一切都很好sam validatesam 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

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

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

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

谢谢!

4

3 回答 3

5

AWS::SQS::QueueEvents资源类型不AWS::Serverless::Function支持. Amazon API Gateway 确实支持直接调用另一个 AWS 服务(如 SQS)的资源方法,而无需中间的 Lambda 函数。

我的建议是您AWS::Serverless::Api在 SAM 模板中创建一个资源,该资源引用定义 API 资源方法的 OpenAPI (Swagger) 文件。然后使用x-amazon-apigateway-integration OpenAPI 扩展来定义 API 资源方法和 SQS 队列之间的集成。

我还建议遵循链接的 AWS 文档提示并使用控制台首先定义您与 SQS 的集成,然后将其导出到 OpenAPI 定义文件。这比尝试从头开始编写 OpenAPI 文件更容易。

于 2018-10-31T08:52:59.760 回答
0

您可能已经想出了解决方案。对于那些还没有的人,可以通过使用 api 网关的 x-amazon-apigateway-integration 属性来实现此功能,其中 API 网关充当将有效负载推送到 SQS 队列的代理。有关更多说明,请查看此https://medium.com/@pranaysankpal/aws-api-gateway-proxy-for-sqs-simple-queue-service-5b08fe18ce50

于 2021-12-13T11:39:13.290 回答
-2

您面临的错误是预期的。根据其文档AWS::SQS::Queue不支持Events属性而支持。AWS::Serverless::Function

不确定我是否完全理解您的用例,但我建议您查看Events函数的属性,因为您应该能够将 SQS 定义为 Event Source

于 2018-10-30T22:08:24.687 回答