2010-07-01 14 views
5

Ich bin auf der Suche nach einer Möglichkeit, ein Benutzerdatenskript an eine EC2 RunRequest im Java SDK (das Äquivalent von ec2-run-instances ami-1234567 -f startup-script.zip für das Befehlszeilentool) anzuhängen.EC2 Java SDK - Benutzerdaten Skript

Severalthings Ich habe gelesen, dass alles Benutzerdatenstring mit "#!" Ausgeführt wird, aber das scheint nicht der Fall zu sein.

Ist das überhaupt möglich?

FYI: hier ist meine Testklasse:

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

} 

Leider, nachdem ich dieses laufen, ich in der Lage bin in die Box SSH, und bestätigen, dass

  • Es ist nicht geschlossen hat und
  • Es dauerte Download die Datei nicht

Jede Hilfe wird sehr geschätzt.

Best,

Zach

Antwort

1

Es könnte möglich sein, dass die AMI Ihre Benutzerdaten nicht Skript nicht unterstützt? Bitte verwenden Sie die AMIs, die Sie unter www.alestic.com finden.

Eine gute Referenz auch http://alestic.com/2009/06/ec2-user-data-scripts

+0

Sie sind völlig korrekt. Offenbar führen die Standard-Builds von Amazon keine Benutzerskripts aus. Während die AMIs von Alestic zuverlässig sind, habe ich etwas Fedora-spezifischen Code, also ging ich weiter und benutzte eine Java-Bibliothek, um SSH in die Box zu bringen und alles auszuführen, was ich brauchte. –

0

Dies funktioniert, um Benutzerdaten in einer Instanz laufen Anfrage, in diesem Fall legen Sie speziell ein ECS Cluster beizutreten:

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