Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Base64用户数据编码脚本(AWS SDK for Java API)_Java_Amazon Web Services_Amazon Ec2_User Data - Fatal编程技术网

Base64用户数据编码脚本(AWS SDK for Java API)

Base64用户数据编码脚本(AWS SDK for Java API),java,amazon-web-services,amazon-ec2,user-data,Java,Amazon Web Services,Amazon Ec2,User Data,如何将bash脚本文件中的内容转换为base64编码的字符串,以便与Amazon的Java API一起使用?此代码表示我正在尝试执行的操作,但导致异常: …原因:com.amazonaws.AmazonServiceException:用户数据的BASE64编码无效(服务:AmazonEC2;状态代码:400;错误代码:InvalidParameterValue String startupUserData = "#!/bin/bash cd /home/ubuntu/myTestDir; mv

如何将bash脚本文件中的内容转换为base64编码的字符串,以便与Amazon的Java API一起使用?此代码表示我正在尝试执行的操作,但导致异常:

…原因:com.amazonaws.AmazonServiceException:用户数据的BASE64编码无效(服务:AmazonEC2;状态代码:400;错误代码:InvalidParameterValue

String startupUserData = "#!/bin/bash cd /home/ubuntu/myTestDir; mvn test -PmyBuild";

startupUserData = org.apache.commons.codec.binary.Base64.encodeBase64String(startupUserData.getBytes());

runRqst.withImageId(_computerAmi)
        .withInstanceType(instanceSize)
        .withMinCount(hwRequest.numHwComputers)
        // .withMaxCount(Utils.MAX_EC2_INSTANCES_AT_A_TIME) // NOT THIS
        .withMaxCount(hwRequest.numHwComputers)
        .withKeyName(_keyName)
        .withSecurityGroups(_securityGroup)
        .withUserData(startupUserData);
ec2.runInstances(runRqst);
编辑:
com.amazonaws.util.Base64.encodeAsString()会消除异常,但脚本仍不会执行。字符串应如何格式化?是否有回车符?

对于编码,您需要使用Amazon提供的编码类

i、 eamazon.webservices.common.Encoding

它包含API EncodeBase64(),用于返回编码数据

public static String EncodeBase64(byte[] rawData) {
 return Base64.encodeBytes(rawData);
}

com.amazonaws.util.Base64.encodeAsString适合我。我使用\n分隔多lin。您也可以在/var/lib/cloud/instance/user-data.txt验证它,返回相同的结果。

在使用上述答案时遇到问题。我的解决方案是导入

import com.amazonaws.util.Base64;
然后

String initScript = "sudo -i apt-get install docker.io";

RunInstancesRequest run_request = new RunInstancesRequest()
                .withImageId(ami_id)
                .withInstanceType(InstanceType.T2Micro)
                .withMaxCount(1)
                .withMinCount(1)
                .withUserData(Base64.encodeAsString(initScript.getBytes()));

有链接或完整的类路径吗?请检查此链接。