在我启动实例时是否可以传递脚本?这样实例一旦初始化就会执行该脚本吗?
public static void startInstance(final String instanceId) {
StartInstancesRequest startRequest = new StartInstancesRequest().withInstanceIds(instanceId);
logger.info(String.format("Starting instance '%s':...", instanceId));
ec2.startInstances(startRequest);
}
有什么想法吗?脚本将是一种启动脚本,我需要在实例准备好后立即执行。提前谢谢。
答案 0 :(得分:5)
我在2009年社区Ubuntu AMIs中引入了用户数据脚本的概念(来自RightScale的一些想法的简化版本):
归结为:
如果实例用户数据以两个字符
#!
开头,则实例在第一次启动时以root用户身份运行。
此功能后来包含在CloudInit包中的官方Ubuntu AMI中:
Amazon现在在他们自己的Amazon Linux AMI中包含CloudInit包:
http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/AmazonLinuxAMIBasics.html
欢迎其他发行版(并且可能已经)在其AMI中包含此功能。
答案 1 :(得分: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);
用户数据可以包含对脚本的引用或脚本本身。