我想启动一个EC2 Windows实例,上传一个EXE可执行文件执行它(全部以自动化方式,这很重要)
到目前为止,我能够以编程方式启动EC2 Windows实例&获取其参数(密码/ IP),现在我想找到一种方法来上传这个可执行文件(从我的Windows机器或我的其他EC2 linux实例)运行。
我考虑推出一个RDP连接使用宏软件上传&执行该文件,但是根据以往的经验,这是一个糟糕/脆弱的方法。
我也想到把这个EXE上传到服务器上,然后在Windows上做这样的事情:
wget http://www.domain.com/my-file.exe
除了Windows没有wget!
所以我的问题是:有没有办法以编程方式上传&在EC2 Windows实例中执行EXEcutable?
命令ec2-run-instances有两个额外的参数,可以在运行该命令时使用。用户数据命令和用户数据文件,只要他们从不同的输入读取,执行相同的任务。当您使用此参数时,用户数据的内容将被上传到亚马逊托管的URI http://169.254.169.254/1.0/user-data仅适用于已启动的实例。
在Linux环境中执行此操作的正常方法是将shell脚本上传到实例以下载exe,您的用户数据文件可能看起来像这样…
#! /bin/bash wget http://www.domain.com/my-file.exe
在Windows中,在启动实例时,没有安装默认服务来执行用户数据文件,但是有一个开源项目CloudInit.NET可以模拟相同的进程,但使用了powershell脚本。唯一的要求是.NET 4.0和CloudInit.NET。一旦安装,它将在启动实例时执行用户数据文件。下载一个文件并用powershell脚本执行它是非常容易的。
!# /powershell/ $wc = New-Object System.Net.WebClient $wc.DownloadFile("http://www.domain.com/my-file.exe","C:\my-file.exe"); & 'C:\my-file.exe'