使用用户指定的脚本重新启动现有 Amazon EC2 实例?
Posted
技术标签:
【中文标题】使用用户指定的脚本重新启动现有 Amazon EC2 实例?【英文标题】:Restart an existing Amazon EC2 instance with a user-specified script? 【发布时间】:2012-11-28 07:23:16 【问题描述】:虽然我找到了大量关于如何使用用户数据脚本 (ala Eric Hammond) 创建 Amazon EC2 AMI 的新实例的文档,但我还没有看到一种方法来启动一个已经存在但目前停止时,Amazon EC2 实例在重新启动时带有用户指定的脚本。
我有许多用于测试和灾难恢复的 Amazon EC2 Ubuntu 实例。我希望能够启动一个并让它,例如,根据需要自动获取和恢复与我们的登台或生产环境相对应的备份。我宁愿不必维护两个独立的实例,每个实例都有自己的弹性 IP。
有什么方法可以通过 Amazon ec2tools 从命令行执行此操作,类似于使用 ec2-run-instances 命令执行此操作的方式?基本上,我希望能够传递一个以 root 身份运行的脚本,就好像它是从 rc.local 或类似文件中调用的一样。
【问题讨论】:
【参考方案1】:您可以在 API 工具的帮助下完成。检查ec2-modify-instance-attribute 命令以获取--user-data
属性。
此外,AWS 控制台允许您对停止的实例执行相同的操作:
或者,您始终可以通过 ssh 作为最后一个参数运行命令或脚本:
ssh [user@]hostname [command]
【讨论】:
这里的问题是,放置在用户数据区域中的脚本仅在第一次从 AMI 创建实例时运行,这可能是为什么ec2-start-instances 命令中没有用户数据参数,即使它存在于 ec2-run-instances 命令中。 SSH 方法当然是可行的,但它没有回答关于能够使用 ec2tools 执行此操作的问题,并且它需要对起始实例上的帐户进行某种身份验证,尽管我想这没什么大不了的,因为我们是使用密钥文件。 我刚刚完成了简单的用户数据测试,可以看到重启或停止/启动后没有执行。在我看来很奇怪可以改变它,但它不会被执行。我会就此联系亚马逊。顺便说一句,看看这个页面 - 你可能也会感兴趣:help.ubuntu.com/community/CloudInit【参考方案2】:您可以考虑使用AWS Command Line Interface 停止/重新启动 Amazon EC2 实例的功能,如 here 所述。
没有弹性负载均衡器
aws ec2 stop-instances --instance-ids i-1a2b3c4d
aws ec2 start-instances --instance-ids i-1a2b3c4d
使用弹性负载均衡器,但没有自动缩放
aws elb deregister-instances-from-load-balancer --load-balancer-name elb-name --instances i-12ab34cd
aws elb register-instances-from-load-balancer --load-balancer-name elb-name --instances i-12ab34cd
具有自动缩放功能的弹性负载均衡器
aws autoscaling update-auto-scaling-group --auto-scaling-group-name "asg-name" --launch-configuration-name "launch-config-name" --min-size 0 --max-size 0
aws autoscaling update-auto-scaling-group --auto-scaling-group-name "asg-name" --launch-configuration-name "launch-config-name" --min-size 1 --max-size 1
【讨论】:
【参考方案3】:您是否研究过云形成模板? http://docs.amazonwebservices.com/AWSCloudFormation/latest/UserGuide/Welcome.html
我想在实例重启时运行脚本会很简单。我这样做是为了在 AWS 上设置 sharepoint 服务器场并调查 CF 脚本。 http://aws.amazon.com/articles/9982940049271604
我没有测试过这个特定的场景,但我相信这应该会提供所需的支持
【讨论】:
【参考方案4】:遗憾的是,答案似乎是目前无法按照我的要求进行。
【讨论】:
以上是关于使用用户指定的脚本重新启动现有 Amazon EC2 实例?的主要内容,如果未能解决你的问题,请参考以下文章
是否有引导脚本在启动时将 Amazon SSM 代理安装到 EC2 Windows 实例中?