EC2 Java SDK - скрипт пользовательских данных - PullRequest
7 голосов
/ 02 июля 2010

Я ищу способ присоединения сценария пользовательских данных к RunRequest EC2 в Java SDK (эквивалент ec2-run-instances 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 и подтвердить, что

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

Любая помощь очень ценится.

Best

Zach

Ответы [ 2 ]

2 голосов
/ 22 января 2016

Это работает для вставки пользовательских данных в запрос запуска экземпляра, в данном случае специально для присоединения к кластеру 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;
}
1 голос
/ 02 июля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...