我正在寻找一种将用户数据脚本附加到 Java SDK 中的 EC2 RunRequest 的方法(相当于命令行工具的 ec2-run-instances ami-1234567 -f startup-script.zip)。
Several things 我读过表明任何带有“#!”的用户数据字符串都将执行,但情况似乎并非如此。
这可能吗?
仅供引用:这是我的测试类:
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();
}
}
不幸的是,运行此命令后,我能够通过 SSH 进入盒子,并确认
- 它尚未关闭并且
- 它没有下载文件
非常感谢任何帮助。
最好,
扎克
最佳答案
这可以在实例运行请求中插入用户数据,在本例中专门用于加入 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;
}
关于amazon-ec2 - EC2 Java SDK - 用户数据脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3162236/