AWS App Runner — это полностью управляемый сервис, который позволяет разработчикам быстро развертывать контейнерные веб-приложения и API в масштабе, не требуя при этом предварительного опыта работы с инфраструктурой. Вы можете начать работу как с исходного кода, так и с образа контейнера.
В этом посте мы покажем вам, как развернуть контейнерное приложение с помощью AWS App Runner. Мы сделаем это с помощью Terraform для развертывания простого контейнерного Python-приложения в AWS Runner. Сначала мы узнаем, как создать Terraform AWS Provider, затем используем Terraform для развертывания простого приложения на нашей службе AWS App Runner, и, наконец, у нас будет простое приложение, работающее с публичной конечной точкой.
Предварительные условия
Прежде чем приступить к этому руководству, вам понадобится следующее:
-
учетная запись AWS (вы можете создать ее бесплатно здесь).
-
Установите Terraform локально или используйте AWS Cloud Shell, затем установите Terraform; я написал статью о том, как это сделать здесь
-
ваш текстовый редактор на выбор (я предлагаю VS Code).
Шаг 1: Установка Terraform
Чтобы установить Terraform, перейдите на страницу изучения Terraform и следуйте инструкциям в зависимости от предпочитаемой вами ОС.
Чтобы убедиться, что программа установлена правильно, вы можете выполнить проверку версии:
terraform version
Если установка прошла успешно, вы увидите сообщение, подобное следующему:
Terraform v1.2.5
on darwin_arm64
Когда terraform установлен и готов к использованию, вам нужно настроить учетные данные AWS для вашей учетной записи пользователя, сгенерировав здесь ключи доступа к API и настроив их для использования Terraform. Есть много способов сделать это, но один из самых простых — установить AWS_ACCESS_KEY_ID
и AWS_SECRET_ACCESS_KEY
в качестве переменных окружения:
export AWS_ACCESS_KEY_ID=(your access key id)
export AWS_SECRET_ACCESS_KEY=(your secret access key)
Шаг 2: Настройте блок Terraform и провайдер AWS Terraform Provider
Следующее, что нужно сделать, это настроить Terraform на использование провайдера AWS для вашей конфигурации. Вам нужно будет создать файл в директории, которую вы создали для своего проекта, под названием main.tf
. Для этого проекта я создал каталог terraform-apprunner
, который будет служить вашим рабочим каталогом.
В файле main.tf сначала нужно определить провайдеров, которые вы будете использовать для конфигурации.
После определения провайдеров нам нужно будет определить три ресурса в нашей начальной конфигурации.
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "4.22.0"
}
}
}
# Configure the AWS Provider
provider "aws" {
region = "eu-west-1"
}
Добавление к тому, что мы только что сделали выше: В блоке terraform нам потребовался провайдер AWS. Terraform полагается на плагины под названием «провайдеры» для взаимодействия с облачными провайдерами, такими как AWS, поскольку именно с ними мы и работаем.
Блок Provider: Этот блок сообщает Terraform, что вы будете использовать провайдера AWS и хотите развернуть свою инфраструктуру в регионе eu-west-1.
Шаг 2: Добавление блока ресурсов App runner
А вот и самое интересное! Давайте добавим наш сервис App runner в main.tf
.
resource "aws_apprunner_service" "hello" {
auto_scaling_configuration_arn = aws_apprunner_auto_scaling_configuration_version.hello.arn
service_name = "hello-app-runner"
source_configuration {
image_repository {
image_configuration {
port = "8000" #The port that your application listens to in the container
}
image_identifier = "public.ecr.aws/aws-containers/hello-app-runner:latest"
image_repository_type = "ECR_PUBLIC"
}
}
}
output "apprunner_service_hello" {
value = aws_apprunner_service.hello
}
Теперь позвольте мне объяснить, что делает приведенный выше блок кода.
resource
: блок resource описывает один или несколько объектов инфраструктуры, например, виртуальные сети. Далее следует тип ресурса, имя.
service_name
: имя службы.
source_configuration
: Источник для развертывания в службе App Runner. Это может быть репозиторий кода или репозиторий образа. Мы использовали публичный образ на AWS ECR (Elastic container registry). На момент написания этой статьи Apprunner поддерживает только образы из Private и Public ECR для образов контейнеров.
output
: Выходные переменные могут быть весьма полезны при построении конфигурации. Выходные значения похожи на возвращаемые значения функций.
Шаг 3: Применение нашей конфигурации
Сначала мы инициализируем наш рабочий каталог для загрузки плагинов проекта. Команда выглядит следующим образом:
terraform init
По умолчанию код провайдера загружается в папку .terraform в корневом каталоге (вы можете добавить ее в .gitignore).
Теперь, когда код провайдера загружен, выполните команду terraform plan:
terraform plan
Команда terraform plan
позволяет вам предварительно просмотреть, что Terraform будет предоставлять перед выполнением.
Теперь пришло время применить изменения и запустить ваше контейнерное приложение на App runner.
terraform apply
Это покажет вам тот же план и попросит вас подтвердить Yes
, если вы хотите продолжить выполнение этого плана. После подтверждения, на применение конфигурации уйдет пара минут, и вы увидите, как Terraform выведет следующее:
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Outputs:
apprunner_service_hello = {
"arn" = "arn:aws:apprunner:eu-west-1:790783553687:service/terra-app-runner/8fbcddbda2e34cbcb48befbd9ef30632"
"auto_scaling_configuration_arn" = "arn:aws:apprunner:eu-west-1:790783553687:autoscalingconfiguration/DefaultConfiguration/1/00000000000000000000000000000001"
"encryption_configuration" = tolist([])
"health_check_configuration" = tolist([
{
"healthy_threshold" = 1
"interval" = 5
"path" = "/"
"protocol" = "TCP"
"timeout" = 2
"unhealthy_threshold" = 5
},
])
"id" = "arn:aws:apprunner:eu-west-1:790783553687:service/terra-app-runner/8fbcddbda2e34cbcb48befbd9ef30632"
"instance_configuration" = tolist([
{
"cpu" = "1024"
"instance_role_arn" = ""
"memory" = "2048"
},
])
"service_id" = "8fbcddbda2e34cbcb48befbd9ef30632"
"service_name" = "terra-app-runner"
"service_url" = "ajxqmh7ehq.eu-west-1.awsapprunner.com"
"source_configuration" = tolist([
{
"authentication_configuration" = tolist([])
"auto_deployments_enabled" = false
"code_repository" = tolist([])
"image_repository" = tolist([
{
"image_configuration" = tolist([
{
"port" = "8000"
"runtime_environment_variables" = tomap(null) /* of string */
"start_command" = ""
},
])
"image_identifier" = "public.ecr.aws/aws-containers/hello-app-runner:latest"
"image_repository_type" = "ECR_PUBLIC"
},
])
},
])
"status" = "RUNNING"
"tags" = tomap(null) /* of string */
"tags_all" = tomap({})
Шаг 4: Тестирование нашего приложения
Теперь, когда мы выполнили все шаги, пришло время протестировать инициализированное приложение на App runner. Посмотрите на часть вывода service_url. Вы увидите что-то вроде этого:
service_url = bg2hcjuckx.us-east-1.awsapprunner.com
Скопируйте значение service_url и попробуйте ввести его в браузер; вы должны увидеть что-то похожее на скриншот ниже.
Поздравляем! Мы успешно развернули контейнерное приложение на App runner. Обратите внимание, что указанный выше service _url
может быть недоступен, когда вы читаете это.
Ссылка
Вы можете найти эти ресурсы полезными.
-
AWS App runner
-
FAQ по AWS App runner
Спасибо, что прочитали, и не забудьте подписаться на мою рассылку, чтобы первыми узнавать, когда я опубликую новую статью.