【问题标题】:AWS EC2 Java SDK: Start an instance with custom instance typeAWS EC2 Java SDK:使用自定义实例类型启动实例
【发布时间】:2018-09-26 08:45:30
【问题描述】:

我正在尝试通过 Java 代码启动 EC2 实例。我在我的项目中添加了这个 maven 依赖项:

https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-ec2/1.11.308

它为我提供了一个类,可以用来请求启动一个实例。代码如下:

StartInstancesRequest startReq = new StartInstancesRequest()
                .withInstanceIds(instanceID);

ec2Client.startInstances(startReq);

但是,StartInstancesRequest 类中没有with* 方法,它以实例类型为输入。

谁能告诉我如何指定实例类型?

【问题讨论】:

    标签: java amazon-web-services amazon-ec2 aws-java-sdk


    【解决方案1】:

    startInstances 调用实际上用于启动处于停止状态的实例 - 这就是它需要实例 ID 的原因。

    当我想自定义实例时,我使用runInstances。有了它,您可以执行以下操作:

    RunInstancesRequest runInstancesRequest = new RunInstancesRequest();
    
    runInstancesRequest.withImageId("ami-4b814f22")
                       .withInstanceType("m1.small")
                       .withMinCount(1)
                       .withMaxCount(1)
                       .withKeyName("my-key-pair")
                       .withSecurityGroups("my-security-group");
    

    (直接取自Run an Amazon EC2 Instance)。

    这有大量的自定义项,您可以使用它们来配置新实例。

    【讨论】:

    • 从图像创建实例看起来很昂贵。从 AMI 创建实例需要多少时间(根据您的经验)?
    • 通常一分钟左右。启动停止的机器会更快,但是一旦它最初启动,您就不能进行太多自定义。尽可能快地完成此操作的传统方法是使用自定义 AMI,该 AMI 已安装您的所有软件,并且在实例启动后立即可用。
    【解决方案2】:

    如果您不想使用 AMI 并使用 runInstances,为什么不在启动实例之前更改实例类型,如下所示

    // Change the instance type
    ModifyInstanceAttributeRequest modReq = new ModifyInstanceAttributeRequest()
    .withInstanceType(instanceType)
    .withInstanceId(instanceID);
    
    ec2client.modifyInstanceAttribute(modReq);
    
    // Then start your instance
    StartInstancesRequest startReq = new StartInstancesRequest()
                .withInstanceIds(instanceID);
    
    ec2Client.startInstances(startReq);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      相关资源
      最近更新 更多