Shell 在AmazonEC2中启动实例时传递脚本
是否可以在启动实例时传递脚本?使实例在初始化脚本后执行该脚本Shell 在AmazonEC2中启动实例时传递脚本,shell,amazon-ec2,amazon-web-services,cloud,Shell,Amazon Ec2,Amazon Web Services,Cloud,是否可以在启动实例时传递脚本?使实例在初始化脚本后执行该脚本 public static void startInstance(final String instanceId) { StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds(instanceId); logger.info(String.format("Starting instance '%s':...", i
public static void startInstance(final String instanceId) {
StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds(instanceId);
logger.info(String.format("Starting instance '%s':...", instanceId));
ec2.startInstances(startRequest);
}
有什么想法吗?脚本将是一种启动脚本,我需要在实例准备就绪后立即执行。提前感谢。您可以使用Userdata将脚本传递给新的EC2实例,尽管我不知道您是否可以启动一个预先存在的实例并传递它的数据 我有一个预配置的AMI,它在根驱动器上保存了一个脚本,这个脚本用于配置服务器和下载最新的源代码 因此,您的请求可能如下所示: var runInstance=new runInstanceRequest()
用户数据可以包含对脚本的引用,也可以包含脚本本身。2009年,我在社区Ubuntu AMIs中引入了用户数据脚本的概念(RightScale中一些想法的简化版本): 归结起来是: 如果实例用户数据以两个字符开头
#代码>然后实例在第一次启动时以root用户身份运行它。
此功能后来包含在CloudInit包的官方Ubuntu AMIs中:
Amazon现在在其自己的Amazon Linux AMI中包含CloudInit包:
欢迎其他发行版(可能已经)在其AMI中包含此功能。可以在实例停止时更改其用户数据,但当实例再次启动时,CloudInit软件将不会运行它。用户数据脚本只在实例的第一次启动时运行。因此,如果我们想在每次启动实例时运行脚本,那么没有办法做到这一点?再次感谢Eric@tanzir:您的用户数据脚本可以安装一个标准启动脚本,在每次启动时运行。我在Ubuntu规范映像中使用cloud init包已经有一段时间了。它通常工作得很好,但是我见过一些罕见的情况,脚本由于某种原因没有执行,因此当你的应用程序第一次开始运行时,你可能需要进行一次健全性检查,以确保你想要运行的脚本实际执行。例如,我的heartbeat脚本用于弹性负载平衡器检查系统上的某些数据,在返回ELB运行状况检查的200响应之前,这些数据只能由启动脚本填充。这太棒了!非常感谢埃里克和迈克。。。还有一个问题,在快速搜索后发现,如果我们想通过AWS SDK实现,RunInstances就是方法。现在的问题是,RunInstances和StartInstances之间有什么区别?谢谢again@tanzir:在EC2上,“run”创建一个新实例,“start”获取一个已停止的现有实例并使其再次运行。
runInstance.WithImageId("{ami-id}")
.WithInstanceType("{size}")
.WithMaxCount(1)
.WithMinCount(1)
.WithSecurityGroup("{the security group}")
.WithKeyName("{your key}")
.WithUserData(Convert.ToBase64String(Encoding.ASCII.GetBytes(userData)));
ec2.RunInstances(runInstance);