我一直在努力在 AWS 中引导我的 Windows 实例。我需要在实例启动时从S3等地方下载一些东西并执行它们。
这对于 Linux 实例来说似乎非常简单,但对于 Windows 实例来说就不是那么简单了。
我有一个用户数据脚本,当我在登录实例后运行它时它可以工作,但是当它作为此处描述的 EC2Launch/EC2Config 的一部分运行时它不起作用:https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-user-data.html
我发现它不起作用的原因是我无法从互联网上下载东西,原因是:“请求的操作没有执行,因为用户没有登录到网络。指定的服务不存在。”
我真正想做的是:
- 下载 AWS_CLI 安装程序
- 现在我正在使用 bitsadmin 尝试从 https://s3.amazonaws.com/aws-cli/AWSCLI64.msi 下载安装程序
- 安装 AWS_CLI
- 我可以使用 msiexec 和/qn 标志通过 CLI 安装程序安装 CLI,一旦它出现在盒子上
- 从 S3 中提取项目
- 这应该可以通过 aws s3 cp 或 sync 来完成
- 安装 Python(存储在 S3 中的安装程序)
- 一旦它出现在类似于 CLI 安装程序的盒子上,我就可以使用 msiexec 安装安装程序
- 执行从 S3 中提取的(python)脚本
有人知道更好的方法吗?这一切在我进入 RDP 后都有效,但不是作为启动脚本的一部分。
TL;DR - 我需要使用提供给我的 EC2 Windows 实例的 EC2Launch 用户数据脚本下载内容,但运行时网络似乎不可用。
预先感谢您的帮助!
最佳答案
我遇到了类似的问题,我正在使用 BITS 在“用户数据”脚本上下载安装程序,但遇到了同样的错误:“请求的操作未执行,因为用户尚未登录到网络.指定的服务不存在。”
这不是网络问题,而是 BITS 的工作原理,开始下载作业的用户必须登录到计算机上,“用户数据”似乎并非如此执行,"runs as" the local Administrator无需以 BITS 识别的方式登录用户。来自 BITS documentation :
For BITS to detect that a user is logged on, the user must use one of the following interactive logon options:
- Log on through the Welcome screen.
- Log on to a terminal client.
- Use fast user switching.
- Starting with Windows 10, version, log on from another device using Remote Powershell.
在脚本执行期间,网络已安装并可以使用,您可以使用不依赖 BITS 的其他方法下载文件(例如:Invoke-WebRequest(rather slow 用于更大的文件)或使用 System.Net.WebClient,都在 PowerShell 上)。
关于windows - 如何在 AWS Windows 实例中运行用户数据脚本之前启用网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51794752/