我正在尝试在生成新实例时发送一些userData但不幸的是它无法正常工作。代码是:
出于调试目的,我刚刚使用了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 :(得分:0)
创建实例后,进入EC2 Web控制台并查看实例上的用户数据。您应该能够在Web控制台中将其视为纯文本。如果它不存在,或者它包含您试图设置为用户数据的两行以外的内容,那么您将知道设置用户数据的方式存在问题。
如果它存在并且看起来正确,那么您将需要在创建的实例上查看cloud-init服务日志/var/log/cloud-init-output.log
以查看错误是什么。
编辑:我刚注意到您说机器上没有cloud-init日志。你在这台服务器上使用什么操作系统?它可能没有cloud-init服务。