EC2 Java SDK - Скрипт пользовательских данных

Я ищу способ прикрепить скрипт пользовательских данных к EC2 RunRequest в Java SDK (эквивалент ec2-run-instance ami-1234567 -f startup-script.zip для инструмента командной строки).

Несколько вещи, которые я прочитал, указывают на то, что любая строка данных пользователя с" #! "будет выполняться, но, похоже, это не так.

Это вообще возможно?

К вашему сведению: вот мой тестовый класс:

public class AWSTest {

    public static void main(String[] args) {

        AWSCredentials credentials = new BasicAWSCredentials("access-key","secret-access-key");
        AmazonEC2Client ec2 = new AmazonEC2Client(credentials);
        RunInstancesRequest request = new RunInstancesRequest();
        request.setInstanceType(InstanceType.M1Small.toString());
        request.setMinCount(1);
        request.setMaxCount(1);
        request.setImageId("ami-84db39ed");
        request.setKeyName("linux-keypair");
        request.setUserData(getUserDataScript());
        ec2.runInstances(request);    
    }

    private static String getUserDataScript(){
        ArrayList<String> lines = new ArrayList<String>();
        lines.add("#! /bin/bash");
        lines.add("curl http://www.google.com > google.html");
        lines.add("shutdown -h 0");
        String str = new String(Base64.encodeBase64(join(lines, "\n").getBytes()));
        return str;
    }

    static String join(Collection<String> s, String delimiter) {
        StringBuilder builder = new StringBuilder();
        Iterator<String> iter = s.iterator();
        while (iter.hasNext()) {
            builder.append(iter.next());
            if (!iter.hasNext()) {
                break;
            }
            builder.append(delimiter);
        }
        return builder.toString();
    }

}

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

  • Он не выключился и
  • Он не загрузил файл

Любая помощь приветствуется.

Лучший,

Зак


person Zachary Ozer    schedule 01.07.2010    source источник


Ответы (2)


Возможно ли, что используемый вами AMI не поддерживает скрипт пользовательских данных? Пожалуйста, используйте AMI, найденные на www.alestic.com.

Хорошая ссылка также на http://alestic.com/2009/06/ec2-user-data-scripts

person Rodney Quillo    schedule 02.07.2010
comment
Вы совершенно правы. Похоже, что стандартные сборки Amazon не выполняют пользовательские скрипты. Хотя AMI от Alestic надежны, у меня есть некоторый код, специфичный для Fedora, поэтому я пошел дальше и использовал библиотеку Java для SSH в коробке и выполнил все, что мне было нужно. - person Zachary Ozer; 03.07.2010

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

private static String getECSuserData(String clusterName) {
    String userData = "";
    userData = userData + "#!/bin/bash" + "\n";
    userData = userData + "echo ECS_CLUSTER=" + clusterName + " ";
    userData = userData + ">> /etc/ecs/ecs.config";
    String base64UserData = null;
    try {
        base64UserData = new String( Base64.encodeBase64( userData.getBytes( "UTF-8" )), "UTF-8" );
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return base64UserData;
}
person Pablo Rodriguez Bertorello    schedule 22.01.2016