2010-07-01 6 views
5

Estoy buscando una forma de adjuntar una secuencia de comandos de datos de usuario a una EC2 RunRequest en el Java SDK (el equivalente a ec2-run-instances ami-1234567 -f startup-script.zip para la herramienta de línea de comandos).EC2 Java SDK - Script de datos de usuario

Severalthings He leído indicar que cualquier cadena de datos de usuario con "#!" Se ejecutará, pero este no parece ser el caso.

¿Esto es posible?

FYI: aquí está mi clase de prueba:

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(); 
    } 

} 

Por desgracia, después de ejecutar esto, yo soy capaz de SSH en la caja, y confirmo que

  • No se ha apagado y
  • no se ha descargado el archivo

Cualquier ayuda es muy apreciada.

mejor,

Zach

Respuesta

1

Podría ser posible que el IAM su uso no admite la escritura de datos de usuario? Utilice las AMI que se encuentran en www.alestic.com.

Una buena referencia también http://alestic.com/2009/06/ec2-user-data-scripts

+0

usted es totalmente correcto. Parece que las versiones predeterminadas de Amazon no ejecutan scripts de usuario. Si bien las AMI de Alestic son confiables, tengo un código específico de Fedora, así que seguí y usé una biblioteca Java para SSH en el cuadro y ejecuté todo lo que necesitaba. –

0

Esto funciona para insertar los datos del usuario en una solicitud de instancia de ejecución, en este caso específicamente para unirse a un clúster 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; 
} 
Cuestiones relacionadas