Загрузите любой тип файла в корзину 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