我正在尝试在 AWS CodeDeploy 中启动一个 Windows Amazon Machine Image (AMI) 实例。当我尝试启动该实例时,我的 AWS CodeDeploy 代理日志文件中收到类似以下内容的错误:“CodeDeploy 实例代理服务:在启动或运行期间发生错误:Net::OpenTimeout - execution expired - C:/Windows/TEMP/ocrFxxx.tmp/lib/ruby/2.3.0/net/http.rb:880:in 'initialize'。” 如何解决此错误?
简短描述
对于 AWS 提供的 Windows Server 2016 AMI 启动实例而言,元数据或 AWS Key Management Service (AWS KMS) 路由在第一次启动时进行静态设置。如果您从此类实例中创建自定义 AMI,将作为操作系统配置的一部分来捕获这些路由。您从 AMI 启动的任何新实例将保留相同的路由,无论子网置放如何。
从自定义 AMI 启动时,不会更新这些静态路由,除非下面的其中一项为真:
- 您在将 Sysprep 用于您的自定义 AMI。
- Amazon Elastic Compute Cloud (Amazon EC2) 会启动在您创建 AMI 之前计划的初始化任务。
如果您从此类 AMI 将 EC2 实例启动到另一个 Amazon Virtual Private Cloud (Amazon VPC)、子网或 CIDR 块中:
- 配置的路由不再有效。
- 实例无法到达元数据服务或实例激活所需的 AWS KMS 服务器。
解决方法
1. 在 Windows 中创建自定义 AMI。
2. 使用您在步骤 1 中创建的自定义 AMI 启动新实例。
**重要提示:**如果您使用 Sysprep,请在启动新实例后使用 Sysprep。
3. 连接到您已启动的 Windows 实例。
4. 以管理员身份登录 Windows PowerShell。
5. 在 PowerShell 中,导航到 C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts。然后,输入以下内容:
.\InitializeInstance.ps1 -Schedule
6. 按 Enter。
7. 关闭您在步骤 3 中创建的实例。然后,从您关闭的实例创建一个新实例。
8. 使用新的 AMI 在 CodeDeploy 中启动实例。