Base64用户数据编码脚本(AWS SDK for Java API)
如何将bash脚本文件中的内容转换为base64编码的字符串,以便与Amazon的Java API一起使用?此代码表示我正在尝试执行的操作,但导致异常: …原因:com.amazonaws.AmazonServiceException:用户数据的BASE64编码无效(服务:AmazonEC2;状态代码:400;错误代码:InvalidParameterValueBase64用户数据编码脚本(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
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()));
有链接或完整的类路径吗?请检查此链接。