«1. Обзор
В этой статье мы научимся управлять ресурсами EC2 с помощью Java SDK. Если вы новичок в EC2 (Elastic Cloud Compute) — это платформа, которая предоставляет вычислительные мощности в облаке Amazon.
2. Предварительные условия
Зависимости Maven, настройки учетной записи AWS и клиентское подключение, необходимые для использования SDK Amazon AWS для EC2, такие же, как в этой статье.
Предполагая, что мы создали экземпляр AWSCredentials, как описано в предыдущей статье, мы можем продолжить и создать наш клиент EC2:
AmazonEC2 ec2Client = AmazonEC2ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(Regions.US_EAST_1)
.build();
3. Создание экземпляра EC2
Используя SDK, мы может быстро настроить то, что нам нужно для запуска нашего первого экземпляра EC2.
3.1. Создание группы безопасности
Группы безопасности контролируют сетевой трафик к нашим инстансам EC2. Мы можем использовать одну группу безопасности для нескольких инстансов EC2.
Давайте создадим группу безопасности:
CreateSecurityGroupRequest createSecurityGroupRequest = new CreateSecurityGroupRequest()
.withGroupName("BaeldungSecurityGroup")
.withDescription("Baeldung Security Group");
CreateSecurityGroupResult createSecurityGroupResult = ec2Client.createSecurityGroup(
createSecurityGroupRequest);
Поскольку группы безопасности по умолчанию не разрешают сетевой трафик, нам нужно настроить нашу группу безопасности, чтобы разрешить трафик.
Давайте разрешим HTTP-трафик, поступающий с любого IP-адреса:
IpRange ipRange = new IpRange().withCidrIp("0.0.0.0/0");
IpPermission ipPermission = new IpPermission()
.withIpv4Ranges(Arrays.asList(new IpRange[] { ipRange }))
.withIpProtocol("tcp")
.withFromPort(80)
.withToPort(80);
Наконец, мы должны прикрепить экземпляр ipRange к AuthorizeSecurityGroupIngressRequest и сделать запрос с помощью нашего клиента EC2:
AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest
= new AuthorizeSecurityGroupIngressRequest()
.withGroupName("BaeldungSecurityGroup")
.withIpPermissions(ipPermission);
ec2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);
3.2. Создание пары ключей
При запуске экземпляра EC2 нам нужно указать пару ключей. Мы можем создать пару ключей с помощью SDK:
CreateKeyPairRequest createKeyPairRequest = new CreateKeyPairRequest()
.withKeyName("baeldung-key-pair");
CreateKeyPairResult createKeyPairResult = ec2Client.createKeyPair(createKeyPairRequest);
Давайте получим закрытый ключ:
createKeyPairResult.getKeyPair().getKeyMaterial();
Мы должны убедиться, что этот ключ хранится в надежном и безопасном месте. Если мы потеряем его, мы не сможем его вернуть (Amazon не хранит его). Это единственный способ подключиться к нашему экземпляру EC2.
3.3. Создание экземпляра EC2
Для создания EC2 мы будем использовать RunInstancesRequest:
RunInstancesRequest runInstancesRequest = new RunInstancesRequest()
.withImageId("ami-97785bed")
.withInstanceType("t2.micro")
.withKeyName("baeldung-key-pair")
.withMinCount(1)
.withMaxCount(1)
.withSecurityGroups("BaeldungSecurityGroup");
Идентификатор изображения — это образ AMI, который будет использовать этот экземпляр.
Тип экземпляра определяет характеристики экземпляра.
Имя ключа указывать необязательно; если он не указан, то мы не можем подключиться к нашему экземпляру. Это нормально, если мы уверены, что правильно настроили наш экземпляр и не будем нуждаться в подключении.
Минимальное и максимальное количество задает ограничения на количество создаваемых экземпляров. Это зависит от зоны доступности: если AWS не может создать хотя бы минимальное количество экземпляров в зоне, он их не создаст.
И наоборот, если AWS не может создать максимальное количество экземпляров, он попытается создать меньше, при условии, что это число больше указанного нами минимального количества экземпляров.
Теперь мы можем выполнить запрос с помощью метода runInstances() и получить идентификатор созданного экземпляра:
String yourInstanceId = ec2Client.runInstances(runInstancesRequest)
.getReservation().getInstances().get(0).getInstanceId();
4. Управление экземпляром EC2
Используя SDK, мы можем запускать, останавливать, перезагружать , описать и настроить мониторинг для наших инстансов EC2.
4.1. Запуск, остановка и перезагрузка экземпляра EC2
Запуск, остановка и перезагрузка экземпляра относительно проста.
Запуск экземпляра:
StartInstancesRequest startInstancesRequest = new StartInstancesRequest()
.withInstanceIds(yourInstanceId);
ec2Client.startInstances(request);
Остановка экземпляра:
StopInstancesRequest stopInstancesRequest = new StopInstancesRequest()
.withInstanceIds(yourInstanceId);
ec2Client.stopInstances(request);
Перезагрузка экземпляра:
RebootInstancesRequest request = new RebootInstancesRequest()
.withInstanceIds(yourInstanceId);
RebootInstancesResult rebootInstancesRequest = ec2Client.rebootInstances(request);
Из каждого из этих запросов можно запросить предыдущее состояние экземпляра:
ec2Client.stopInstances(stopInstancesRequest)
.getStoppingInstances()
.get(0)
.getPreviousState()
.getName()
4.2. Мониторинг экземпляра EC2
Давайте посмотрим, как запустить и остановить мониторинг наших экземпляров EC2:
MonitorInstancesRequest monitorInstancesRequest = new MonitorInstancesRequest()
.withInstanceIds(yourInstanceId);
ec2Client.monitorInstances(monitorInstancesRequest);
UnmonitorInstancesRequest unmonitorInstancesRequest = new UnmonitorInstancesRequest()
.withInstanceIds(yourInstanceId);
ec2Client.unmonitorInstances(unmonitorInstancesRequest);
4.3. Описание экземпляра EC2
Наконец, мы можем описать наши экземпляры EC2:
DescribeInstancesRequest describeInstancesRequest
= new DescribeInstancesRequest();
DescribeInstancesResult response = ec2Client
.describeInstances(describeInstancesRequest);
Экземпляры EC2 сгруппированы в резервирования. Резервирование — это вызовы StartInstancesRequest, которые использовались для создания одного или нескольких экземпляров EC2:
response.getReservations()
Отсюда мы можем получить фактические экземпляры. Давайте получим первый инстанс в первом резервировании:
response.getReservations().get(0).getInstances().get(0)
Теперь мы можем описать наш инстанс:
// ...
.getImageId()
.getSubnetId()
.getInstanceId()
.getImageId()
.getInstanceType()
.getState().getName()
.getMonitoring().getState()
.getKernelId()
.getKeyName()
5. Заключение
В этом кратком руководстве мы показали, как управлять инстансами Amazon EC2 с помощью SDK для Java.
Как обычно, фрагменты кода можно найти на GitHub.