

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

# 一般问题排查
<a name="troubleshooting-general"></a>

**Topics**
+ [一般问题排查核对清单](#troubleshooting-checklist)
+ [CodeDeploy 只有某些 AWS 区域支持部署资源](#troubleshooting-supported-regions)
+ [本指南中的步骤与 CodeDeploy 控制台不匹配](#troubleshooting-old-console)
+ [所需的 IAM 角色不可用](#troubleshooting-iam-cloudformation)
+ [使用某些文本编辑器创建 AppSpec 文件和 shell 脚本可能会导致部署失败](#troubleshooting-text-editors)
+ [使用 macOS 中的 Finder 捆绑应用程序修订可能会导致部署失败](#troubleshooting-bundle-with-finder)

## 一般问题排查核对清单
<a name="troubleshooting-checklist"></a>

您可以使用以下核对清单来排查失败部署问题。

1. 请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)和[使用 CodeDeploy 查看实例详细信息](instances-view-details.md)以确定部署失败的原因。如果您无法确定原因，请查看此核对清单中的项。

1. 确保您已正确配置实例：
   + 是否已使用指定的 EC2 密钥对启动实例？ 有关更多信息，请参阅《Amazon EC2 用户指南》**中的 [EC2 密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EC2-key-pairs.html)。
   + 是否已将正确的 IAM 实例配置文件附加到实例？ 有关更多信息，请参阅[配置要使用的 Amazon EC2 实例 CodeDeploy](instances-ec2-configure.md)和[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)。
   + 是否已标记实例？ 有关更多信息，请参阅《Amazon EC2 用户指南》**中的[在控制台中使用标签](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#Using_Tags_Console)。
   + 是否已在实例上安装、更新和运行 CodeDeploy 代理？ 有关更多信息，请参阅 [管理 CodeDeploy 代理操作](codedeploy-agent-operations.md)。要检查安装了哪个版本的代理，请参阅[确定 CodeDeploy 代理的版本](codedeploy-agent-operations-version.md)。

1. 检查应用程序和部署组设置：
   + 要检查应用程序设置，请参阅[使用查看应用程序详情 CodeDeploy](applications-view-details.md)。
   + 要检查部署组设置，请参阅[使用查看部署组的详细信息 CodeDeploy](deployment-groups-view-details.md)。

1. 确认已正确配置应用程序修订：
   + 检查您的 AppSpec 文件格式。有关更多信息，请参阅[将应用程序规范文件添加到修订版中 CodeDeploy](application-revisions-appspec-file.md)和[CodeDeploy AppSpec 文件引用](reference-appspec-file.md)。
   + 检查您的 Amazon S3 存储桶或 GitHub 存储库，确认您的应用程序修订位于预期位置。
   + 查看 CodeDeploy 应用程序修订版的详细信息，确保其注册正确。有关信息，请参阅[使用查看应用程序修订详情 CodeDeploy](application-revisions-view-details.md)。
   + 如果您是从 Amazon S3 进行部署，请检查您的 Amazon S3 存储桶，以验证是否 CodeDeploy 已被授予下载应用程序修订版的权限。有关桶策略的信息，请参阅[部署先决条件](deployments-create-prerequisites.md)。
   + 如果您从中部署 GitHub，请检查您的 GitHub 存储库以确认是否 CodeDeploy已被授予下载应用程序修订版的权限。有关更多信息，请参阅[使用创建部署 CodeDeploy](deployments-create.md)和[GitHub 使用中的应用程序进行身份验证 CodeDeploy](integrations-partners-github.md#behaviors-authentication)。

1. 确保已正确配置服务角色。有关信息，请参阅[步骤 2：为创建服务角色 CodeDeploy](getting-started-create-service-role.md)。

1. 确认您已执行[入门 CodeDeploy](getting-started-codedeploy.md)中的步骤，以便：
   + 已为用户预置适当的权限。
   + 安装或升级并配置 AWS CLI。
   + 创建 IAM 实例配置文件和服务角色。

   有关更多信息，请参阅 [的身份和访问管理 AWS CodeDeploy](security-iam.md)。

1. 确认您使用的是 AWS CLI 版本 1.6.1 或更高版本。要检查已安装的版本，请调用 **aws --version**。

如果您仍无法排查失败部署的问题，请查看本主题中的其他问题。

## CodeDeploy 只有某些 AWS 区域支持部署资源
<a name="troubleshooting-supported-regions"></a>

如果您在或 CodeDeploy 控制台中看不到或无法访问应用程序、部署组、实例或其他部署资源，请确保您引用的是区域和中[终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中*AWS 一般参考*列出的其中一个 AWS 区域。 AWS CLI 

 CodeDeploy 部署中使用的 EC2 实例和 Amazon EC2 Auto Scaling 群组必须在其中一个 AWS 区域启动和创建。

如果您使用的是 AWS CLI，请从中运行**aws configure**命令 AWS CLI。然后，您可以查看和设置您的默认 AWS 区域。

如果您使用的是 CodeDeploy 控制台，请在导航栏的区域选择器中选择一个支持的 AWS 区域。

**重要**  
要使用中国（北京）区域或中国（宁夏）区域中的服务，您必须拥有特定于这些区域的账户和凭证。其他 AWS 区域的账户和凭证不适用于北京和宁夏区域，反之亦然。  
有关中国区域某些资源的信息， CodeDeploy 例如资源套件存储桶名称 CodeDeploy 和代理安装过程，未包含在本版本的*用户指南CodeDeploy 中*。  
有关更多信息：  
[CodeDeploy](http://docs.amazonaws.cn/en_us/aws/latest/userguide/codedeploy.html)in *[中国（北京） AWS 地区入门](http://docs.amazonaws.cn/en_us/aws/latest/userguide/introduction.html)*
*CodeDeploy 中国地区用户指南*[（英文](http://docs.amazonaws.cn/en_us/codedeploy/latest/userguide/welcome.html)版 [\$1 中文](http://docs.amazonaws.cn/codedeploy/latest/userguide/welcome.html)版）

## 本指南中的步骤与 CodeDeploy 控制台不匹配
<a name="troubleshooting-old-console"></a>

 本指南中的过程在撰写时体现了新的控制台设计。如果您使用的是旧版本的控制台，本指南中的许多概念和基本步骤仍然适用。要访问新控制台中的帮助，请选择信息图标。

## 所需的 IAM 角色不可用
<a name="troubleshooting-iam-cloudformation"></a>

如果您依赖作为 AWS CloudFormation 堆栈一部分创建的 IAM 实例配置文件或服务角色，那么如果您删除堆栈，则所有 IAM 角色也会被删除。这可能就是为什么 IAM 角色不再显示在 IAM 控制台中且 CodeDeploy 不再按预期工作的原因。要纠正此问题，您必须手动重新创建已删除的 IAM 角色。

## 使用某些文本编辑器创建 AppSpec 文件和 shell 脚本可能会导致部署失败
<a name="troubleshooting-text-editors"></a>

某些文本编辑器会将非标准、非打印字符引入文件中。如果您使用文本编辑器创建或修改 AppSpec 文件或 shell 脚本文件以在 Amazon Linux、Ubuntu Server 或 RHEL 实例上运行，则依赖这些文件的任何部署都可能失败。在部署期间 CodeDeploy 使用这些文件时，这些字符的存在可能导致 hard-to-troubleshoot AppSpec 文件验证失败和脚本执行失败。

在 CodeDeploy 控制台中，在部署的事件详细信息页面上，选择**查看日志**。（或者你可以使用 AWS CLI 来调用[get-deployment-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html)命令。） 查找类似于 `invalid character`、`command not found` 或 `file not found` 的错误。

为了解决此问题，我们建议：
+ 不要使用在 AppSpec 文件和 shell 脚本文件中引入非打印`^M`字符（如回车符（字符）的文本编辑器。
+ 使用在 AppSpec 文件和 shell 脚本文件中显示非打印字符（例如回车符）的文本编辑器，这样您就可以查找和删除任何可能引入的字符。有关这些类型的文本编辑器的示例，请在 Internet 上搜索“显示回车的文本编辑器”。
+ 使用在 Amazon Linux、Ubuntu Server 或 RHEL 实例上运行的文本编辑器创建在 Amazon Linux、Ubuntu Server 或 RHEL 实例上运行的 shell 脚本文件。有关这些类型的文本编辑器的示例，请在 Internet 上搜索“Linux Shell 脚本编辑器”。
+ 如果您必须使用 Windows 或 macOS 中的文本编辑器来创建要在 Amazon Linux、Ubuntu Server 或 RHEL 实例上运行的 Shell 脚本文件，请使用可将 Windows 或 macOS 格式的文本转换为 Unix 格式的程序或实用工具。有关这些程序和实用工具的示例，请在 Internet 上搜索“DOS 到 UNIX”或“Mac 到 UNIX”。请确保在目标操作系统上测试转换后的 Shell 脚本文件。

## 使用 macOS 中的 Finder 捆绑应用程序修订可能会导致部署失败
<a name="troubleshooting-bundle-with-finder"></a>

如果您在 Mac 上使用 Finder 图形用户界面 (GUI) 应用程序将 AppSpec 文件及相关文件和脚本捆绑 (zip) 到应用程序修订存档 (.zip) 文件中，则部署可能会失败。这是因为，Finder 将在 .zip 文件中创建一个中间 `__MACOSX` 文件夹并将组件文件放入其中。 CodeDeploy 找不到组件文件，因此部署失败。

要解决此问题，我们建议您使用调用 p [ush](https://docs.aws.amazon.com/cli/latest/reference/deploy/push.html) 命令，该命令会将组件文件压缩到预期的结构中。 AWS CLI 或者，您可以使用 Terminal（而不是 GUI）来压缩组件文件。Terminal 不创建中间 `__MACOSX` 文件夹。