Как создать очередь AWS SQS с бессерверной системой
Предполагается, что вы знакомы с AWS и Serverless Framework.
Это покажет только соответствующие параметры конфигурации для развертывания новой очереди SQS с использованием Serverless. Внизу вы можете найти ссылку на то, как отправить сообщение SQS с помощью Node.
Ожидаемый результат
- Очередь AWS SQS, запускающая лямбду (триггер необязательный, вы все равно можете создать очередь без триггера).
- URL-адрес очереди SQS сохраняется как переменная среды, которую мы можем использовать в остальной части приложения.
Я показываю здесь только соответствующие части бессерверного yaml. У вашего файла наверняка будут другие конфигурации. Это просто для того, чтобы сосредоточить внимание исключительно на части SQS.
serverless.yml
... provider: name: aws runtime: nodejs12.x region: us-east-1 stage: prod environment: ... SQS_QUEUE_URL: { Ref: NewSQSQueue } iamRoleStatements: - Effect: Allow Action: - sqs:* Resource: Fn::GetAtt: [ NewSQSQueue, Arn ] ... resources: Resources: NewSQSQueue: Type: "AWS::SQS::Queue" Properties: QueueName: sqs-queue-${opt:stage, self:provider.stage}.fifo FifoQueue: true
Это создаст одну новую очередь SQS с обслуживанием в порядке очереди (FIFO) и соответствующие роли IAM, необходимые для ее использования.
Имя очереди будет sqs-queue-prod.fifo
(все очереди FIFO должны заканчиваться суффиксом .fifo), а URL-адрес SQS будет использоваться в остальной части вашего приложения в качестве переменной среды с использованием process.env.SQS_QUEUE_URL
.
Лямбда-триггер (необязательно)
Если вы хотите, чтобы лямбда запускалась при получении нового сообщения SQS, вы можете добавить простую лямбду с триггером события, который выглядит следующим образом:
eventRouter: handler: src/handlers/event_router.handler events: - sqs: arn: Fn::GetAtt: - NewSQSQueue - Arn
Он будет вызываться каждый раз, когда сообщение отправляется в только что созданную очередь.