На прошлой неделе наша команда решила представить API с помощью API-шлюза API Gateway для использования SQS без использования лямбда-функции. Мы начали изучать Amazon API Gateway и нашли несколько учебных пособий для SNS, DDB, S3 и Kinesis, но я не смог найти что-то хорошее для SQS.
Поэтому я решил сделать это сам и опубликовать это для людей, которым это нужно для собственного проекта.
В этой части работы я собираюсь показать, как описать
-
Создайте очередь Amazon SQS.
-
Создайте политику и роль Amazon IAM (для доступа к очереди SQS).
-
Опубликовать API на API-шлюзе.
-
Отправлять и получать сообщения (одиночные и пакетные) через API-шлюз.
Для этой статьи:
-
Я предполагаю, что вы уже создали учетную запись в Amazon и знаете, как использовать управляемые сервисы AWS, включая API-шлюз и SQS.
-
В конце демонстрации НЕ забывайте удалять API, роль и политику IAM и очередь SQS.
Создание очереди Amazon SQS
Это самый простой шаг, вам просто нужно получить доступ к панели инструментов службы SQS и следовать инструкциям:
Выберите Создать новую очередь и введите имя очереди. Если вам нравится, вы можете изменить настройки очереди на ваши предпочтительные настройки. Здесь я собираюсь установить имя очереди в «demoqueue», и я выбрал значения по умолчанию.
После создания очереди запишите ARN вашей очереди (Amazon Resouce Name). ARN — это уникальный идентификатор ресурса, назначенный AWS, и представляет собой комбинацию am: aws: sqs: YOUR-REGION: ACCOUNT-ID: YOUR-QUEUE-NAME.
После создания своей очереди мне нужно настроить политику и роль IAM для шлюза Amazon API, чтобы получить доступ к очереди «demoqueue».
Создание политики и роли Amazon IAM
Как вы, возможно, знаете, вам нужно настроить разрешения (комбинацию ролей и политик) для управляемых сервисов AWS, таких как API-шлюз и Redshift, чтобы они могли получить доступ к вашей очереди. Следующие шаги описывают, как настроить политику IAM и создать настраиваемую роль для Amazon API Gateway для отправки или получения сообщения из демо-очереди.
Переключитесь на панель управления IAM и выберите вкладку Policies в меню справа; Вы должны увидеть следующее диалоговое окно, затем выберите « Создать политику » и перейдите к следующему шагу
IAM предоставляет вам несколько вариантов: вы можете выбрать либо Генератор политик, либо Создать собственную политику. Если вы хотите начать с шаблона в качестве основы, то вы можете пойти с первым вариантом. В этом руководстве давайте сделаем его простым, просто скопируйте и вставьте следующий пример политики ниже, но не забудьте заменить YOUR-SQS- ARN значением ARN в очереди.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Resource": [
"YOUR-SQS-ARN"
],
"Action": [
"sqs:SendMessage",
"sqs:ReceiveMessage"
]
}
]
}
Я назвал свою политику apigateway-sqs-demoqueue-access-policy и добавил описание для нее.
В конце выберите Create Policy и запишите имя политики для следующих нескольких шагов.
На панели инструментов IAM выберите Роли и выберите Создать новую роль . Чтобы создать роль, нам нужно выбрать тип роли (Amazon API Gateway) и установить доверие к роли, а затем прикрепить политику, созданную на предыдущем шаге, к роли, как показано ниже.
До сих пор мы создали очередь SQS (demoqueue) и роль IAM. У вас должно быть два ARN следующим образом:
Ресурс | ARN |
Amazon SQS |
ARN: AWS: SQS: ар-юго-2: ВАШ СЧЕТ-ID- : YOUR-QUEU-NAME |
Роль Amazon IAM |
arn: aws: iam :: YOUR-ACCOUNT-ID : роль / YOUR-ROLE-NAME |
Публикация API на Amazon API Gateway
Чтобы отправлять и получать сообщения в очередь SQS, я собираюсь показать вам, как опубликовать API в Amazon API Gateway, и определить необходимые ресурсы и методы для этого.
Я решил разделить этот шаг на две части:
-
Часть A: Создание ресурсов, подресурсов и связанных с ними HTTP-методов.
-
Часть B: Настройка интеграции методов HTTP и параметров выполнения для службы SQS.
Давайте начнем с части А сейчас!
Часть A: Создание ресурсов, субресурсов и метода HTTP
Как вы можете видеть ниже, мой путь API начинается с версии (/ v1) и сопровождается подресурсом или действием. Вы можете поинтересоваться другими подресурсами, / batch / и / purge, в определении API. Они используются для отправки пакетных сообщений в очередь и для удаления сообщений из очереди, но они не являются обязательными для этого руководства, и вы можете найти их реализацию в моем репозитории GitHub.
POST /v1/send # Sending a single message [You can use GET as well]
GET /v1/receive # Recieving messages
DELETE /v1/purge # Purging a message using handler (optional)
POST /v1/batch/send # Sending batch messages (optional)
DELETE /v1/batch/purge # Purging batch messages (optional)
1- Из сервисов AWS выберите Amazon API Gateway; После отображения панели управления API Gateway выберите « Создать новый API», а затем « Новый API» .
Как только наш API будет готов, мы должны начать создавать ресурсы API, перечисленные во введении к Части А.
Создайте ресурс / v1, как показано здесь:
Затем создайте подресурс для / v1 / send в ресурсе / v1:
Как только вы закончили создание ресурса, нам нужно добавить метод HTTP (POST) к нашим ресурсам, выбрав « Действие»> «Создать метод» . Для создания метода нам нужно указать тип интеграции (сервис AWS), регион AWS (ваш конкретный регион) и сервис AWS (SQS). В дополнение к этому, для доступа к нашей очереди API-шлюзу требуется разрешенная роль IAM (как упоминалось выше, используйте созданную IAM роль ARN).
Повторите шаги выше для других подресурсов (вы можете пока игнорировать пакетную очистку и очистку), и вы должны получить следующую структуру:
Теперь мы начнем работать над частью B: Настройка выполнения и интеграции HTTP-методов.
Часть B: Настройка интеграции и выполнения методов HTTP для службы SQS
Как вы можете заметить, после создания каждого ресурса и назначения ему надлежащего метода HTTP (например, / v1 / send — POST) на панели мониторинга шлюза API отобразится следующее представление, которое включает потоки запроса-ответа, внутренние службы или конечные точки назначения. и кнопка тестирования.
В этом разделе мы сосредоточимся только на точках 1 и 2 (как показано на скриншоте выше), а затем попробуем использовать кнопку «Тест», чтобы увидеть результат нашей работы. Для получения дополнительной информации о методах интеграции и выполнения я отошлю вас к документации по API Gateway .
Давайте начнем с / v1 / send и HTTP GET, чтобы отправить сообщение в очередь, используя GET и строку запроса. Выберите Запрос метода, а затем Запрос интеграции и настройте следующие параметры, как показано на скриншотах:
Для нашего запроса на интеграцию вам необходимо указать настройки:
-
Переопределение пути (AWS ACCOUNT-ID / QUEUE-NAME)
-
Роль выполнения (ARN роли IAM, созданный на этапах IAM)
-
Действие SQS, соответствующее этому ресурсу и выбранному методу HTTP (SendMessage). Не забудьте добавить одинарные кавычки вокруг «SendMessage».
Как только это будет сделано, сохраните и выберите Test, и вы увидите панель тестирования:
Для / v1 / send и HTTP POST не будет никакой конфигурации для запроса метода . Однако нам нужно проделать дополнительную работу в пути запроса интеграции следующим образом:
Для раздела Body Mapping Template вы можете использовать следующий фрагмент кода:
Action=SendMessage&MessageBody=$util.urlEncode($util.escapeJavaScript($input.json('$')))
Теперь мы собираемся настроить API (/ v1 / receive) для чтения сообщений из очереди SQS. Просматривая документацию по SQS, вы можете направить несколько параметров в службу SQS для сканирования очереди и получения ваших сообщений. Для этой демонстрации я собираюсь передать только их подмножество, включая AttributeName (все), MaxNumberOfMessages (от 1 до 10) и VisibilityTimeout.
Выберите / v1 / receive, метод GET, а затем запрос метода, как показано ниже:
После того, как мы настроили запрос метода , выберите метод интеграции и настройте:
-
Переопределение пути (AWS ACCOUNT-ID / QUEUE-NAME)
-
Роль выполнения (ARN роли IAM, созданный на этапах IAM)
-
Действие SQS, соответствующее этому ресурсу и выбранному методу HTTP ( ReceiveMessage ). Не забудьте добавить одинарные кавычки вокруг «ReceiveMessage».
После настройки интеграции нашего метода для / v1 / receieve теперь вы можете протестировать его и попробовать прочитать сообщения из очереди:
На данный момент вы должны иметь возможность отправлять и получать сообщения из очереди, используя кнопку тестирования. Однако вы не можете удалить (очистить) или отправить пакетные сообщения в свою очередь. Мы также не опубликовали этот API для внешнего мира.
Публикация API проста: вам просто нужно создать этап и опубликовать ваш API, но вам нужно позаботиться о безопасности вашего API и спланировать механизм аутентификации.
Если вы хотите узнать, как настроить чистку и пакетные запросы, я предлагаю посмотреть на конфигурацию шлюза API и Postman в моем репозитории GitHub .
То, о чем я все еще думаю и изучаю, — это добавление дополнительных функций в мой API, таких как создание или перечисление моих очередей, а также защита моего API с помощью Amazon Cognito и IAM.
Надеюсь, вам понравился этот урок, и присылайте мне свои отзывы и вопросы.