如何在 Java 中以编程方式启动和停止 Amazon EC2 实例

Posted

技术标签:

【中文标题】如何在 Java 中以编程方式启动和停止 Amazon EC2 实例【英文标题】:How to start and stop an Amazon EC2 instance programmatically in java 【发布时间】:2012-02-15 14:19:13 【问题描述】:

如何在 java 中使用 aws-sdk 以编程方式启动和停止亚马逊 EC2 实例?

非常感谢任何帮助,因为我花了一天时间试图解决这个问题。

【问题讨论】:

这里是如何创建一个; ***.com/a/6504009/477878 我们对创建不感兴趣,而是对已经存在的实例进行启动/停止。所以有区别 【参考方案1】:

如果您已经使用过AWS API,则只需调用AmazonEC2Client 对象即可。使用以下方法

Start Instance Stop Instance

此外,您可能知道启动/停止机制适用于具有 EBS 支持的根设备的映像。

【讨论】:

【参考方案2】:

我最近在Bamboo AWS Plugin 中实现了这个功能;它是开源的,code is available on Bitbucket,你可以找到一个完整的例子,如何在EC2Task.java 中启动/停止/重启一个实例(实际上应该是一个单独的类,唉......)。

好在这一点也不复杂,例如可以这样启动一个实例:

private String startInstance(final String instanceId, AmazonEC2 ec2, final BuildLogger buildLogger)
        throws AmazonServiceException, AmazonClientException, InterruptedException

    StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds(instanceId);
    StartInstancesResult startResult = ec2.startInstances(startRequest);
    List<InstanceStateChange> stateChangeList = startResult.getStartingInstances();
    buildLogger.addBuildLogEntry("Starting instance '" + instanceId + "':");

    // Wait for the instance to be started
    return waitForTransitionCompletion(stateChangeList, "running", ec2, instanceId, buildLogger); 

BuildLogger 是特定于 Bamboo 的,waitForTransitionCompletion() 是特定于实现的助手,用于报告过程/结果。 AmazonEC2 ec2 参数通过AmazonEC2 接口将引用传递给AmazonEC2Client 对象,该接口定义了所有相关方法(以及许多其他方法),具体而言:

StartInstances() StopInstances() RebootInstances()

【讨论】:

以上是关于如何在 Java 中以编程方式启动和停止 Amazon EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 中以编程方式强制重启/重新加载 Playback 设备?

如何在三星设备中以编程方式启用自动启动选项?

如何在 c#.net 中以编程方式重新启动我的窗口服务

如何在 C# 中以编程方式将 Windows 服务的启动类型更改为禁用

Android - 如何在小米设备中以编程方式启用自动启动选项?

如何在 .NET 中以编程方式启动 Amazon EC2 实例