Добро пожаловать в мое руководство по развертыванию AWS!
В этой статье мы углубимся в мир AWS и узнаем, как развертывать приложения с помощью групп автоматического масштабирования и балансировщиков нагрузки. Независимо от того, являетесь ли вы новичком в AWS или хотите повысить свои навыки, вы попали по адресу. К концу этого руководства вы получите четкое представление о том, как эффективно развернуть свое приложение в инфраструктуре AWS.
Оглавление:
- Предварительные требования
- Шаги
I. Создание группы автоматического масштабирования
- Вход в свою учетную запись AWS
- Создание группы автоматического масштабирования
- Создание шаблона запуска
- Настройка шаблона запуска
- Добавление сценария запуска в экземпляры
II. Настройка балансировщиков нагрузки
- Создание балансировщика нагрузки
- Настройка параметров балансировщика нагрузки
- Создание целевой группы
- Настройка проверок работоспособности
- Настройка размера группы
3. Улучшения
- Оптимизация процесса начальной загрузки
- Конечная точка проверки работоспособности приложения
- Усиление мер безопасности
4. Заключение
5. Заключительные мысли:
Предпосылки:
Прежде чем мы углубимся в процесс развертывания, убедитесь, что у вас есть следующее:
- Аккаунт AWS.
- Код вашего приложения был загружен на GitHub в общедоступный репозиторий.
- Знакомство с основными концепциями AWS.
Шаги:
I. Создание группы автоматического масштабирования:
- Вход в свою учетную запись AWS:
Начните с входа в свою учетную запись AWS по этой ссылке [AWS]. - Задайте общие настройки:
выберите регион, который географически ближе к вашей целевой аудитории. В моем случае я выбрал Лондон.
3. В строке поиска:
напишите «EC2»,затем выберите «сервис EC2»
4. Создание группы автоматического масштабирования:
4.1 С правой стороны выберите: «Группа автоматического масштабирования»
4.2Нажмите «Создать Группу автоматического масштабирования»:
4.3Выберите уникальное имя для своей группы автоматического масштабирования.
4.4. Создайте шаблон запуска:
- Вы можете «Выбрать Запустить шаблон, если он у вас есть, сейчас мы создадим новый.
- Шаблон запуска содержит сведения о конфигурации экземпляра.
4.5 Укажите описательное имя и полезное описание для вашего шаблона.
4.6 Пошаговое руководство по созданию оптимального шаблона запуска для обеспечения плавного развертывания приложений. Я использую этот шаблон, возможно вам придется что-то в нем изменить.
- Используйте пару ключей для безопасного подключения к вашему экземпляру.
- Прежде чем запускать экземпляр, убедитесь, что у вас есть доступ к выбранной паре ключей.
Вы можете создать группу безопасности и добавить правила, позволяющие определенному трафику достигать вашего экземпляра.
Прокрутите вниз, чтобы перейти к разделу «Дополнительные сведения».
Прокрутите вниз, чтобы найти раздел «Пользовательские данные».
Напишите свой сценарий в поле.
Вот мой скрипт с объяснением:
Этот сценарий предназначен для моего проекта Express JS, вы можете написать любой сценарий, который захотите, но вы должны убедиться, что сценарий хорош, вы можете протестировать его в отдельном экземпляре.
Ваш сценарий может включать в себя такие шаги, как:
- Обновление и обновление пакетов
- Установка Node.js и других зависимостей
- Создание учетных записей пользователей для безопасности
- Загрузка и развертывание вашего приложения
#!/bin/sh set -e sudo apt update sudo apt upgrade -y # install nodejs repo to download the latest version then the node js curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install nodejs jq curl -y # create app and github users, to run the application from them, without root, for security purposes sudo useradd --system --create-home --shell /usr/sbin/nologin app sudo useradd -g app --no-create-home --no-user-group --home-dir /home/app --shell /bin/bash github sudo usermod --append --groups app github # deploy the app # Write the github acoount and repo in a variable repo="SarahAbuirmeileh/Book-App" # Creat a download URL to use it later # Here we want to download a release which is ready to run. download_url=$(curl "https://api.github.com/repos/$repo/releases/latest" | jq --raw-output '.assets[0].browser_download_url') # Download the service file to run it as systemd service curl -O "https://raw.githubusercontent.com/$repo/main/infrastructure/app.service" # Adding the file to systemd and enable it, to run whenever the instance start sudo mv app.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable app.service # Creat a repository for the application, and download the app there, then dcompress the app and install the npm sudo -u app sh -c "mkdir -p /home/app/app && cd /home/app/app && curl -LO $download_url && tar xzvf app.tar.gz && npm install --omit=dev" sudo reboot # Evrything is done !!!
Создайте шаблон.
4.7Вернитесь в группу Автомасштабирование и выберите свой шаблон.
Примечание. Если ваш шаблон не появился, возможно, вам придется его обновить.
4.8 Выберите последнюю версию (необязательно) и нажмите «Далее».
4.9. Выбор зон доступности
- Рекомендуется выбирать как можно больше
- Количество Зон доступности может отличаться в разных регионах.
Теперь перейдем к следующей части.
II. Настройка балансировщиков нагрузки
Настройте параметры Балансировщика нагрузки, чтобы оптимизировать распределение трафика и повысить доступность.
1.1 Создайте балансировщик нагрузки и выберите его тип.
Вы можете выбрать «Присоединиться к существующему балансировщику нагрузки», если он у вас уже есть, сейчас мы создадим новый.
1.2 Напишите имя вашего Балансировщика нагрузки и выберитесхему.
- Выход в Интернетпредназначен для распределения входящего трафика из Интернета по нескольким целям.
1.3 Создайте целевую группу
Настройте Целевую группу для эффективного управления маршрутизацией трафика к экземплярам.
Выберите название целевой группы.
1.4Оставьте для параметра «Параметры интеграции VPC Lattice» значение по умолчанию и включите параметр «Включить проверки работоспособности Elastic Load Balancing»
1.5 Выберите «Льготный период проверки работоспособности» в соответствии со своими требованиями.
- Настройте проверку работоспособности, чтобы отслеживать состояние экземпляров и автоматически заменять неработоспособные экземпляры.
1.6 Выберите Размер группы:Желаемый,Минимум, Максимум.
- Определите подходящий размер группы в зависимости от потребностей вашего приложения и обеспечьте высокую доступность.
- Рекомендуется иметь минимум 2 экземпляра, поскольку в случае сбоя одного из них появится еще один.
1.7 Включить защиту масштабирования экземпляра (необязательно)
Вы можете выбрать «Политики масштабирования»
1.8 Вы должны увидеть что-то подобное
1.9 Если вы перейдете к экземплярам EC2, вы увидите, что желаемое количество экземпляров генерируется автоматически.
1.10 Обратитесь к своей целевой группе, чтобы проверить работоспособность ваших экземпляров.
1.11 Если вы хотите удалить эту работу, вам следует начать с удаления группы Автоматическое масштабирование.
Улучшения:
Несмотря на то, что описанные выше шаги обеспечивают функциональное развертывание, существуют дополнительные улучшения, которые вы можете рассмотреть для повышения производительности и безопасности вашего приложения. Хотя эти улучшения не являются обязательными, они могут способствовать более эффективному и надежному развертыванию.
И. Оптимизация процесса начальной загрузки.
Чтобы ускорить процесс начальной загрузки, вы можете создать собственный образ машины Amazon (AMI) с предпочитаемыми вами конфигурациями. Включив этот AMI в шаблон запуска, вы сможете значительно сократить время, необходимое для настройки экземпляров.
Шаги:
1. Создайте обычный экземпляр EC2 со всеми вашими требованиями, включая ваш скрипт.(Те же шаги, что и выше).
2. Щелкните правой кнопкой мыши свой экземпляр и выберите «Изображение и шаблоны», затем выберите «Создать изображение».
3. Укажите описательное имя и полезное описание для вашего образа AMI. Затем создайте изображение.
4. Теперь вы можете увидеть это в AMI.
5. Присоедините AMI к шаблону запуска.
Те же шаги, которые мы упомянули выше, но вы выберете свой AMI при создании шаблона запуска, а затем заполните шаблон как обычно.
II.Конечная точка проверки работоспособности приложения.
Для расширенного мониторинга рассмотрите возможность внедрения специальной конечной точки проверки работоспособности в вашем приложении. Эта конечная точка может периодически отвечать сообщением о состоянии, указывающим, что приложение работает должным образом. Интеграция этой конечной точки с внешней системой или инструментом мониторинга может предоставить информацию о состоянии вашего приложения в режиме реального времени.
import express from "express" const app = express() const PORT = 80; app.use(express.json()) // For health checkes app.get("/health", function (req, res) { res.sendStatus(200); }) app.listen(PORT,()=>{ console.log(`The app is listening on port ${PORT}`) })
III. Усиление мер безопасности
Для повышения безопасности рассмотрите возможность удаления общедоступных IP-адресов из экземпляров. Это гарантирует, что прямой доступ будет ограничен балансировщиком нагрузки. Кроме того, ужесточите группы безопасности, чтобы предотвратить доступ SSH к экземплярам из неавторизованных источников.
Запретите SSH в группе безопасности.
Отключить автоматическое назначение общедоступного IP-адреса
Заключение:
Поздравляем! Следуя этому подробному руководству, вы успешно научились развертывать свое приложение с помощью групп автоматического масштабирования AWS и балансировщиков нагрузки. Этот процесс обеспечивает высокую доступность, отказоустойчивость и эффективное масштабирование ваших приложений. Теперь вы готовы поднять свои навыки развертывания AWS на новый уровень и создавать надежные масштабируемые приложения.
Последние мысли:
Развертывание приложений на AWS может показаться сложной задачей, но благодаря этому пошаговому руководству вы получите знания, необходимые для беспрепятственного прохождения этого процесса. Помните, практика ведет к совершенству. Не стесняйтесь экспериментировать с различными настройками и конфигурациями, чтобы адаптировать развертывание к потребностям вашего конкретного проекта.