Развертывание на AWS с Amazon Linux 2
Это руководство описывает, как запустить экземпляр AWS с Amazon Linux 2 и настроить его для работы со Swift. Здесь используется пошаговый подход через консоль. Это отличный способ обучения, но для более зрелого подхода мы рекомендуем использовать инструменты инфраструктуры как кода, такие как AWS Cloudformation, а экземпляры создаются и управляются с помощью автоматизированных инструментов, таких как группы автоматического масштабирования. Для одного подхода, использующего эти инструменты, см. эту статью блога: https://aws.amazon.com/blogs/opensource/continuous-delivery-with-server-side-swift-on-amazon-linux-2/
Запуск экземпляра AWS
Используйте меню «Сервис», чтобы выбрать службу EC2.
Нажмите на «Экземпляры» в меню «Экземпляры»
Нажмите на «Запустить экземпляр», либо в верхней части экрана, либо, если это первый экземпляр, который вы создаёте в данном регионе, в основной части экрана.
Выберите образ Amazon Machine Image (AMI). В данном случае руководство предполагает, что мы будем использовать Amazon Linux 2, поэтому выберите этот тип AMI.
Выберите тип экземпляра. Более крупные типы экземпляров будут иметь больше памяти и ЦП, но будут дороже. Достаточно будет и меньшего типа экземпляра для экспериментов. В данном случае у меня выбран тип экземпляра t2.micro.
Настройте детали экземпляра. Если вы хотите получить прямой доступ к этому экземпляру в интернет, убедитесь, что подсеть, которую вы выбираете, автоматически назначает общедоступный IP-адрес. Предполагается, что VPC имеет подключение к интернету, что означает, что ему нужен шлюз интернета (IGW) и правильные правила сети, но это справедливо для стандартной VPC. Если вы хотите настроить этот экземпляр в частной (не доступной через интернет) VPC, вам потребуется настроить башн-хост, AWS Systems Manager Session Manager или какой-либо другой механизм подключения к экземпляру.
Добавьте хранилище. Мастер запуска AWS EC2 по умолчанию предложит некоторую форму хранилища. Для наших целей тестирования этого должно быть достаточно, но если вам нужно больше хранилища или другие требования к производительности хранилища, вы можете изменить размер и тип тома здесь.
Добавьте теги. Рекомендуется добавить столько тегов, сколько нужно, чтобы правильно идентифицировать этот сервер позже. Особенно, если у вас много серверов, может быть трудно запомнить, какой из них использовался для какой цели. Как минимум, добавьте тег Name с запоминающимся значением.
Настройте группу безопасности. Группа безопасности — это управляемый брандмауэр, который ограничивает трафик, принимаемый вашим экземпляром. Рекомендуется максимально ограничить его. В данном случае мы настраиваем его так, чтобы разрешать трафик только по порту 22 (ssh). Рекомендуется также ограничить источник. Чтобы ограничить его текущим IP-адресом вашего рабочего стола, щелкните раскрывающееся меню в поле «Источник» и выберите «Мой IP-адрес».
Запустить экземпляр. Нажмите на «Запустить» и выберите пару ключей, которые вы будете использовать для подключения к экземпляру. Если у вас уже есть пара ключей, которые вы использовали ранее, вы можете повторно использовать её, выбрав «Выбрать существующую пару ключей». В противном случае вы можете создать пару ключей сейчас, выбрав «Создать новую пару ключей».
Подождите, пока экземпляр не запустится. Когда он будет готов, он отобразится как «запущенный» в разделе «Состояние экземпляра» и «2/2 проверки пройдены» в разделе «Проверки статуса». Щёлкните по экземпляру, чтобы просмотреть детали в нижней панели окна и найдите «Общедоступный IP-адрес IPv4».
Подключиться к экземпляру. Используя пару ключей, которую вы использовали или создали на этапе запуска, и IP-адрес на предыдущем шаге, выполните ssh. Убедитесь, что вы используете -A параметр с ssh, чтобы на следующем шаге мы смогли использовать те же ключи для подключения ко второму экземпляру.
У нас есть два варианта компиляции бинарника: либо непосредственно на экземпляре, либо с использованием Docker. Мы рассмотрим оба варианта здесь.
Компиляция на экземпляре
Есть два альтернативных способа компиляции кода на экземпляре, либо:
- скачав и используя инструментарий непосредственно на экземпляре,
- или с помощью docker и компиляцией внутри контейнера docker
Компиляция с помощью скачанного инструментария
Выполните следующую команду в терминале SSH. Обратите внимание, что может быть более новая версия Swift инструментария. Проверьте https://swift.org/download/#releases на наличие последней доступной ссылки на инструментарий для Amazon Linux 2.
SwiftToolchainUrl="https://swift.org/builds/swift-5.4.1-release/amazonlinux2/swift-5.4.1-RELEASE/swift-5.4.1-RELEASE-amazonlinux2.tar.gz"
sudo yum install ruby binutils gcc git glibc-static gzip libbsd libcurl libedit libicu libsqlite libstdc++-static libuuid libxml2 tar tzdata ruby -y
cd $(mktemp -d)
wget ${SwiftToolchainUrl} -O swift.tar.gz
gunzip < swift.tar.gz | sudo tar -C / -xv --strip-components 1
Наконец, проверьте, что Swift установлен правильно, выполнив Swift REPL: swift.
Теперь давайте скачаем и соберем тестовое приложение. Мы воспользуемся --static-swift-stdlib вариантом, чтобы его можно было развернуть на другом сервере без установленного Swift инструментария. Эти примеры будут развертывать пример HTTP-сервера SwiftNIO по адресу example HTTP server, но вы можете протестировать свой проект.
git clone https://github.com/apple/swift-nio.git
cd swift-nio
swift build -v --static-swift-stdlib -c release
Компиляция с Docker
Убедитесь, что Docker и git установлены на экземпляре:
sudo yum install docker git
sudo usermod -a -G docker ec2-user
sudo systemctl start docker
Возможно, вам придется выйти и снова войти в систему, чтобы использовать Docker. Проверьте, выполнив docker ps и убедитесь, что он выполняется без ошибок.
Скачайте и скомпилируйте пример HTTP-сервера SwiftNIO по адресу example HTTP server:
docker run --rm -v "$PWD:/workspace" -w /workspace swift:5.4-amazonlinux2 /bin/bash -cl ' \
swift build -v --static-swift-stdlib -c release
Тестирование бинарника
Используя те же шаги, что и выше, запустите второй экземпляр (но не выполняйте приведенные выше команды bash!). Убедитесь, что вы используете ту же пару ключей SSH.
В консоли управления AWS перейдите к службе EC2 и найдите только что запущенный экземпляр. Щелкните по экземпляру, чтобы увидеть детали, и найдите внутренний IP-адрес. В моем примере внутренний IP-адрес — 172.31.3.29
С исходного экземпляра, создавшего бинарник, скопируйте его на новый серверный экземпляр: scp .build/release/NIOHTTP1Server ec2-user@172.31.3.29
Теперь подключитесь к новому экземпляру: ssh ec2-user@172.31.3.29
На новом экземпляре протестируйте Swift бинарник:
NIOHTTP1Server localhost 8080 &
curl localhost:8080
Дальнейшие варианты безграничны и зависят от вашего приложения Swift. Если вы хотите запустить веб-сервис, убедитесь, что вы открыли группу безопасности для правильного порта и из правильного источника. Когда закончите тестирование Swift, выключите экземпляр, чтобы не платить за ненужные вычисления. В панели EC2 выберите оба экземпляра, выберите «Действия» из меню, затем «Состояние экземпляра», а затем «завершить».
The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.
Documentation for Swift 6.0.3
https://www.swift.org/documentation/server/guides/deploying/aws.html