Шаблон AWS SAM - определение очереди SQS, запускаемой шлюзом API - PullRequest
0 голосов
/ 30 октября 2018

Я столкнулся с проблемой при попытке развернуть свой стек через 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 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

Там ясно сказано, что Events it's not supported for AWS::SQS::Queue. Но это работает для Lambdas (тип ресурса AWS::Serverless::Function), поэтому я попробовал этот способ.

Но, если возможно, я бы хотел избежать лямбды между шлюзом и очередью.

Можно ли определить шлюз API непосредственно для очереди SQS? И как?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Тип ресурса AWS :: SQS :: Queue не поддерживает свойство Events, например AWS::Serverless::Function. Amazon API Gateway поддерживает методы ресурсов, напрямую вызывающие другую службу AWS, например SQS, без необходимости использования лямбда-функции.

Я рекомендую вам создать ресурс AWS::Serverless::Api в шаблоне SAM, который ссылается на файл OpenAPI (Swagger), определяющий методы ресурса API. Затем используйте расширение x-amazon-apigateway-интеграции OpenAPI, чтобы определить интеграцию между методом ресурса API и очередью SQS.

Я также рекомендую следовать связанному совету по документации AWS и использовать консоль, чтобы сначала определить вашу интеграцию с SQS, а затем экспортировать ее в файл определения OpenAPI. Это будет проще, чем пытаться записать файл OpenAPI с нуля.

0 голосов
/ 31 октября 2018

Ожидается ошибка, с которой вы сталкиваетесь. AWS::SQS::Queue не поддерживает Events свойство в соответствии с документацией , в то время как AWS::Serverless::Function поддерживает .

Не уверен, что я полностью понял ваш вариант использования, но я предлагаю вам взглянуть на свойство Events вашей функции, так как вы сможете определить SQS в качестве источника события .

...