2

启动实例时是否可以传递脚本?这样实例将在初始化后执行该脚本?

public static void startInstance(final String instanceId) {
    StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds(instanceId);
    logger.info(String.format("Starting instance '%s':...", instanceId));
    ec2.startInstances(startRequest);       
}

任何想法?脚本将是一种启动脚本,我需要在实例准备好后立即执行它。提前致谢。

4

2 回答 2

5

我在 2009 年的社区 Ubuntu AMI 中引入了用户数据脚本的概念(来自 RightScale 的一些想法的简化版):

http://alestic.com/2009/06/ec2-user-data-scripts

它归结为:

如果实例 user-data 以这两个字符开头,#!则实例在第一次启动时以 root 用户身份运行它。

此功能后来包含在 CloudInit 包中的官方 Ubuntu AMI 中:

https://help.ubuntu.com/community/CloudInit

Amazon 现在在自己的 Amazon Linux AMI 中包含 CloudInit 包:

http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AmazonLinuxAMIBasics.html

欢迎其他发行版(并且可能已经)在其 AMI 中包含此功能。

于 2012-10-26T00:15:48.230 回答
0

您可以使用 Userdata 将脚本传递给新的 EC2 实例,尽管我不知道您是否可以启动预先存在的实例并将数据传递给它。

我有一个预配置的 AMI,它在根驱动器上保存了一个脚本,这个脚本用于配置服务器并下载最新的源代码。

因此,您的请求可能如下所示:

var runInstance = new RunInstancesRequest();

        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);

用户数据可以包含对脚本的引用或脚本本身。

于 2012-10-25T22:58:02.747 回答