用户数据的 Base64 编码脚本(AWS SDK for Java API)
Base64 encode script for user data (AWS SDK for Java API)
如何将 bash 脚本文件中的内容转换为 base64 编码的字符串,以便与亚马逊的 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() 平息异常但脚本仍然不执行。字符串应该如何格式化?要不要有马车returns?
对于编码,您需要使用亚马逊提供的编码class。
即amazon.webservices.common.Encoding
它包含 API EncodeBase64(),您 returns 对数据进行了编码。
public static String EncodeBase64(byte[] rawData) {
return Base64.encodeBytes(rawData);
}
com.amazonaws.util.Base64.encodeAsString 适合我。我使用 \n 来分隔多行。您也可以在 /var/lib/cloud/instance/user-data.txt 验证它相同 http://169.254.169.254/user-data returns.
使用上面的答案时遇到问题。我的解决方案是我导入了
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()));
如何将 bash 脚本文件中的内容转换为 base64 编码的字符串,以便与亚马逊的 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() 平息异常但脚本仍然不执行。字符串应该如何格式化?要不要有马车returns?
对于编码,您需要使用亚马逊提供的编码class。
即amazon.webservices.common.Encoding
它包含 API EncodeBase64(),您 returns 对数据进行了编码。
public static String EncodeBase64(byte[] rawData) {
return Base64.encodeBytes(rawData);
}
com.amazonaws.util.Base64.encodeAsString 适合我。我使用 \n 来分隔多行。您也可以在 /var/lib/cloud/instance/user-data.txt 验证它相同 http://169.254.169.254/user-data returns.
使用上面的答案时遇到问题。我的解决方案是我导入了
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()));