

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 排查实例问题
<a name="troubleshooting-ec2-instances"></a>

**Topics**
+ [必须正确设置标签](#troubleshooting-EC2-tags)
+ [AWS CodeDeploy 必须在实例上安装并运行代理](#troubleshooting-sds-agent)
+ [如果实例在部署期间终止，在最多 1 小时内部署不会失败。](#troubleshooting-one-hour-timeout)
+ [分析日志文件以调查针对实例的部署失败](#troubleshooting-deploy-failures)
+ [如果 CodeDeploy 日志文件被意外删除，请创建一个新的日志文件](#troubleshooting-create-new-log-file)
+ [疑难解答 “InvalidSignatureException — 签名已过期：[时间] 现在早于 [时间]” 部署错误](#troubleshooting-instance-time-failures)

## 必须正确设置标签
<a name="troubleshooting-EC2-tags"></a>

使用 [list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) 命令确认已正确标记用于部署的实例。如果输出中缺少 EC2 实例，请使用 EC2 控制台确认已在实例上设置标签。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[在控制台中使用标签](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#Using_Tags_Console)。

**注意**  
如果您标记实例并立即使用 CodeDeploy 向其部署应用程序，则该实例可能不会包含在部署中。这是因为可能需要几分钟 CodeDeploy 才能读取标签。建议您在标记实例和尝试对实例进行部署之间等待至少 5 分钟。

## AWS CodeDeploy 必须在实例上安装并运行代理
<a name="troubleshooting-sds-agent"></a>

要验证 CodeDeploy 代理是否已在实例上安装并正在运行，请参阅[验证 CodeDeploy 代理是否正在运行](codedeploy-agent-operations-verify.md)。

要安装、卸载或重新安装 CodeDeploy 代理，请参阅[安装代 CodeDeploy 理](codedeploy-agent-operations-install.md)。

## 如果实例在部署期间终止，在最多 1 小时内部署不会失败。
<a name="troubleshooting-one-hour-timeout"></a>

CodeDeploy 为每个部署生命周期事件提供一小时的时间段，让其运行直至完成。这为长时间运行的脚本提供了足够的时间。

如果在生命周期事件进行期间（例如，如果实例终止或 CodeDeploy 代理关闭），则部署状态最多可能需要一个小时才能显示为 “失败”。即使脚本中指定的超时时段不到 1 小时，也会发生此情况。这是因为当实例终止时， CodeDeploy 代理会关闭，无法处理更多脚本。

不过，如果实例在生命周期事件之间或在第一个生命周期事件步骤开始之前终止，则超时将在 5 分钟后发生。

## 分析日志文件以调查针对实例的部署失败
<a name="troubleshooting-deploy-failures"></a>

如果部署中的实例具有 `Succeeded` 以外的任何状态，您可以查看部署日志文件数据来帮助确定问题。有关访问部署日志数据的信息，请参阅[查看 CodeDeploy EC2/本地部署的日志数据](deployments-view-logs.md)。

## 如果 CodeDeploy 日志文件被意外删除，请创建一个新的日志文件
<a name="troubleshooting-create-new-log-file"></a>

如果您不小心删除了实例上的部署日志文件，则 CodeDeploy 不会创建替换日志文件。要创建新的日志文件，请登录到实例，然后运行以下命令：

**对于 Amazon Linux、Ubuntu Server 或 RHEL 实例**，按此顺序运行这些命令（一次运行一个）：

```
systemctl stop codedeploy-agent
```

```
systemctl start codedeploy-agent
```

**对于 Windows Server 实例**：

```
powershell.exe -Command Restart-Service -Name codedeployagent
```

## 疑难解答 “InvalidSignatureException — 签名已过期：[时间] 现在早于 [时间]” 部署错误
<a name="troubleshooting-instance-time-failures"></a>

CodeDeploy 需要精确的时间参考才能执行其操作。如果您的实例上的日期和时间设置不正确，则它们可能与您的部署请求的签名日期不匹配，您的部署请求会被 CodeDeploy 拒绝。

要避免与不正确的时间设置相关的部署失败，请参阅以下主题：
+  [为 Linux 实例设置时间](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/set-time.html)
+  [为 Windows 实例设置时间](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/windows-set-time.html)