2010-07-01 22 views
5

Je cherche un moyen d'attacher un script de données utilisateur à une RunRequest EC2 dans Java SDK (l'équivalent de ec2-run-instances ami-1234567 -f startup-script.zip pour l'outil de ligne de commande). J'ai lu que toute chaîne de données utilisateur avec "#!" Va s'exécuter, mais cela ne semble pas être le cas.EC2 Java SDK - Script de données utilisateur

Est-ce encore possible?

Pour votre information: Voici ma classe de test:

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

} 

Malheureusement, après que je cours, je suis en mesure de SSH dans la boîte, et confirme que

  • Il a pas fermé et
  • Il n'a pas télécharger le fichier

Toute aide est grandement appréciée.

Best,

Zach

Répondre

1

Il pourrait être possible que l'AMI votre utilisant does not support script de données utilisateur? Veuillez utiliser les AMI disponibles sur www.alestic.com.

Une bonne référence aussi http://alestic.com/2009/06/ec2-user-data-scripts

+0

Vous êtes tout à fait correct. Il semble que les versions par défaut d'Amazon n'exécutent pas de scripts utilisateur. Alors que les AMI d'Alestic sont fiables, j'ai un code spécifique à Fedora, alors je suis allé de l'avant et j'ai utilisé une bibliothèque Java pour SSH dans la boîte et j'ai exécuté tout ce dont j'avais besoin. –

0

Cela fonctionne pour insérer des données utilisateur dans une requête géré par exemple, dans ce cas, en particulier à se joindre à un groupe 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; 
}