如何解决 CodeDeploy中的“Net::OpenTimeout”错误?

上次更新时间:2020 年 4 月 7 日

当我尝试启动我的 Windows Amazon 系统映像 (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.连接到您启动的实例。

4.以管理员身份登录 Windows PowerShell。

5.在 PowerShell 中,导航到 C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts,然后输入以下各项:

.\InitializeInstance.ps1 -Schedule

6.按 Enter

7.关闭您在步骤 3 中创建的实例,然后从您关闭的实例中创建一个新实例。

8.使用新的 AMI 在 CodeDeploy 中启动实例。