Как создать очередь SQS с облачной информацией / SAM, которая работает с лямбдами, созданными с помощью SAM?

Я создаю лямбды из AWS SAM, в основном они работают хорошо, но я не уверен, как разрешить запуск этих лямбд с помощью SQS. Всякий раз, когда я создаю / упаковываю / развертываю, я пытаюсь вручную добавить триггер SQS из консоли и получаю следующую ошибку:

An error occurred when creating the trigger: The provided execution role does not have permissions to call ReceiveMessage on SQS (Service: AWSLambda; Status Code: 400; Error Code: InvalidParameterValueException

Я полностью понимаю, что было бы идеально создать SQS с SAM, однако я не могу найти достойных руководств, в частности о том, как создавать файлы yaml для развертывания с помощью. Мне было интересно, означает ли эта ошибка, что мне нужно добавить политику в template.yaml перед сборкой / пакетом / развертыванием. Поэтому я добавил в yaml следующие политики в разделе Ресурсы: MyFunction: Properties: policy:

- SQSSendMessagePolicy:
    QueueName: "*"
- SQSPollerPolicy:
    QueueName: "*"

Я получил их от здесь, но я не вижу правила «получать сообщение от SQS», я не знаю, где еще его получить? Или даже проблема в этом?

Я также попытался добавить в yaml следующее:

  Events:
    MySQSEvent:
      Type: SQS
      Properties:
        Queue: 
          !GetAtt arn:aws:sqs:eu-west-1:my_arn.my_queue
        BatchSize: 10

Однако это дает мне следующую ошибку при попытке развернуть:

Template error: instance of Fn::GetAtt references undefined resource arn:aws:cloudformation:eu-west-1:my_arn

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

Все, что я хочу добиться, - это передать список событий в SQS (возможно, с лямбда-выражением), который затем поставит в очередь еще одну лямбду для получения этих событий партиями по 10 (всего около 20 000). Мне нужно иметь возможность делать это с помощью SAM - единственное предостережение. Я ценю, что создание лямбда-выражений на консоли значительно упростит это, но это не подходит для управления версиями.

Пока я смотрел на следующее и не вижу очевидного решения, информация кажется не совсем правильной для моего варианта использования; SO, вопрос 1, СО вопрос 2, учебное пособие по aws alter stack , шаблоны облачной информации AWS, руководство по dzone, aws docs.

Был бы очень признателен за любые указатели / помощь / практические руководства / полные рабочие решения?

Большое спасибо


person user3062260    schedule 24.07.2019    source источник


Ответы (1)


Ваша часть событий должна быть такой

Events:
MySQSEvent:
  Type: SQS
  Properties:
    Queue: !GetAtt QUEUE_NAME.Arn

Где QUEUE_NAME - логическое имя вашей очереди SQS в шаблоне Cloud Formation.

person Haider Ali    schedule 24.07.2019
comment
Спасибо за вашу помощь, теперь у меня появилась новая ошибка: не удалось создать набор изменений: Waiter ChangeSetCreateComplete failed: Waiter обнаружил состояние сбоя терминала. Статус: FAILED. Причина: ошибка шаблона: ресурс QUEUE_NAME не поддерживает тип атрибута arn в Fn :: GetAtt - person user3062260; 24.07.2019
comment
Можете ли вы опубликовать фрагмент своей очереди SQS и лямбда-функции? - person Haider Ali; 25.07.2019
comment
Наконец обнаружил ошибку! Нейминг очень суетливый! Я использовал стандартное имя CamelCase для своей очереди проектов и ничего не думал об этом, но по какой-то причине DbfToEaLambdaQueue не работает, но MySqsQueue в порядке. Просто отправьте сообщение на случай, если кто-то еще застрянет на этом! Вот регулярное выражение, которому должен удовлетворять автоматически сгенерированный arn: arn: (aws [a-zA-Z0-9 -] *): ([a-zA-Z0-9 \ -]) +: ([az] {2} ( (-gov) | (-iso (b?)))? - [az] + - \ d {1})?: (\ d {12})?: (. *) Спасибо за помощь! - person user3062260; 25.07.2019