java - 如何使用 java sdk 将新的 EBS 卷附加到现有的 EC2 实例?

标签 java amazon-web-services amazon-ec2

我已经尝试使用 AttachVolumeRequest 但作为响应我收到以下错误

 Caught Exception: The request must contain the parameter volume
 Reponse Status Code: 400
 Error Code: MissingParameter

这是我的代码,在这段代码中,ec2 是我的 amazonclient 对象,到目前为止它工作正常

AttachVolumeRequest attachRequest=new AttachVolumeRequest()
    .withInstanceId("my instance id");
attachRequest.setRequestCredentials(credentials);

EbsBlockDevice ebs=new EbsBlockDevice();
ebs.setVolumeSize(2);

//attachRequest.withVolumeId(ebs.getSnapshotId());

AttachVolumeResult result=ec2.attachVolume(attachRequest);

非常感谢任何帮助。提前致谢

最佳答案

原因

EbsBlockDevice来自 AWS SDK for Java服务于不同的目的,相应的方法getSnapshotId()仅返回将从中创建卷的快照的 ID,即不是卷 ID,因此是相应的异常。

解决方案

您很可能想使用类 CreateVolumeRequest相反,例如(从我的头顶):

CreateVolumeRequest createVolumeRequest = new CreateVolumeRequest()
    .withAvailabilityZone("my instance's AZ") // The AZ in which to create the volume.
    .withSize(2); // The size of the volume, in gigabytes.

CreateVolumeResult createVolumeResult = ec2.createVolume(createVolumeRequest);

AttachVolumeRequest attachRequest = new AttachVolumeRequest()
    .withInstanceId("my instance id");
    .withVolumeId(createVolumeResult.getVolume().getVolumeId());

AttachVolumeResult attachResult = ec2.attachVolume(attachRequest);

关于java - 如何使用 java sdk 将新的 EBS 卷附加到现有的 EC2 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15953587/

相关文章:

java - JUnit 5 有类似 Cucumber 的标记钩子(Hook)的东西吗?

amazon-web-services - CDK 将预先存在的存储桶用于 CI CD Pipeline for Artifacts

Node.js Elastic Beanstalk 在重负载下拒绝连接 (ECONNRESET)

amazon-ec2 - Amazon EC2 公共(public) ipv6 地址

java - 存储矩阵值以供以后访问的更好方法

java - Spring MVC - 使用 @ExceptionHandler 处理异常不会呈现新 View

amazon-web-services - Amazon S3 - 当文件被 s3cmd 删除时,ColdFusion 的 fileExists 中断

amazon-web-services - Terraform NAT 网关设置路由表

amazon-web-services - 是否可以让 AWS Spot 实例仅在 'price is right' 时启动并运行,如果没有则在标准实例上运行?

java - 如何用enum进行分类