Добро пожаловать в мое руководство по развертыванию AWS!
В этой статье мы углубимся в мир AWS и узнаем, как развертывать приложения с помощью групп автоматического масштабирования и балансировщиков нагрузки. Независимо от того, являетесь ли вы новичком в AWS или хотите повысить свои навыки, вы попали по адресу. К концу этого руководства вы получите четкое представление о том, как эффективно развернуть свое приложение в инфраструктуре AWS.

Оглавление:

  1. Предварительные требования
  2. Шаги

I. Создание группы автоматического масштабирования

  • Вход в свою учетную запись AWS
  • Создание группы автоматического масштабирования
  • Создание шаблона запуска
  • Настройка шаблона запуска
  • Добавление сценария запуска в экземпляры

II. Настройка балансировщиков нагрузки

  • Создание балансировщика нагрузки
  • Настройка параметров балансировщика нагрузки
  • Создание целевой группы
  • Настройка проверок работоспособности
  • Настройка размера группы

3. Улучшения

  • Оптимизация процесса начальной загрузки
  • Конечная точка проверки работоспособности приложения
  • Усиление мер безопасности

4. Заключение

5. Заключительные мысли:

Предпосылки:

Прежде чем мы углубимся в процесс развертывания, убедитесь, что у вас есть следующее:

  1. Аккаунт AWS.
  2. Код вашего приложения был загружен на GitHub в общедоступный репозиторий.
  3. Знакомство с основными концепциями AWS.

Шаги:

I. Создание группы автоматического масштабирования:

  1. Вход в свою учетную запись AWS:
    Начните с входа в свою учетную запись AWS по этой ссылке [AWS].
  2. Задайте общие настройки:
    выберите регион, который географически ближе к вашей целевой аудитории. В моем случае я выбрал Лондон.

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 может показаться сложной задачей, но благодаря этому пошаговому руководству вы получите знания, необходимые для беспрепятственного прохождения этого процесса. Помните, практика ведет к совершенству. Не стесняйтесь экспериментировать с различными настройками и конфигурациями, чтобы адаптировать развертывание к потребностям вашего конкретного проекта.