2016-08-12 61 views
0

我想在產生一個新的實例時發送一些userData,但不幸的是它不工作。代碼是:EC2 UserData不能與Java SDK一起工作

爲了進行調試,我剛剛使用了一個echo語句,但是我找不到在機器上生成的任何新文件。我還檢查了/ var/log文件夾中的cloud-init日誌,但沒有一個存在。

任何人都可以幫助我找出一種方法來調試這個問題,或者是有什麼重要的,我失蹤?

我使用C4.8xLarge實例作爲參考。

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

謝謝!

回答

0

創建實例後,進入EC2 Web控制檯並查看實例上的用戶數據。您應該能夠在Web控制檯中以純文本形式查看它。如果它不在那裏,或者如果它包含的是您嘗試設置爲用戶數據的兩行以外的內容,那麼您將知道設置用戶數據的方式存在問題。

如果它在那裏並且看起來正確,那麼您需要查看創建的實例上的cloud-init服務日誌/var/log/cloud-init-output.log以查看錯誤是什麼。

編輯:我剛剛注意到你說雲初始化日誌沒有出現在機器上。你使用的是什麼操作系統?它可能沒有cloud-init服務。

+0

是的。我用我自己的AMI,它沒有安裝cloud-init。安裝後,該腳本起作用。我沒有看到任何名爲'cloud-init-output.log'的輸出文件。我懷疑這是一個AWS功能。在這種情況下,我可以在哪裏查看腳本的輸出以及腳本是否已成功運行? – LearningToCode