AWS Java API — создайте EC2 (runInstances) и выполните команду

Я могу легко создавать экземпляры с помощью API AWS Java из моментального снимка, который я создали в среде с помощью runInstances(...). У меня снапшот настроен таким образом, что он автоматически запускает набор процессов и прочего, чтобы у меня была полностью функциональная конфигурация.

Я хотел бы, чтобы экземпляр автоматически запускал команду, которую я настроил, и устанавливал время запуска БЕЗ ОПРОСА. Есть ли какой-нибудь функционал для этого?

Прямо сейчас я опрашиваю, когда он станет доступен, используя библиотеку Java Secure Channel; однако я бы предпочел не беспокоиться об этом и просто позволить AWS справиться с этим, если это вообще возможно.

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

SomeBashScript.sh -e SOME_ID some_command

person el n00b    schedule 29.12.2016    source источник
comment
Похоже, вы хотите User-Data? docs.aws.amazon. com/AWSEC2/latest/UserGuide/   -  person wkl    schedule 29.12.2016
comment
Я предполагаю, что установка времени запуска без опроса должна читаться как установка времени запуска AT без опроса. Вы можете настроить сценарий времени запуска в пользовательских данных, и он может извлекать другой сценарий или некоторые данные из корзины S3 (или где-либо еще) для управления действиями сценария времени запуска.   -  person jarmod    schedule 29.12.2016
comment
@birryree да, это то, о чем я думаю - мне нужно будет прочитать эту документацию, чтобы увидеть, как ее собрать   -  person el n00b    schedule 29.12.2016


Ответы (1)


API для создания экземпляров имеет следующий метод, доступный в классе RunInstancesRequest, который я использую для запуска данных:

public void setUserData(String userData)

Это полностью соответствует тому, что @birryee говорил в Руководство пользователя.

Поэтому мой образец приложения использует следующий код Java для запуска:

// create the actual request
RunInstancesRequest request = new RunInstancesRequest();
request.withMinCount(1).withMaxCount(count);
request.withKeyName("TheOwner");
request.withSecurityGroups("SSH");
request.withInstanceType(InstanceType.T2Micro);
request.withImageId("MyImageID");
request.withRegion(Region.getRegion(Regions.US_EAST_1));

// add a web hook call to notify us when the instance is launched
request.withUserData("#!/bin/bash\ncurl -X POST http://domain.com/email-me");

// launch it
RunInstancesResult awsResponse = awsClient.runInstances(request);
person el n00b    schedule 29.12.2016
comment
Ваш сценарий пользовательских данных, вероятно, должен быть более сложным, чем этот. Например, возможно, что базовый сетевой стек может быть не полностью запущен в момент запуска вашего скрипта, поэтому ваша попытка curl может завершиться неудачей. Некоторые идеи здесь: stackoverflow.com/questions/24962839/ - person jarmod; 30.12.2016
comment
@jarmod Это немного сложнее для реального запуска. На самом деле на образе предварительно развернут сценарий оболочки, который обрабатывает все, включая зацикливание и ожидание сетевого подключения, когда я запускаю специализированные команды. Но спасибо! - person el n00b; 07.01.2017