如何解决 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 中启动实例。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?