amazon-ec2 - EC2 Java SDK - 用户数据脚本

标签 amazon-ec2 amazon-web-services

我正在寻找一种将用户数据脚本附加到 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/

相关文章:

linux - Jenkins 亚马逊 Linux 设置

amazon-web-services - 如何在 AWS 模板中没有给定 Image-Id 的情况下创建 EC2 实例?

mysql - 如何在 AWS DMS 中为源数据库设置时区?

amazon-web-services - 如何 grep 到 S3 中存储的文件

mysql - 如何在 cpanel 中使用亚马逊 rds

django - 在 ec2 中自动部署

amazon ec2 中的 docker app 此站点无法提供安全连接

amazon-ec2 - 如何创建可以休眠的 ec2 实例?

ruby - AWS Ruby SDK v2 堆栈过滤

image - 使用 AWS Amplify 从 React Native 上传到 S3