Загрузите любой тип файла в корзину S3 с помощью интеграции прокси-сервера Lambda с API-шлюзом в Python
API Gateway предоставляет одну удивительную возможность: вы можете интегрировать лямбда-функцию AWS с API Gateway в качестве прокси-службы. Теперь у вас может возникнуть вопрос о том, что такое интеграция лямбда-прокси, поэтому ответ приведен ниже.
Когда клиент отправляет запрос API, API Gateway передает интегрированной лямбда-функции необработанный запрос как есть, за исключением того, что порядок параметров запроса не сохраняется. Эти данные запроса включают заголовки запроса, параметры строки запроса, переменные пути URL, полезную нагрузку и данные конфигурации API. Данные конфигурации могут включать имя текущего этапа развертывания, переменные этапа, идентификатор пользователя или контекст авторизации (если есть). Внутренняя лямбда-функция анализирует данные входящего запроса, чтобы определить ответ, который он возвращает. Чтобы API Gateway передавал выходные данные Lambda в качестве ответа API клиенту, функция Lambda должна возвращать результат в указанном ниже формате.
{ "isBase64Encoded": true|false, "statusCode": httpStatusCode, "headers": { "headerName": "headerValue", ... }, "multiValueHeaders": { "headerName": ["headerValue", ..], .. }, "body": ".." }
Теперь вы, возможно, знаете об интеграции прокси, поэтому давайте реализуем данный сценарий.
Простая архитектура
Шаг 1
Войдите в Консоль управления AWS и перейдите в Консоль S3. Здесь нажмите кнопку Create Bucket и создайте корзину S3 с настройками по умолчанию.
Шаг - 2
После создания корзины S3 перейдите в Консоль AWS Lambda. Там нажмите кнопку Создать функцию и создайте новую функцию. Выберите python3.8
или последнюю версию python в качестве среды выполнения функции.
Дайте функцию и создайте лямбда-функцию с разрешением по умолчанию и настройками по умолчанию.
После того, как вы создали лямбда-функции, скопируйте приведенный ниже код и вставьте его в код лямбда-функции и сохраните изменения.
Как только ваша лямбда-функция будет выполнена с помощью приведенного выше кода, перейдите на вкладку Конфигурации этой лямбда-функции. На вкладке Конфигурации перейдите на вкладку Разрешение.
На этой вкладке щелкните имя роли IAM, и это перенаправит вас в консоль IAM, в консоли IAM прикрепите политику к этой роли с именем AmazonS3FullAccess
, или вы можете назначить этой роли встроенную политику. , который приведен ниже.
{ "Action": [ "s3:*" ], "Resource": [ "s3-bucket-arn", "s3-bucket-arn/*" ], "Effect": "Allow" }
На вкладке Конфигурация нажмите Переменная среды и установите одну переменную среды с именем и значением BUCKET_NAME
: s3 bucket name
.
Шаг 3
Теперь перейдите в Консоль API Gateway. Там создайте новый API, выберите REST API из заданных параметров и нажмите кнопку Построить. На следующем экране введите имя API в соответствии с вашими требованиями.
Теперь API создан, поэтому нажмите кнопку Действие и создайте ресурс в корневом /
ресурсе с именем upload
или как хотите.
В ресурсе Загрузить создайте новый метод POST, для этого сначала щелкните ресурс upload
, а затем нажмите эту кнопку действия.
В этом методе POST выберите Лямбда-функцию как integration type
. Выберите регион своей лямбда-функции и лямбда-функцию, созданную на предыдущем шаге. Мы хотим интегрировать нашу лямбда-функцию в качестве прокси-службы, для этого установите флажок Use Lambda Proxy Integration
. и нажмите Сохранить.
Теперь нам нужно включить CORS, поэтому для этого еще раз щелкните upload
ресурс, а затем нажмите кнопку Действие и включите CORS. В настройках CORS значение Access-Control-Allow-Headers
равно '*'
, а Access-Control-Allow-Origin
- '*'
, а остальные настройки оставьте без изменений. Нажмите Включить CORS и заменить существующие заголовки CORS.
Теперь перейдите к настройкам того API, над которым вы работаете. В настройках включите Типы двоичных носителей. Установите значение этого поля, как это */*
, и сохраните изменения.
Теперь, когда мы выполнили настройку, пришло время развернуть наш API. Для этого перейдите к ресурсам на боковой панели, нажмите кнопку Действие и Разверните API, если у вас нет ранее созданного этапа, создайте новый этап в соответствии с вашими требованиями и разверните свой API.
Инфраструктура как код (IaC)
Модель бессерверного приложения AWS
Клонируйте указанный выше репозиторий и следуйте инструкциям, приведенным в файле README.md, для развертывания и удаления приложения в облаке AWS.
Бессерверная платформа
Клонируйте указанный выше репозиторий и следуйте инструкциям, приведенным в файле README.md, для развертывания и удаления приложения в облаке AWS.
Тестирование
Чтобы протестировать наш API или взаимодействовать с API, нам нужна конечная точка API, поэтому перейдите в раздел этапов на боковой панели и получите конечную точку API.
Конечная точка API выглядит так:
https://api-id.execute-api.us-east-1.amazonaws.com/api-stage
Я собираюсь использовать POSTMAN для тестирования API, вы можете использовать любой другой инструмент, или вы также можете вызвать конечную точку из внешнего интерфейса вашего проекта.
В почтальоне ваш запрос будет похож на конечную точку API, за которой следует имя ресурса, в данном случае имя ресурса /upload
, а тип метода - POST. В основной части запроса перейдите в двоичный раздел и выберите любой двоичный файл и передайте имя этого файла в заголовке с полем file-name
(для внешнего интерфейса вам необходимо передать имя файла в заголовке запроса конечной точки API) и запустить запрос.
Вот и все, вы успешно настроили, если вы получите код состояния 200, и вы можете перейти в консоль S3, и файл проверки будет успешно загружен. По любым вопросам обращайтесь ко мне через LinkedIn или в «Мое портфолио».
LinkedIn: https://www.linkedin.com/in/parth-trambadiya/
Портфолио: https://parthtrambadiya.me
Больше контента на plainenglish.io