2016-08-12 2 views
0

Ich versuche, einige UserData beim Erstellen einer neuen Instanz zu senden, aber leider funktioniert es nicht. Der Code lautet:EC2 UserData funktioniert nicht mit Java SDK

Zu Debuggingzwecken habe ich nur eine Echo-Anweisung verwendet, aber ich kann keine neue Datei finden, die auf dem Computer generiert wird. Ich habe auch die Cloud-Init-Protokolle im Ordner/var/log überprüft, aber keine von ihnen sind vorhanden.

Kann jemand mir helfen, einen Weg zu finden, dieses Problem zu debuggen, oder gibt es etwas Entscheidendes, das ich vermisse?

Ich verwende C4.8xLarge-Instanzen als Referenz.

public static String getUserData() throws UnsupportedEncodingException { 
String userData = ""; 
userData = userData + "#!/bin/bash" + "\n"; 
userData += "echo hello > hello" + "\n"; 

String base64UserData = null; 
try { 
    base64UserData = new String(Base64.encodeBase64(userData.getBytes("UTF-8")), "UTF-8"); 
} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} 
return base64UserData; 
} 

RunInstancesRequest runInstancesRequest = new RunInstancesRequest(); 
runInstancesRequest.setImageId(AMI_ID); 
runInstancesRequest.setEbsOptimized(true); 
runInstancesRequest.setInstanceType(INSTANCE_TYPE); 
runInstancesRequest.setMinCount(1); 
runInstancesRequest.setMaxCount(1); 
runInstancesRequest.withSecurityGroups("JavaSecurityGroup1"); 

runInstancesRequest.withUserData(getUserData()); 

List<BlockDeviceMapping> map = new ArrayList<>(); 
map.add(new BlockDeviceMapping().withEbs(new EbsBlockDevice().withSnapshotId("snap-af8s67ef").withIops(9000).withVolumeSize(300).withVolumeType("io1")).withDeviceName("/dev/sdf")); 
runInstancesRequest.withBlockDeviceMappings(map); 

RunInstancesResult runInsRes = ec2.runInstances(runInstancesRequest); 

Vielen Dank!

Antwort

0

Nachdem Sie eine Instanz erstellt haben, rufen Sie die EC2-Webkonsole auf und zeigen Sie die Benutzerdaten für die Instanz an. Sie sollten es in der Webkonsole als einfachen Text anzeigen können. Wenn es nicht vorhanden ist oder wenn es etwas anderes als die zwei Zeilen enthält, die Sie als Benutzerdaten festlegen möchten, wissen Sie, dass bei der Einstellung der Benutzerdaten ein Problem auftritt.

Wenn es dort ist und richtig aussieht, dann müssen Sie in das Cloud-Init-Service-Protokoll /var/log/cloud-init-output.log auf der erstellten Instanz schauen, um zu sehen, was der Fehler ist.

Bearbeiten: Ich bemerkte gerade, dass Sie die Cloud-Init-Protokolle nicht auf der Maschine vorhanden sind. Welches Betriebssystem verwenden Sie für diesen Server? Möglicherweise ist der cloud-init-Dienst nicht vorhanden.

+0

Wahr. Ich habe mein eigenes AMI verwendet, auf dem Cloud-Init nicht installiert war. Nach der Installation funktioniert das Skript. Ich sehe keine Ausgabedatei mit dem Namen 'cloud-init-output.log'. Ich vermute, dass dies eine AWS-Funktion ist. In solchen Fällen, wo kann ich die Ausgabe meines Skripts und die Tatsache überprüfen, dass das Skript erfolgreich ausgeführt wurde oder nicht? – LearningToCode

Verwandte Themen