Готовясь к получению сертификата AWS Cloud Practitioner и имея практическую возможность поработать с экземплярами AWS EC2, я решил поделиться знаниями о них, установке Java и сервера Tomcat, других инструментах для процесса развертывания в EC2.
Рассмотрим такие темы:
- Что такое AWS и экземпляр EC2?
- Регионы и зоны в AWS.
- Группы безопасности и эластичный IP-адрес.
- Создание экземпляра EC2.
- Установка программного обеспечения в экземпляре EC2.
- Настройка правил входящих подключений для групп безопасности.
- Тестирование экземпляра EC2.
Вам понадобится активная учетная запись AWS. В случае отсутствия заводим ее и завершаем процесс регистрации здесь.
Что такое AWS и экземпляр EC2?
Если вкратце, AWS предназначен для быстрого и безопасного размещения приложений — имеющихся и новых. Это простой в использовании, гибкий, экономичный, масштабируемый, высокопроизводительный инструмент.
EC2 расшифровывается как Amazon Elastic Compute Cloud, то есть веб-служба для предоставления в облаке безопасных вычислительных мощностей изменяемого размера, создания пользователями собственных виртуальных машин и упрощения веб-масштабируемых облачных вычислений для разработчиков. Благодаря простому интерфейсу веб-сервиса EC2 получение и конфигурирование мощностей осуществляется с минимальными усилиями.
Особенности Amazon EC2
- Экземпляры или виртуальные вычислительные среды.
- Преднастроенные шаблоны экземпляров Amazon Machine Images со всем необходимым для сервера, включая операционную систему и дополнительное ПО.
- Типы экземпляров или разные конфигурации ЦП, памяти, хранилища и сетевых мощностей экземпляров.
- Информация для входа в экземпляры защищена парами ключей. Открытый ключ хранится в AWS, закрытый — у вас в безопасном месте.
- Тома хранилища экземпляров, или тома хранения временных данных, удаляемых при остановке, переходе в спящий режим или завершении работы экземпляра.
- Регионы и зоны доступности, или физические местоположения ресурсов: экземпляров и томов Amazon EBS.
- Брандмауэр для указания протоколов, портов и диапазонов IP-адресов источника, по которым экземпляры доступны с помощью групп безопасности.
- Эластичные IP-адреса, или статические IPv4-адреса для динамических облачных вычислений.
Регионы и зоны
Amazon EC2 размещается в нескольких высокодоступных ЦОД по всему миру. Цель такой географической рассредоточенности — дополнительная масштабируемость и надежность. Эти ЦОД распределены по регионам и зонам доступности.
- Каждый регион — отдельная, полностью независимая географическая область.
- Зоны доступности — это изолированные местоположения в пределах каждого региона.
- В локальных зонах размещаются ресурсы — вычислительные и хранилища — в местоположениях ближе к конечным пользователям.
Группы безопасности
Группа безопасности — это такой виртуальный брандмауэр экземпляров EC2 для контроля входящего и исходящего трафика экземпляра. Входящий трафик контролируется правилами входящего трафика, исходящий — правилами исходящего.
- Имеется две группы безопасности: по умолчанию и пользовательская. Первая привязывается к экземпляру при его создании, вторая — к уже имеющемуся.
- В группах безопасности содержатся правила исходящего трафика, которыми разрешается весь исходящий трафик.
- Правилами групп безопасности трафик фильтруется по протоколам и номерам портов.
- Правила добавляются и удаляются в любое время. Изменения автоматически применяются к экземплярам, привязанным к группе безопасности.
- Правила групп безопасности всегда разрешительные: нельзя создать правила для запрета доступа.
Эластичные IP-адреса
Эластичный IP-адрес — это зарезервированный общедоступный IP-адрес, который присваивается любому экземпляру EC2 в конкретном регионе до тех пор, пока не освободится. Эластичный IP-адрес присваивается учетной записи в конкретном регионе так.
- Когда к экземпляру EC2 привязывается эластичный IP-адрес, этим адресом заменяется общедоступный IP-адрес по умолчанию.
- Эластичный IP-адрес остается неизменным несмотря на события, такие как остановка и перезагрузка экземпляра, которые обычно чреваты изменением адреса.
- Чтобы распределить эластичные IP-адреса по различным категориям, например назначению, владельцу и среде, им присваиваются пользовательские теги. По таким тегам конкретный эластичный IP-адрес находится быстро.
- Эластичный IP-адрес отвязывается от экземпляра в любое время, после чего привязывается к другому.
Создание экземпляра EC2
Создадим и запустим экземпляр EC2:
- Открываем консоль AWS.
- Нажимаем кнопку Sign in to the Console («Войти в консоль»).
- Указываем учетные данные привилегированного пользователя, нажимаем Sign in («Войти»).
- Войдя, нажимаем Services («Службы») и переходим в All Services -> EC2 («Все службы -> EC2») или вводим EC2 в строке поиска.
- Выбираем конкретный регион в заголовке.
- Переходим в Instance («Экземпляр») и нажимаем Launch Instance («Запустить экземпляр»). Откроется страница создания экземпляра.
- Вводим название экземпляра, выбираем конкретный образ ОС Amazon Machine Image: Windows, Ubuntu, macOS и т. д. Для целей обучения выбираем любую из имеющихся в Amazon ОС условно-бесплатного уровня.
- Выбираем тип экземпляра t2.micro, тоже условно-бесплатного уровня.
- Нажимаем Create new key pair («Создать новую пару ключей»), указываем имя, выбираем тип пары RSA и формат файла pem, нажимаем Create key pair («Создать пару ключей»). Загрузится pem-файл. Сохраняем его в безопасной папке — он понадобится позже для подключения экземпляра. Нельзя загрузить тот же файл снова.
- В Network settings («Сетевые параметры»), нажав Create security group («Создать группу безопасности»), создаем группу безопасности для экземпляра или выбираем Default security group («Группа безопасности по умолчанию»).
- Нажимаем Launch instance («Запустить экземпляр»), и отобразится успешно выполненный запуск экземпляра.
- Созданный экземпляр появится на боковой панели в Instances («Экземпляры»).
- Если в Instance state («Состояние экземпляров») состояние Running, значит, экземпляр запущен корректно и предстоит его настройка.
- Если отметить экземпляр галочкой, отобразятся все его сведения и конфигурации.
- В разделе Details («Подробности») имеется общедоступный IPv4-адрес по умолчанию, который меняется в основном при остановке или перезагрузке экземпляра.
- Этот адрес заменится созданным эластичным IP-адресом, неизменным даже после перезагрузки экземпляра.
- В меню боковой панели в Network and Security («Сеть и безопасность») нажимаем Elastic IPs («Эластичные IP-адреса») и создаем эластичный IP-адрес, выбираем Allocate Elastic IP address («Выделить эластичный IP-адрес») и нажимаем Allocate («Выделить»).
- Созданный эластичный IP-адрес появится в разделе Elastic IP addresses («Эластичные IP-адреса»). Нажав на эластичный IP-адрес, откроем страницу его привязывания к экземпляру.
- Нажимаем Associate Elastic IP address («Привязать эластичный IP-адрес»), выбираем Instance («Экземпляр»), нажимаем Associate («Привязать»).
- Эластичный IP-адрес привязан к экземпляру:
- Переходим к подробностям экземпляра: эластичным IP-адресом, неизменным даже после перезагрузки экземпляра, заменяется общедоступный IPv4-адрес по умолчанию.
Установка ПО в экземпляре EC2
Запустив экземпляр EC2, установим и протестируем в нем ПО: Java 11 и Tomcat Server 9.
- В списке экземпляров нажимаем правой кнопкой мыши по идентификатору экземпляра и выбираем Connect («Подключиться»).
- Переходим во вкладку SSH client («Клиент SSH»), копируем URL-адрес под Example:
- Из папки с pem-файлом открываем любой терминал — рекомендуется Git Bash — и вставляем скопированный URL-адрес.
- Правильно запущенный экземпляр подключится через терминал, в консоли появится такой вывод:
- Командой
sudo su
предоставляем права суперпользователя, а командойapt-get update
загружаем и устанавливаем обновления для каждого устаревшего пакета и зависимости в системе, то есть установленной в экземпляре EC2 ОС:
Устанавливаем Java
- Командой
apt install openjdk-11-jdk
устанавливаем JDK, а также JRE. - Командой
java -version
проверяем установку:
Устанавливаем Tomcat Server
- Прежде чем устанавливать сервер Tomcat с конкретными пользователями и разрешениями, в целях безопасности командой
useradd -m -d /opt/tomcat -U -s /bin/false tomcat
сделаем отдельную учетную запись пользователя для запуска веб-сервера tomcat в системе Ubuntu, где будут созданы пользователь и группа tomcat. - Конкретную версию tomcat 9.0.73 загружаем с помощью
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.73/bin/apache-tomcat-9.0.73.tar.gz
. - Загруженный файл разархивируем и все содержимое копируем в домашний каталог tomcat командами
tar xzf apache-tomcat-9.0.73.tar.gz
иsudo mv apache-tomcat-9.0.73/* /opt/tomcat/
соответственно. - Корректное владение всеми файлами задаем командой sudo
chown -R tomcat:tomcat /opt/tomcat/
. - Командой
mkdir
создаем две папки вCatalina/localhost
в/opt/tomcat/conf/
. - В
/opt/tomcat/conf/Catalina/localhost/manager.xml
создаем файл manager.xml. - Командой
sudo nano /opt/tomcat/conf/Catalina/localhost/manager.xml
добавляем и сохраняем такой код:
<Context privileged="true" antiResourceLocking="false"
docBase="{catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
- Затем в
/opt/tomcat/conf/Catalina/localhost/host-manager.xml
создаем файл host-manager xml. - Командой
sudo nano /opt/tomcat/conf/Catalina/localhost/host-manager.xml
добавляем и сохраняем такой код:
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/host-manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
</Context>
- Теперь настроим tomcat с учетными записями пользователей для безопасного доступа к страницам администратора/диспетчера.
- Командой
sudo nano /opt/tomcat/conf/tomcat-users.xml
редактируем файлconf/tomcat-users.xml
в терминале и вставляем внутри тегов <tomcat-users> </tomcat-users>, меняя имя пользователя и пароль в конфигурации ниже:
<!-- пользователю-диспетчеру доступен только раздел диспетчера -->
<role rolename="manager-gui" />
<user username="manager" password="password@123" roles="manager-gui" />
<!-- пользователю-администратору доступны оба раздела: диспетчера и администратора -->
<role rolename="admin-gui" />
<user username="admin" password="password@123" roles="manager-gui,admin-gui" />
- Для запуска и остановки службы в tomcat имеются скрипты bash. Но ради простоты сделаем сценарий запуска для управления Tomcat как службой systemd.
- Командой
sudo nano /etc/systemd/system/tomcat.service
создаем файл tomcat.service и добавляем такое содержимое:
[Unit]
Description=Tomcat
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
[Install]
WantedBy=multi-user.target
- Чтобы применить изменения, перезагружаем службу-демона systemd командой
sudo systemctl daemon-reload
. - Командой
sudo systemctl enable tomcat
включаем сервер. - Командой
sudo systemctl start tomcat
запускаем службу Tomcat в системе. - Готово. Java и сервер Tomcat в ОС экземпляра EC2 установлены.
- Протестируем установку, введя общедоступный IPv4-адрес / эластичный IP-адрес с портом 8080, ведь по умолчанию tomcat запускается в порту с номером 8080:
- Должна была загрузиться страница Tomcat по умолчанию. Но она не загружается, хотя статус tomcat активен:
- Задействуем группы безопасности, в них имеется два типа правил: входящего и исходящего трафика.
- Входящий трафик контролируется правилами входящего трафика, исходящий — правилами исходящего.
- Здесь нужен доступ к порту 8080 экземпляра. Поэтому, чтобы разрешить входящий трафик в экземпляре, необходимо разрешить этот порт в правилах входящего трафика.
- Переходим к подробностям экземпляра в раздел Security («Безопасность») и выбираем свою группу безопасности:
- Переходим во вкладку Inbound rules («Правила входящих подключений»), нажимаем кнопку Edit inbound rules («Редактировать правила входящих подключений»).
- Нажимаем Add rule («Добавить правило»), в Type («Тип») выбираем Custom TCP («Пользовательский TCP»), в Port range («Диапазон портов») — 8080, в Source («Источник») — Anywhere-IPv4, нажимаем Save rules («Сохранить правила»):
- Перезагружаемся, появится страница Tomcat по умолчанию, то есть входящий трафик в порту с номером 8080 группой безопасности разрешен:
- Доступ к страницам Manager («Диспетчер») и Host Manager («Диспетчер хостов») получаем, указав заданные при установке tomcat учетные данные:
- Если при этом получается ошибка «403», выполняем
find / -name context.xml
и делаем из комментария строку с элементом значения для Manager и Host Manager, которые находятся в папке webapps. - Чтобы отредактировать файла контекста Manager, запускаем
sudo nano /opt/tomcat/webapps/manager/META-INF/context.xml
, комментируем код ниже и сохраняем:
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
- Чтобы отредактировать файла контекста Manager, запускаем
sudo nano /opt/tomcat/webapps/host-manager/META-INF/context.xml
, комментируем код ниже и сохраняем:
<!-- <Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->
Вот и все. С ошибкой «403» при доступе к страницам Manager и Host Manager покончено.
Читайте также:
- Доступная и масштабируемая 3-уровневая архитектура AWS
- Легко и быстро: автоматизация развертывания AWS EC2 с GitHub Actions и Docker Hub
- 9 вещей, которыми следует заняться Java программисту в 2018 году
Читайте нас в Telegram, VK и Дзен
Перевод статьи Pritam Kumar: AWS Tutorial — EC2 Instance Set-up for Java Application Deployment