Упаковка и развертывание функции Lambda в виде контейнера Docker с помощью AWS CDK

Развертывание бессерверного бэкенда для Slack с помощью инфраструктуры как кода (IaaC)

В одной из моих предыдущих статей в блоге рассказывалось о том, как создать бессерверный бэкенд для Slack с помощью URL-адреса лямбда-функции в качестве веб-крючка. Поскольку я хотел сосредоточиться на самом приложении, часть настройки инфраструктуры была упрощена – с помощью AWS CLI функция была упакована в zip-файл, настроена и, наконец, был создан URL функции вместе с необходимыми разрешениями.

В этом блоге вы закончите развертыванием того же решения, но на этот раз с использованием IaaC (Infrastructure-as-code) с AWS Cloud Development Kit (CDK), который является основой для определения облачной инфраструктуры в коде и предоставления ее через AWS CloudFormation. Вы можете выбрать один из поддерживаемых языков программирования (на момент написания статьи – TypeScript, JavaScript, Python, Java, C#/.Net и Go (в предварительной версии для разработчиков)) для определения компонентов инфраструктуры в коде, как и для любого другого приложения!

Вы узнаете, как использовать библиотеку Go CDK для работы с компонентами инфраструктуры:

  • Определить лямбда-функцию,
  • Добавить URL-адрес функции Lambda, и,
  • Развернуть функцию как контейнер Docker (не zip-файл).

К концу этой статьи у вас должна быть такая же настройка, как описана в предыдущем блоге.

Код, как всегда, доступен на GitHub!

Предварительные условия

  • Создайте учетную запись AWS (если у вас ее еще нет) и войдите в нее. Пользователь IAM, которого вы используете, должен иметь достаточно прав для выполнения необходимых вызовов служб AWS и управления ресурсами AWS.
  • Установите AWS CDK
  • Установите Docker
  • Установите Go
  • Установите Git
  • Создайте рабочее пространство Slack, если у вас его нет.
  • Создайте аккаунт GIHPY (это бесплатно!) и создайте приложение. Каждое созданное вами приложение будет иметь свой собственный API-ключ.

CDK для IaaC – краткое описание

Код CDK довольно лаконичен, но он делает свою работу! Давайте быстро пройдемся по нему.

Сначала мы определим функцию и формат ее упаковки (в виде контейнера Docker):

// environment variable for Lambda function
lambdaEnvVars := &map[string]*string{slackSecretEnvVar: jsii.String(slackSecret), giphyAPIKeyEnvVar: jsii.String(giphyAPIKey)}

function := awslambda.NewDockerImageFunction(stack, jsii.String("awsome-func-docker"), &awslambda.DockerImageFunctionProps{FunctionName: jsii.String(functionName), Environment: lambdaEnvVars, Code: awslambda.DockerImageCode_FromImageAsset(jsii.String("../function"), nil)})
Войти в полноэкранный режим Выйти из полноэкранного режима

Обратите внимание, как использована функция NewDockerImageFunction (традиционно используется NewFunction и ссылка на zip-файл для развертывания). В данном случае мы указываем на папку, в которой находится код нашей функции (используя DockerImageCode_FromImageAsset).

Чтобы упаковать функцию как образ Docker, я использовал базовый образ Go:1.x (см. Dockerfile). Но вы можете использовать и другие варианты. Во время развертывания образ Docker собирается локально, размещается в частном реестре ECR и, наконец, создается функция Lambda – и все это с помощью нескольких строк кода!

URL-адрес функции легко определяется с помощью NewFunctionUrl:

funcURL := awslambda.NewFunctionUrl(stack, jsii.String("awsome-func-url"), &awslambda.FunctionUrlProps{AuthType: awslambda.FunctionUrlAuthType_NONE, Function: function})
Войти в полноэкранный режим Выйти из полноэкранного режима

Для целей этого примера приложения мы используем NONE в качестве типа аутентификации. Это означает, что URL-адрес лямбда-функции будет общедоступен.

Создание/настройка команды в Slack

Начните с входа в рабочее пространство Slack и создания нового приложения Slack.

После этого создайте Slash-команду – перейдите на страницу настроек вашего приложения, а затем нажмите на функцию Slash Commands в навигационном меню. Перед вами появится кнопка Create New Command (Создать новую команду), нажав на которую, вы увидите окно, где вам будет предложено определить новую команду Slash Command, указав необходимую информацию.

Введите необходимую информацию:

  • В разделе Запрос URL введите пока фиктивный URL, например, https://comingsoon.com.

Он является временным и будет заменен на URL лямбда-функции после развертывания.

Наконец, установите приложение на рабочую область – нажмите на функцию Basic Information в навигационном меню, выберите Install your app to your workspace и нажмите Install App to Workspace. Это позволит установить приложение в рабочую область Slack для тестирования вашего приложения и генерации токенов, необходимых для взаимодействия с API Slack.

Как только вы закончите установку приложения, на той же странице появится App Credentials. Оттуда вам нужно взять свой Slack Signing Secret.

Запишите секрет подписи вашего приложения, так как вы будете использовать его позже.

Разверните функцию с помощью CDK и обновите конфигурацию Slack

Клонируйте репозиторий Github и переместите в нужную директорию:

git clone https://github.com/abhirockzz/awsome-slack-backend
cd awsome-slack-backend/function
Войдите в полноэкранный режим Выйти из полноэкранного режима

Соберите функцию Go:

GOOS=linux go build -o awsome
Войти в полноэкранный режим Выйти из полноэкранного режима

Разверните функцию:

export SLACK_SIGNING_SECRET=<enter the slack signing secret>
export GIPHY_API_KEY=<enter the giphy API key>

cd ../cdk && cdk deploy
Войти в полноэкранный режим Выйдите из полноэкранного режима

Запишите URL-адрес лямбда-функции, который вы получите на выходе.

Вернитесь в Slack и обновите конфигурацию, чтобы отразить URL-адрес Lambda-функции.

Все было установлено и настроено. Теперь перейдите в рабочее пространство Slack и вызовите команду Slack, которую вы только что настроили! Попробуйте это:

/awsome serverless
Войти в полноэкранный режим Выйти из полноэкранного режима

Очистка

Как только вы закончите, вы можете удалить функцию и связанные с ней ресурсы:

cdk destroy
Войти в полноэкранный режим Выйти из полноэкранного режима

Завершите работу!

В этой статье блога мы рассказали о том, как облегчить процесс развертывания нашего бэкенда Serverless с помощью AWS CDK!

Оцените статью
Procodings.ru
Добавить комментарий