使用用户数据启动AWS EC2 AMI

时间:2018-10-14 12:58:01

标签: node.js amazon-web-services amazon-ec2

我正在尝试使用用户数据启动我自己的AMI,以便它可以运行脚本然后终止。

因此,我启动了Ec2 Windows Base并将其配置为具有我需要的所有工具(NodeJS等),并将脚本保存到C:\ Projects \ index.js。

然后我将其另存为图像。

然后我用控制台从用户的新数据启动新AMI的EC2

<powershell> node C:\Projects\index.js --uuid=1 </powershell>

如果我将带有RDP的命令运行到EC2中,它将起作用,因此在启动映像时似乎没有运行用户数据。

已经阅读了其他一些问题和答案,可能是因为创建的AMI是由已经启动的实例创建的,因此用户数据不会持久保存。

有人可以建议我每次如何使用自定义用户数据启动AMI吗? (因为UUID会更改)

谢谢

1 个答案:

答案 0 :(得分:0)

另一个对我有用的解决方案是使用EC2Launch运行Sysprep。

问题在于,AWS不会在您的自定义AMI中重新建立到配置文件服务(169.254.169.254)的路由。请参阅本文中SanjitPatel的回复。因此,当我尝试使用自定义AMI创建竞价请求时,新实例无法找到用户数据。

关闭Sysprep实质上会强制AWS重新执行实例上的所有设置工作,就好像它是第一次运行一样。因此,当您创建实例时,使用Sysprep将其关闭,然后创建您的自定义AMI,AWS将为新实例正确设置配置文件服务路由并执行您的用户数据。这样也避免了像persist tag那样手动更改Windows任务并在后续启动时执行用户数据。

这是一个快速的分步说明:

1。使用一个AWS Windows AMI(Windows Server 2016 Nano Server不支持Sysprep)创建实例并传递所需的用户数据(这可能是可选的,但是可以确保将AWS Wire设置脚本正确地传递到处理用户数据)。

2。根据需要自定义实例。

3。使用Sysprep关闭实例。只需打开EC2LaunchSettings应用程序,然后单击“使用Sysprep关机”即可。

4。从刚刚关闭的实例创建自定义AMI。

5。使用自定义AMI创建其他实例,并在创建实例时传递用户数据。用户数据将在实例启动时执行。就我而言,我使用了“竞价请求”屏幕,该屏幕上有一个“用户数据”文本框。 希望这会有所帮助!