【问题标题】:AWS Java API - Create EC2 (runInstances) and execute commandAWS Java API - 创建 EC2 (runInstances) 并执行命令
【发布时间】:2017-05-14 00:50:07
【问题描述】:

我可以使用AWS Java API 从使用runInstances(...) 在环境中创建的快照轻松创建实例。我以这样一种方式设置了快照,它可以自动启动一组进程和其他东西,这样我就有了一个功能齐全的配置。

我想做的是让实例自动运行我配置的命令并设置启动时间无需轮询。有什么功能可以做到这一点吗?

现在我正在使用Java Secure Channel library 轮询它何时可用;但是,我宁愿不必担心,如果可能的话,让 AWS 处理它。

命令在启动时根据运行方式/时间而变化,因此我可能需要执行以下命令:

SomeBashScript.sh -e SOME_ID some_command

【问题讨论】:

  • 听起来你想要User-Datadocs.aws.amazon.com/AWSEC2/latest/UserGuide/…
  • 我假设“设置启动时间而不进行轮询”应改为“设置 AT 启动时间而不进行轮询”。您可以在 userdata 中配置启动时间脚本,它可以从 S3 存储桶(或其他地方)提取另一个脚本或一些数据来驱动启动时间脚本的操作。
  • @birryree 是的,这就是我的想法 - 我需要通读该文档以了解如何将它们组合在一起

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


【解决方案1】:

用于创建实例的 API 在我用来启动数据的 RunInstancesRequest 类上提供了以下方法:

public void setUserData(String userData)

这完全涵盖了@birryee 在User Guide 中所说的内容。

因此,我的示例应用程序使用以下 Java 代码来启动:

// create the actual request
RunInstancesRequest request = new RunInstancesRequest();
request.withMinCount(1).withMaxCount(count);
request.withKeyName("TheOwner");
request.withSecurityGroups("SSH");
request.withInstanceType(InstanceType.T2Micro);
request.withImageId("MyImageID");
request.withRegion(Region.getRegion(Regions.US_EAST_1));

// add a web hook call to notify us when the instance is launched
request.withUserData("#!/bin/bash\ncurl -X POST http://domain.com/email-me");

// launch it
RunInstancesResult awsResponse = awsClient.runInstances(request);

【讨论】:

  • 您的用户数据脚本应该比这更复杂。例如,在您的脚本运行时,底层网络堆栈可能没有完全启动,因此您的 curl 尝试可能会失败。这里有一些想法:stackoverflow.com/questions/24962839/…
  • @jarmod 对于真正的发布来说要复杂一些。实际上,映像上预先部署了一个 shell 脚本,它处理所有事情,包括循环和等待我运行专门命令的网络连接。不过谢谢!
猜你喜欢
  • 2018-07-13
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 2015-09-07
相关资源
最近更新 更多