如何在AWS Windows实例中运行用户数据脚本之前启用联网

时间:2018-08-10 22:29:48

标签: windows amazon-web-services amazon-s3 amazon-ec2

我一直在努力引导AWS中的Windows实例。实例启动时,我需要从S3和其他位置下载一些内容并执行它们。

对于Linux实例而言,这似乎非常简单,但对于Windows实例而言却并非如此。

我有一个用户数据脚本,可以在登录实例后运行时运行,但是当它作为此处所述的EC2Launch / EC2Config的一部分运行时却无法运行:https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html

我发现它不起作用的原因是由于以下原因我无法从Internet下载内容:“由于用户尚未登录网络,未执行所请求的操作。服务不存在。“

我真正想做的是以下事情:

  1. 下载AWS_CLI安装程序
  2. 安装AWS_CLI
    • 在包装盒上,我可以使用msiexec和/ qn标志通过CLI安装程序安装CLI
  3. 从S3中拉出物品
    • 这应该可以通过aws s3 cp或sync
    • 完成
  4. 安装Python(安装程序存储在S3中)
    • 在与CLI安装程序类似的盒子上,我可以使用msiexec安装安装程序
  5. 执行从S3提取的(python)脚本

有人知道更好的方法吗?在我RDP加入之后,所有这些都可以工作,但不能作为启动脚本的一部分。

TL; DR -我需要使用提供给我的EC2 Windows实例的EC2Launch用户数据脚本下载内容,但该网络在运行时似乎不可用。

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,我正在使用BITS在“用户数据”脚本上下载安装程序,并收到相同的错误:“由于用户尚未登录网络,未执行所请求的操作。指定的服务不存在。“

这不是由于网络问题,而是取决于BITS的工作方式,启动下载作业的用户必须登录到计算机上,“用户数据”似乎并非如此执行"runs as" the local Administrator,而不会以BITS可以识别的方式登录用户。来自BITS documentation

  

为了使BITS能够检测到用户已登录,该用户必须使用以下交互式登录选项之一:

     
      
  • 通过“欢迎”屏幕登录。
  •   
  • 登录到终端客户端。
  •   
  • 使用快速的用户切换。
  •   
  • 从Windows 10版本开始,使用Remote Powershell从另一台设备登录。
  •   

在执行脚本的过程中,网络已挂载并可以使用,您可以使用不依赖BITS的其他方法(例如:Invoke-WebRequest(对于较大的文件,rather slow)下载文件,也可以使用System.Net.WebClient,都在PowerShell上。