Автоматизация управления AWS EC2 с помощью Java

Введение Одним из самых популярных сервисов, доступных в Amazon Web Services, является EC2, что означает Elastic Compute Cloud. EC2 упрощает для разработчиков и пользователей создание виртуальных машин, размещенных в облаке, также известных как экземпляры EC2, и управление ими. EC2 предоставляет веб-интерфейс, который упрощает развертывание и работу с экземплярами виртуальных машин, включая настройку, аутентификацию, подключение, обслуживание, хранение, масштабирование и многое другое. Помимо создания и работы с сервисом EC2 через

Вступление

Одним из самых популярных сервисов, доступных в Amazon Web Services, является EC2, что означает Elastic Compute Cloud . EC2 упрощает для разработчиков и пользователей создание виртуальных машин, размещенных в облаке, также известных как экземпляры EC2, и управление ими.

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

Помимо создания и работы с сервисом EC2 через веб-интерфейс, AWS предоставляет SDK, которые позволяют выполнять операции с виртуальными машинами непосредственно из кода.

В этой статье мы обсудим использование Java SDK и API для создания экземпляра EC2, запуска и остановки экземпляра, его перезагрузки, резервного копирования в образ и восстановления из резервной копии.

Настройка учетных данных AWS для Java SDK

Начнем с изучения того, как создать набор учетных данных AWS, необходимых для доступа к AWS и выполнения вызовов API через SDK. Самый простой способ сделать это - войти в консоль AWS и создать новую роль IAM (Identity and Access Management ).

Для этого выполните следующие действия:

  1. Войдите в Консоль AWS .

  2. Щелкните меню «Службы» в верхнем левом углу экрана, найдите IAM и щелкните появившийся раскрывающийся список.

Меню сервисов AWSIAM{.ezlazyload}

  1. Под заголовком «Состояние безопасности» разверните параметр « Создать отдельных пользователей IAM» и нажмите кнопку « Управление пользователями» .

AWS IAM Управлениепользователями{.ezlazyload}

  1. Щелкните кнопку Добавить пользователя .

  2. Введите имя пользователя для нового пользователя IAM и установите флажок Программный доступ .

Сведения о пользователе AWSIAM{.ezlazyload}

  1. Нажмите кнопку « Далее: разрешения» и выберите « Прикрепить существующие политики напрямую» .

  2. Введите EC2 в поле поиска и в результатах установите флажок AmazonEC2FullAccess .

Разрешения AWS IAMEC2{.ezlazyload}

  1. Нажмите кнопку Далее: Теги , затем нажмите кнопку Далее: Обзор .

  2. Просмотрите конфигурацию пользователя IAM и нажмите кнопку « Создать пользователя» .

  3. Вы попадете на страницу подтверждения, где сможете скопировать идентификатор ключа доступа и секретный ключ доступа, которые являются учетными данными, которые вы будете использовать для доступа к API AWS через Java SDK.

По умолчанию SDK будет искать учетные данные в файле профиля учетных данных по умолчанию, который обычно находится в ~/.aws/credentials на вашем локальном компьютере. Вам нужно будет создать этот файл самостоятельно и добавить в него учетные данные IAM.

Чтобы настроить это самостоятельно, создайте новый файл ~/.aws/credentials и добавьте следующее содержимое, заменив ключ доступа и секретный ключ значениями из вашего вновь созданного пользователя IAM в консоли AWS:

 aws_access_key_id = YOUR_ACCESS_KEY_ID 
 aws_secret_access_key = YOUR_SECRET_ACCESS_KEY 

Создайте файл региона по умолчанию для использования AWS SDK, добавив новый файл с именем ~/.aws/config со следующим содержимым (вы можете заменить регион на тот, который ближе к месту проживания ваших пользователей для оптимальной производительности):

 region = US_WEST_2 

Теперь необходимо настроить локальную среду для AWS Java SDK для успешной аутентификации.

Установка SDK с Maven

Если вы используете Maven, добавьте следующую зависимость, чтобы включить AWS Java SDK:

 <dependency> 
 <groupId>com.amazonaws</groupId> 
 <artifactId>aws-java-sdk-ec2</artifactId> 
 <version>${version}</version> 
 </dependency> 

Или, если вы используете Gradle:

 compile group: 'com.amazonaws', name: 'aws-java-sdk', version: '${version}' 

Теперь вместо зависимости EC2 вы можете использовать aws-java-sdk , который представляет собой весь SDK. Во всем SDK - 219, если быть точным, много зависимостей, поэтому, если вы используете только EC2, нет необходимости загружать их все.

Создание экземпляра EC2

AWS Java SDK для EC2 предоставляет несколько классов, которые можно использовать для создания нового экземпляра. Они находятся в библиотеке software.amazon.awssdk Эти классы:

  • Регион : представляет регион размещения AWS, в котором будут выполняться операции SDK.
  • Ec2Client : используется для установки и настройки клиента для подключения к AWS EC2 через веб-сервисы.
  • InstanceType : представляет тип / размер экземпляра виртуальной машины, например T2.MICRO .
  • RunInstancesRequest : представляет веб-запрос для создания экземпляров EC2.
  • RunInstancesResponse : представляет веб-ответ от службы AWS EC2 после создания экземпляра.

Давайте посмотрим, как мы можем использовать их для создания экземпляра EC2:

 Region region = Region.US_WEST_2; 
 String amiId = "ami-0e34e7b9ca0ace12d"; 
 
 Ec2Client ec2 = Ec2Client.builder() 
 .region(region) 
 .build(); 
 
 RunInstancesRequest runRequest = RunInstancesRequest.builder() 
 .imageId(amiId) 
 .instanceType(InstanceType.T1_MICRO) 
 .maxCount(1) 
 .minCount(1) 
 .build(); 
 
 RunInstancesResponse response = ec2.runInstances(runRequest); 

Здесь мы настраиваем Region для региона, близкого к конечным пользователям, для оптимальной производительности. Если Region не указан программно, используется регион по умолчанию из ~/.aws/config .

Затем мы указали наш AMI в виде строки. Это уникальный идентификатор используемого нами образа машины, который можно получить в Консоли AWS.

Имея эти два места, мы создали Ec2Client объекта Ec2Client и установили регион. После этого, используя RunInstancesRequest , мы заполнили информацию для запроса.

Запрос отправляется с помощью runInstances() а ответ упаковывается в экземпляр RunInstancesResponse

После этого экземпляр можно будет увидеть в Консоли AWS:

Экземпляр AWS EC2, запущенный вконсоли{.ezlazyload}

Давайте теперь манипулируем созданным нами экземпляром, начиная с запуска и заканчивая его остановкой.

Запуск и остановка экземпляра

Основываясь на классах, использованных в предыдущем примере, и аналогичным образом для отправки запросов на запуск и остановку экземпляра, мы имеем:

  • StartInstancesRequest : представляет веб-запрос для запуска экземпляров EC2.
  • StopInstancesRequest : представляет веб-запрос для остановки экземпляров EC2.

Давайте посмотрим, как мы можем использовать эти два класса для запуска и остановки экземпляра EC2:

 Region region = Region.US_WEST_2; 
 String instanceId = "i-025dea8c69e83bb61"; 
 
 Ec2Client ec2 = Ec2Client.builder() 
 .region(region) 
 .build(); 
 
 StartInstancesRequest request = StartInstancesRequest.builder() 
 .instanceIds(instanceId) 
 .build(); 
 
 ec2.startInstances(request); 
 
 StopInstancesRequest request = StopInstancesRequest.builder() 
 .instanceIds(instanceId) 
 .build(); 
 
 ec2.stopInstances(request); 

Мы установили Region и записали идентификатор нашего экземпляра. Затем, как и в прошлый раз, мы создали Ec2Client

Наконец, мы сформулировали StartInstancesRequest с идентификатором экземпляра и отправили его с помощью startInstances() .

StopInstancesRequest точно так же и отправляется через метод stopInstances() .

После запуска или остановки экземпляра EC2 таким образом новое состояние экземпляра должно отображаться в консоли AWS EC2.

Для удобства как остановку, так и запуск можно выполнить в одном запросе на перезагрузку.

Перезагрузка экземпляра

Таким же образом мы RebootInstancesRequest классом RebootInstancesRequest:

  • RebootInstancesRequest : представляет веб-запрос для запуска экземпляров EC2.

Давайте посмотрим, как мы можем построить запрос на перезагрузку экземпляра:

 Region region = Region.US_WEST_2; 
 String instanceId = "i-025dea8c69e83bb61"; 
 
 Ec2Client ec2 = Ec2Client.builder() 
 .region(region) 
 .build(); 
 
 RebootInstancesRequest request = RebootInstancesRequest.builder() 
 .instanceIds(instanceId) 
 .build(); 
 
 ec2.rebootInstances(request); 

Мы установили Region и instanceId и создали Ec2Client .

Используя метод builder() RebootInstancesRequest , мы создаем запрос только с instanceId .

Запрос отправляется методом rebootInstances() , после чего экземпляр перезагружается.

Далее мы рассмотрим автоматизацию общей задачи резервного копирования существующего экземпляра EC2 в AMI. Мы также обсудим, как восстановить образ в новый экземпляр EC2.

Резервное копирование экземпляра в AMI (образ машины Amazon)

Как и в случае с предыдущими задачами, эта также выполняется с помощью запроса. Для построения запросов на резервное копирование экземпляров в изображения у нас есть:

  • CreateImageRequest : представляет веб-запрос на создание нового AMI.

Давайте посмотрим, как мы можем использовать CreateImageRequest для резервного копирования изображения на основе существующего экземпляра:

 Region region = Region.US_WEST_2; 
 String instanceId = "i-025dea8c69e83bb61"; 
 
 Ec2Client ec2 = Ec2Client.builder() 
 .region(region) 
 .build(); 
 
 CreateImageRequest request = CreateImageRequest.builder() 
 .instanceId(instanceId) 
 .name("newimage") 
 .build(); 
 
 ec2.createImage(request); 

После создания нового AMI из существующего экземпляра EC2 таким образом, новый AMI будет отображаться по ссылке ИЗОБРАЖЕНИЯ> AMI на правой боковой панели консоли EC2.

Восстановить экземпляр из AMI

К счастью, восстановить этот AMI для создания нового экземпляра очень просто, поскольку мы уже узнали, как создать новый экземпляр EC2 в первом примере этой статьи.

Все, что нам нужно сделать, это заменить строку amiId (которую мы изначально нашли из нужного AMI в консоли AWS) на идентификатор AMI из нового пользовательского AMI, который мы создали:

 Region region = Region.US_WEST_2; 
 String amiId = "created_ami"; 
 
 Ec2Client ec2 = Ec2Client.builder() 
 .region(region) 
 .build(); 
 
 RunInstancesRequest runRequest = RunInstancesRequest.builder() 
 .imageId(amiId) 
 .instanceType(InstanceType.T1_MICRO) 
 .maxCount(1) 
 .minCount(1) 
 .build(); 
 
 RunInstancesResponse response = ec2.runInstances(runRequest); 

Это позволит нам использовать наш настраиваемый AMI в качестве шаблона для создания нового экземпляра EC2 вместо готового AMI AWS с их торговой площадки.

Заключение

В этой статье мы обсудили, как установить и настроить AWS SDK для Java, особенно для службы EC2.

Мы рассмотрели настройку учетных данных для аутентификации AWS SDK и добавление необходимых зависимостей с помощью Maven. Мы также подробно описали код Java для некоторых распространенных операций EC2, таких как создание нового экземпляра, остановка / запуск экземпляра, перезагрузка экземпляра и резервное копирование / восстановление экземпляра из AMI.

об авторе

Эта статья была написана Якобом Стопаком, разработчиком программного обеспечения и консультантом, стремящимся помочь другим улучшить свою жизнь с помощью кода. Джейкоб является автором Baby Bitcoin Guidebook for Developers , книги, в которой подробно рассматривается код Биткойна, чтобы помочь любопытным разработчикам понять, как Биткойн работает под капотом.

comments powered by Disqus