

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

# 使用以下实例 CodeDeploy
<a name="instances"></a>

CodeDeploy 支持部署到运行亚马逊 Linux、Ubuntu 服务器、红帽企业 Linux (RHEL) 和 Windows 服务器的实例。

您可以使用部署 CodeDeploy 到 Amazon EC2 实例和本地实例。本地实例是指任何不是 Amazon EC2 实例的物理设备，可以运行 CodeDeploy 代理并连接到公共 AWS 服务终端节点。您可以使用 CodeDeploy 将应用程序同时部署到云中的 Amazon EC2 实例和办公室的桌面 PCs 或您自己数据中心的服务器。

## 将 Amazon EC2 实例与本地实例进行比较
<a name="instances-comparison"></a>

下表将 Amazon EC2 实例和本地实例进行比较：


| **主题** | **Amazon EC2 实例** | **本地实例** | 
| --- | --- | --- | 
|  要求您安装和运行与实例上运行的操作系统兼容的 CodeDeploy 代理版本。  | 支持 |  是  | 
|  需要实例能够连接到 CodeDeploy 服务。  |  支持  |  是  | 
|  需要将 IAM 实例配置文件附加到实例。IAM 实例配置文件必须具有参与 CodeDeploy 部署的权限。有关信息，请参阅[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)。  |  是  |  否  | 
|  要对实例进行身份验证和注册，您需要执行以下操作之一： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/instances.html)  |  否  |  是  | 
|  需要您先注册每个实例， CodeDeploy 然后才能部署到该实例。  |  否  |  是  | 
|  要求您先标记每个实例，然后 CodeDeploy 才能部署到该实例。  |  支持  |  是  | 
|  可以在 CodeDeploy 部署过程中参与 Amazon EC2 Auto Scaling 和 Elastic Load Balancing 场景。  |  是  |  否  | 
|  可以从 Amazon S3 存储桶和存储 GitHub 库进行部署。  |  支持  |  是  | 
|  可支持在部署或实例中发生指定事件时提示发送 SMS 或电子邮件通知的触发器。  |  支持  |  是  | 
|  可能要收取相关部署费用。  |  否  |  是  | 

## 的实例任务 CodeDeploy
<a name="instances-task-list"></a>

要启动或配置在部署中使用的实例，请从以下说明中进行选择：


|  |  | 
| --- |--- |
|  我想启动一个新的 Amazon Linux 或 Windows Server Amazon EC2 实例。  |  要以最少的工作量启动 Amazon EC2 实例，请参阅[为 CodeDeploy （CloudFormation 模板）创建 Amazon EC2 实例](instances-ec2-create-cloudformation-template.md)。 要主要靠自己手动启动 Amazon EC2 实例，请参阅[为 CodeDeploy （AWS CLI 或亚马逊 EC2 控制台）创建 Amazon EC2 实例](instances-ec2-create.md)。  | 
|  我想启动一个新的 Ubuntu Server 或 RHEL Amazon EC2 实例。  |  请参阅[为 CodeDeploy （AWS CLI 或亚马逊 EC2 控制台）创建 Amazon EC2 实例](instances-ec2-create.md)。  | 
| 我想配置 Amazon Linux、Windows Server、Ubuntu Server 或 RHEL Amazon EC2 实例。 | 请参阅[配置要使用的 Amazon EC2 实例 CodeDeploy](instances-ec2-configure.md)。 | 
| 我要配置 Windows Server、Ubuntu Server 或 RHEL 本地实例（不是 Amazon EC2 实例的物理设备）。 | 请参阅[使用本地实例 CodeDeploy](instances-on-premises.md)。 | 
|  CodeDeploy 我想在 blue/green 部署期间配置一个替换的实例队列。 | 请参阅[在中处理部署 CodeDeploy](deployments.md)。 | 

要在 Amazon EC2 Auto Scaling 组中准备 Amazon EC2 实例，您必须执行一些额外步骤。有关更多信息，请参阅 [CodeDeploy 与亚马逊 EC2 Auto Scaling 集成](integrations-aws-auto-scaling.md)。

**主题**
+ [Tagging Instances for Deployments](instances-tagging.md)
+ [Working with Amazon EC2 Instances](instances-ec2.md)
+ [Working with On-Premises Instances](instances-on-premises.md)
+ [View Instance Details](instances-view-details.md)
+ [Instance Health](instances-health.md)

# 为部署组的实例添加标签 CodeDeploy
<a name="instances-tagging"></a>

可以使用标签为每个资源分配您自己的元数据，这有助于管理您的 Amazon EC2 实例和本地实例。您可使用标签按各种标准（例如用途、所有者或环境）对实例进行分类。如果您拥有许多实例，这种方法就很有用。您可以根据为实例分配的标签快速确定某个实例或一组实例。每个标签都包含定义的一个键和一个可选值。有关更多信息，请参阅[标记 Amazon EC2 资源](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html)。

要指定 CodeDeploy 部署组中包含哪些实例，可以在一个或多个标签*组中指定标签*。针对部署组创建部署时，将在满足标签条件的实例上安装最新的应用程序修订。

**注意**  
您还可以在部署组中包含 Amazon EC2 Auto Scaling 组，但这些组是根据其名称识别的，而不是根据应用于实例的标签识别。有关信息，请参阅[CodeDeploy 与亚马逊 EC2 Auto Scaling 集成](integrations-aws-auto-scaling.md)。

部署组中最简单的实例条件可以是唯一标签组中的唯一标签。复杂的条件可以在最多三个标签组中每组添加 10 个标签。

如果使用唯一标签组，该组中至少一个标签标记的实例即会包括在部署组中。如果使用多个标签组，只有由*每个* 标签组中至少一个标签标记的实例才会包括在内。

以下示例说明如何使用标签和标签组为部署组选择实例。

**Topics**
+ [示例 1：唯一标签组，唯一标签](#instances-tagging-example-1)
+ [示例 2：唯一标签组，多个标签](#instances-tagging-example-2)
+ [示例 3：多个标签组，单个标签](#instances-tagging-example-3)
+ [示例 4：多个标签组，多个标签](#instances-tagging-example-4)

## 示例 1：唯一标签组，唯一标签
<a name="instances-tagging-example-1"></a>

您可以在唯一标签组中指定唯一标签：


**标签组 1**  

| 键 | 值 | 
| --- | --- | 
| Name | AppVersion-美国广播公司 | 

具有 `Name=AppVersion-ABC` 标签的每个实例都是部署组中的一部分，即使它也应用了其他标签。

CodeDeploy 控制台设置视图：

![\[CodeDeploy 控制台显示一个带有一个标签的标签组。\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/images/TaggingExample1-polaris.png)


JSON 结构：

```
"ec2TagSet": { 
         "ec2TagSetList": [ 
            [ 
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Name",
                  "Value": "AppVersion-ABC"
               }
            ]
         ]
      },
```

## 示例 2：唯一标签组，多个标签
<a name="instances-tagging-example-2"></a>

您也可以在唯一标签组中指定多个标签：


**标签组 1**  

| 键 | 值 | 
| --- | --- | 
| Region | 北部 | 
| Region | 南部 | 
| Region | East | 

具有这三个标签之一的实例即属于部署组，即使它也应用了其他标签。例如，如果有其他实例具有 `Region=West` 标签，这些实例将不会包含在部署组中。

CodeDeploy 控制台设置视图：

![\[CodeDeploy 控制台显示一个带有三个标签的标签组。\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/images/TaggingExample2-polaris.png)


JSON 结构：

```
"ec2TagSet": { 
         "ec2TagSetList": [ 
            [ 
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Region",
                  "Value": "North"
               },
                              { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Region",
                  "Value": "South"
               },
                              { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Region",
                  "Value": "East"
               }
            ]
         ]
      },
```

## 示例 3：多个标签组，单个标签
<a name="instances-tagging-example-3"></a>

您还可以使用多组标签组，每个标签组中只有唯一的键值对，指定部署组中实例的条件。如果在部署组中使用多个标签组，只有所有标签组均标记出的实例才会包含在部署组中。


**标签组 1**  

| 键 | 值 | 
| --- | --- | 
| Name | AppVersion-美国广播公司 | 


**标签组 2**  

| 键 | 值 | 
| --- | --- | 
| Region | 北部 | 


**标签组 3**  

| 键 | 值 | 
| --- | --- | 
| Type | t2.medium | 

可能在许多区域中都有具有 `Name=AppVersion-ABC` 标签的各种实例类型的实例。在此示例中，部署组中只包含也具有 `Region=North` 和 `Type=t2.medium` 标签的实例。

CodeDeploy 控制台设置视图：

![\[CodeDeploy 控制台显示三个标签组，每个标签组中有一个标签。\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/images/TaggingExample3-polaris.png)


JSON 结构：

```
"ec2TagSet": { 
         "ec2TagSetList": [ 
            [ 
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Name",
                  "Value": "AppVersion-ABC"
               }
            ],
            [ 
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Region",
                  "Value": "North"
               }
            ],
            [ 
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Type",
                  "Value": "t2.medium"
               }
            ],
         ]
      },
```

## 示例 4：多个标签组，多个标签
<a name="instances-tagging-example-4"></a>

如果使用多个标签组，一个或多个组中具有多个标签，实例必须与每个组中的至少一个标签匹配。


**标签组 1**  

| 键 | 值 | 
| --- | --- | 
| 环境 | Beta | 
| 环境 | 生产前调试 | 


**标签组 2**  

| 键 | 值 | 
| --- | --- | 
| Region | 北部 | 
| Region | 南部 | 
| Region | East | 


**标签组 3**  

| 键 | 值 | 
| --- | --- | 
| Type | t2.medium | 
| Type | t2.large | 

在此示例中，实例要包含在部署组中，必须具有（1）`Environment=Beta` 或 `Environment=Staging` 标签；（2）`Region=North`、`Region=South` 或 `Region=East` 标签；以及（3）`Type=t2.medium` 或 `Type=t2.large` 标签。

例如，具有以下标签组的实例*将会* 包含在部署组中：
+ `Environment=Beta`, `Region=North`,`Type=t2.medium`
+ `Environment=Staging`,`Region=East`,`Type=t2.large`
+ `Environment=Staging`,`Region=South`,`Type=t2.large`

具有以下标签组的实例*不会* 包含在部署组中。**突出显示的**键值使这些实例被排除在外：
+ `Environment=Beta`，区域 =**西部**，`Type=t2.medium`
+ `Environment=Staging`，`Region=East`，类型 =**t2.micro**
+ 环境 =**生产**，`Region=South`，`Type=t2.large`

CodeDeploy 控制台设置视图：

![\[CodeDeploy 控制台显示三个标签组，每个标签组中有多个标签。\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/images/TaggingExample4-polaris.png)


JSON 结构：

```
"ec2TagSet": { 
         "ec2TagSetList": [ 
            [ 
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Environment",
                  "Value": "Beta"
               },
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Environment",
                  "Value": "Staging"
               }
            ],
            [ 
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Region",
                  "Value": "North"
               },
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Region",
                  "Value": "South"
               },
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Region",
                  "Value": "East"
               }
            ],
            [ 
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Type",
                  "Value": "t2.medium"
               },
               { 
                  "Type": "KEY_AND_VALUE",
                  "Key": "Type",
                  "Value": "t2.large"
               }
            ],
         ]
      },
```

# 使用 Amazon EC2 实例 CodeDeploy
<a name="instances-ec2"></a>

Amazon EC2 实例是您使用 Amazon Elastic Compute Cloud 创建和配置的虚拟计算环境。Amazon EC2 在 AWS 云中提供可扩展的计算容量。您可以根据 CodeDeploy 部署需要，使用 Amazon EC2 启动任意数量或数量的虚拟服务器。

有关 Amazon EC2 的更多信息，请参阅 [https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/)。

本节中的说明向您展示如何创建和配置用于 CodeDeploy 部署的 Amazon EC2 实例。

**Topics**
+ [为创建一个 Amazon EC2 实例 CodeDeploy](instances-ec2-create.md)
+ [创建 Amazon EC2 实例（CloudFormation 模板）](instances-ec2-create-cloudformation-template.md)
+ [配置一个 Amazon EC2 实例](instances-ec2-configure.md)

# 为 CodeDeploy （AWS CLI 或亚马逊 EC2 控制台）创建 Amazon EC2 实例
<a name="instances-ec2-create"></a>

这些说明向您展示了如何启动配置为用于 CodeDeploy 部署的新 Amazon EC2 实例。

您可以使用我们的 CloudFormation 模板启动运行亚马逊 Linux 或 Windows 服务器的 Amazon EC2 实例，该实例已配置为用于 CodeDeploy 部署。我们不为运行 Ubuntu 服务器或红帽企业 Linux (RHEL) 的 Amazon EC2 实例提供 CloudFormation 模板。有关模板使用的替代方法，请参阅[使用以下实例 CodeDeploy](instances.md)。

您可以使用亚马逊 EC2 控制台或亚马逊 EC2 API 启动亚马逊 EC2 实例。 AWS CLI

## 启动 Amazon EC2 实例（控制台）
<a name="instances-ec2-create-console"></a>

### 先决条件
<a name="instances-ec2-create-console-prerequisites"></a>

如果您尚未执行此操作，请按照中的[入门 CodeDeploy](getting-started-codedeploy.md)说明设置和配置 AWS CLI 并创建 IAM 实例配置文件。

### 启动 Amazon EC2 实例
<a name="instances-ec2-create-console-steps"></a>

1. 登录 AWS 管理控制台 并打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances（实例）**，然后选择 **Launch Instance（启动实例）**。

1. 在 **Step 1: Choose an Amazon Machine Image（AMI）（步骤 1: 选择 Amazon 系统映像（AMI））**页上，从 **Quick Start（快速启动）**选项卡中，找到要使用的操作系统和版本，然后选择 **Select（选择）**。您必须选择支持的 Amazon EC2 AMI 操作系统 CodeDeploy。有关更多信息，请参阅 [CodeDeploy 代理支持的操作系统](codedeploy-agent.md#codedeploy-agent-supported-operating-systems)。

1. 在**步骤 2: 选择一个实例类型**页上，选择任何可用的 Amazon EC2 实例类型，然后选择**下一步: 配置实例详细信息**。

1. 在**步骤 3：配置实例详细信息**页上的 **IAM 角色**列表中，选择您在[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)中创建的 IAM 实例角色。如果您使用建议的角色名称，则选择 **CodeDeployDemo-EC2-Instance-Profile**。如果您创建了自己的角色名称，请选择该名称。
**注意**  
如果**网络**列表中未显示默认虚拟私有云（VPC），则必须选择或创建 Amazon VPC 和子网。选择**新建 VPC** 和/或**新建子网**。有关更多信息，请参阅[您的 VPC 和子网](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Subnets.html)。

1. 选择**下一步：添加存储**。

1. 将 **Step 4: Add Storage（步骤 4: 添加存储）**页保持不变，然后选择 **Next: Add Tags（下一步: 添加标签）**。

1. 在 **Step 5: Add Tags（步骤 5: 添加标记）**页面上，选择 **Add Tag（添加标记）**。

1.  在 **Key（键）**框中，键入 **Name**。在 **Value（值）**框中，键入 **CodeDeployDemo**。
**重要**  
**Key（键）**和 **Value（值）**框的内容是区分大小写的。

1. 选择 **Next: Configure Security Group**。

1. 在 **Step 6: Configure Security Group（步骤 6: 配置安全组）**页上，将 **Create a new security group（创建新安全组）**选项保持选中状态。

   将为运行 Amazon Linux、Ubuntu Server 或 RHEL 的 Amazon EC2 实例配置默认 SSH 角色。将为运行 Windows Server 的 Amazon EC2 实例配置默认 RDP 角色。

1. 如果您要打开 HTTP 端口，请选择 **Add Rule（添加规则）**按钮，然后从 **Type（类型）**下拉列表中，选择 **HTTP**。接受 **Source（源）**默认值 **Custom 0.0.0.0/0（自定义 0.0.0.0/0）**，然后选择 **Review and Launch（审核和启动）**。
**注意**  
在生产环境中，我们建议限制对 SSH、RDP 和 HTTP 端口的访问，而不是指定 **Anywhere 0.0.0.0/0**。 CodeDeploy 不需要不受限制的端口访问，也不需要 HTTP 访问。有关更多信息，请参阅[有关保护您的 Amazon EC2 实例的提示](https://aws.amazon.com/articles/1233)。

   如果 **Boot from General Purpose（SSD）（由通用（SSD）启动）**对话框出现，请遵循说明，然后选择 **Next（下一步）**。

1. 将 **Step 7: Review Instance Launch（步骤 7: 查看实例启动）**页保持不变，然后选择 **Launch（启动）**。

1. 在 **Select an existing key pair or create a new key pair（选择现有密钥对或创建新密钥对）**对话框中，选择 **Choose an existing key pair（选择现有密钥对）**或 **Create a new key pair（创建新密钥对）**。如果您已配置 Amazon EC2 实例密钥对，则可在此处选择它。

   如果您尚未拥有 Amazon EC2 实例密钥对，请选择**创建新密钥对**并为密钥对指定一个可识别的名称。选择**下载密钥对**以将 Amazon EC2 实例密钥对下载到您的计算机。
**重要**  
如果您需要使用 SSH 或 RDP 访问您的 Amazon EC2 实例，则必须具有密钥对。

1. 选择**启动新实例**。

1. 选择 Amazon EC2 实例的 ID。在实例启动并通过所有检查之前，请不要继续。

### 安装代 CodeDeploy 理
<a name="instances-ec2-create-console-agent"></a>

在 CodeDeploy部署中使用 CodeDeploy 代理之前，必须先将其安装在您的 Amazon EC2 实例上。有关更多信息，请参阅 [安装代 CodeDeploy 理](codedeploy-agent-operations-install.md)。

**注意**  
在控制台中创建部署组时，可以配置 CodeDeploy 代理的自动安装和更新。

## 启动 Amazon EC2 实例（CLI）
<a name="instances-ec2-create-cli"></a>

### 先决条件
<a name="instances-ec2-create-cli-prerequisites"></a>

如果您尚未执行此操作，请按照中的[入门 CodeDeploy](getting-started-codedeploy.md)说明设置和配置 AWS CLI 并创建 IAM 实例配置文件。

### 启动 Amazon EC2 实例
<a name="instances-ec2-create-cli-steps"></a>

1. **仅针对 Windows Server** 如果您要创建运行 Windows Server 的 Amazon EC2 实例，请调用 **create-security-group** 和 **authorize-security-group-ingress** 命令来创建允许 RDP 访问（默认情况下不允许）或者 HTTP 访问的安全组。例如，要创建名为 *CodeDeployDemo-Windows-Security-Group 的安全组*，请逐一运行以下命令：

   ```
   aws ec2 create-security-group --group-name CodeDeployDemo-Windows-Security-Group --description "For launching Windows Server images for use with CodeDeploy"
   ```

   ```
   aws ec2 authorize-security-group-ingress --group-name CodeDeployDemo-Windows-Security-Group --to-port 3389 --ip-protocol tcp --cidr-ip 0.0.0.0/0 --from-port 3389
   ```

   ```
   aws ec2 authorize-security-group-ingress --group-name CodeDeployDemo-Windows-Security-Group --to-port 80 --ip-protocol tcp --cidr-ip 0.0.0.0/0 --from-port 80
   ```
**注意**  
在演示中，这些命令将创建一个安全组来允许通过端口 3389 的 RDP 无限制访问或通过端口 80 的 HTTP 无限制访问。作为最佳实践，建议您将访问限制到 RDP 和 HTTP 端口。 CodeDeploy 不需要无限制的端口访问，也不需要 HTTP 访问。有关更多信息，请参阅[有关保护您的 Amazon EC2 实例的提示](https://aws.amazon.com/articles/1233)。

1. 调用 **run-instances** 命令以创建并启动 Amazon EC2 实例。

   在您调用此命令之前，您需要收集以下内容：
   + 您用于实例的亚马逊系统映像 (AMI*ami-id*) () 的 ID。要获取此 ID，请参阅[查找合适的 AMI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/finding-an-ami.html)。
   + 您创建的 Amazon EC2 实例类型的名称 (*instance-type*)，例如`t1.micro`。有关列表，请参阅 [Amazon EC2 实例类型](https://aws.amazon.com/ec2/instance-types/)。
   + 有权访问存储您所在地区的 CodeDeploy 代理安装文件的 Amazon S3 存储桶的 IAM 实例配置文件的名称。

     有关创建 IAM 实例配置文件的信息，请参阅[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)。
   + 亚马逊 EC2 实例密钥对 (*key-name*) 的名称，用于允许通过SSH访问运行亚马逊 Linux、Ubuntu Server 的亚马逊 EC2 实例，或者对运行 Windows 服务器的亚马逊 EC2 实例进行 RHEL 或 RDP 访问。
**重要**  
仅键入密钥对名称而不是密钥对文件扩展名。例如，*my-keypair*，而不是 *my-keypair.pem*。

     要查找密钥对名称，请打开 Amazon EC2 控制台，网址为 [https://console.aws.amazon.com/ec2](https://console.aws.amazon.com/ec2)。在导航窗格中，在 **Network & Security（网络和安全）**下，选择 **Key Pairs（密钥对）**，然后记下列表中的密钥对名称。

     要生成密钥对，请参阅[使用 Amazon EC2 创建您的密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair)。请务必在《AWS 一般参考》**的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中列出的其中一个区域中创建密钥对。否则，您将无法将 Amazon EC2 实例密钥对与一起使用 CodeDeploy。

   **对于 Amazon Linux、RHEL 和 Ubuntu Server**

   旨在调用 **run-instances** 命令以启动运行 Amazon Linux、Ubuntu Server 或 RHEL 的 Amazon EC2 实例并附加您在[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)中创建的 IAM 实例配置文件。例如：

   ```
   aws ec2 run-instances \
     --image-id ami-id \
     --key-name key-name \
     --count 1 \
     --instance-type instance-type \
     --iam-instance-profile Name=iam-instance-profile
   ```
**注意**  
此命令将为 Amazon EC2 实例创建一个允许访问多个端口的默认安全组，包括通过端口 22 的 SSH 无限制访问或通过端口 80 的 HTTP 无限制访问。作为最佳实践，我们建议仅限制对 SSH 和 HTTP 端口的访问。 CodeDeploy 不需要不受限制的端口访问，也不需要 HTTP 端口访问权限。有关更多信息，请参阅[有关保护您的 Amazon EC2 实例的提示](https://aws.amazon.com/articles/1233)。

   **对于 Windows Server**

   旨在调用 **run-instances** 命令以启动运行 Windows Server 的 Amazon EC2 实例、附加您在[步骤 4：为 Amazon EC2 实例创建 IAM 实例配置文件](getting-started-create-iam-instance-profile.md)中创建的 IAM 实例配置文件，并指定您在步骤 1 中创建的安全组的名称。例如：

   ```
   aws ec2 run-instances --image-id ami-id --key-name key-name --count 1 --instance-type instance-type --iam-instance-profile Name=iam-instance-profile --security-groups CodeDeploy-Windows-Security-Group
   ```

   这些命令将使用指定的 AMI 实例配置文件启动一个具有指定的 AMI、密钥对和实例类型的 Amazon EC2 实例，并在启动过程中运行指定脚本。

1. 记下输出中的 `InstanceID` 的值。如果您忘记此值，可稍后通过对 Amazon EC2 实例密钥对调用 **describe-instances** 命令来获取它。

   ```
   aws ec2 describe-instances --filters "Name=key-name,Values=keyName" --query "Reservations[*].Instances[*].[InstanceId]" --output text
   ```

   使用实例 ID 调用**create-tags**命令，该命令会标记 Amazon EC2 实例，以便以后在部署期间 CodeDeploy 可以找到该实例。在以下示例中，标签名为 **CodeDeployDemo**，但您可指定所需的任何 Amazon EC2 实例标签。

   ```
   aws ec2 create-tags --resources instance-id --tags Key=Name,Value=CodeDeployDemo
   ```

   您可以为一个实例同时应用多个标签。例如：

   ```
   aws ec2 create-tags --resources instance-id --tags Key=Name,Value=testInstance Key=Region,Value=West Key=Environment,Value=Beta
   ```

   要验证 Amazon EC2 实例是否已启动并通过所有检查，请使用实例 ID 调用 **describe-instance-status** 命令。

   ```
   aws ec2 describe-instance-status --instance-ids instance-id --query "InstanceStatuses[*].InstanceStatus.[Status]" --output text 
   ```

如果实例已启动并通过所有检查，输出中将显示 `ok`。

### 安装代 CodeDeploy 理
<a name="instances-ec2-create-console-agent"></a>

在 CodeDeploy部署中使用 CodeDeploy 代理之前，必须先将其安装在您的 Amazon EC2 实例上。有关更多信息，请参阅 [安装代 CodeDeploy 理](codedeploy-agent-operations-install.md)。

**注意**  
在控制台中创建部署组时，可以配置 CodeDeploy 代理的自动安装和更新。

# 为 CodeDeploy （CloudFormation 模板）创建 Amazon EC2 实例
<a name="instances-ec2-create-cloudformation-template"></a>

您可以使用我们的 CloudFormation 模板快速启动运行亚马逊 Linux 或 Windows 服务器的 Amazon EC2 实例。您可以使用 AWS CLI、 CodeDeploy 控制台或 AWS APIs 使用模板启动实例。除了启动实例之外，模板还可用于：
+ 指示 CloudFormation 向实例授予参与 CodeDeploy部署的权限。
+ 为实例添加标签，以便在部署期间 CodeDeploy 可以找到它。
+ 在实例上安装并运行 CodeDeploy 代理。

您不必使用我们的 CloudFormation 来设置 Amazon EC2 实例。有关替代方法，请参阅[使用以下实例 CodeDeploy](instances.md)。

我们不为运行 Ubuntu 服务器或红帽企业 Linux (RHEL) 的 Amazon EC2 实例提供 CloudFormation 模板。

**Topics**
+ [开始前的准备工作](#instances-ec2-create-cloudformation-template-before)
+ [使用 CloudFormation 模板启动 Amazon EC2 实例（控制台）](#instances-ec2-create-cloudformation-template-console)
+ [使用 CloudFormation 模板启动 Amazon EC2 实例 (AWS CLI)](#instances-ec2-create-cloudformation-template-cli)

## 开始前的准备工作
<a name="instances-ec2-create-cloudformation-template-before"></a>

在使用 CloudFormation 模板启动 Amazon EC2 实例之前，请务必完成以下步骤。

1. 请确保您已创建管理员用户，如[步骤 1：设置](getting-started-setting-up.md)中所述。仔细检查用户是否具有以下最低权限，然后添加任何不存在的最低权限：
   + cloudformation:\$1
   + codedeploy:\$1
   + ec2:\$1
   + 我是：AddRoleToInstanceProfile
   + 我是：CreateInstanceProfile
   + 我是：CreateRole
   + 我是：DeleteInstanceProfile
   + 我是：DeleteRole
   + 我是：DeleteRolePolicy
   + 我是：GetRole
   + 我是：DeleteRolePolicy
   + 我是：PutRolePolicy
   + 我是：RemoveRoleFromInstanceProfile

1. 确保您有实例密钥对，以允许通过 SSH 访问运行 Amazon Linux 的 Amazon EC2 实例，或者允许通过 RDP 访问运行 Windows Server 的实例。

   要查找密钥对名称，请打开 Amazon EC2 控制台，网址为 [https://console.aws.amazon.com/ec2](https://console.aws.amazon.com/ec2)。在导航窗格中，在 **Network & Security（网络和安全）**下，选择 **Key Pairs（密钥对）**，然后记下列表中的密钥对名称。

   要生成新的密钥对，请参阅[使用 Amazon EC2 创建密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#having-ec2-create-your-key-pair)。请确保密钥对是《AWS 一般参考》**的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中列出的其中一个区域中创建的。否则，您无法将实例密钥对与 CodeDeploy 结合使用。

## 使用 CloudFormation 模板启动 Amazon EC2 实例（控制台）
<a name="instances-ec2-create-cloudformation-template-console"></a>

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/cloudformat](https://console.aws.amazon.com/cloudformation/) ion 上打开 CloudFormation 控制台。
**重要**  
使用您使用的相同帐户登录[入门 CodeDeploy](getting-started-codedeploy.md)。 AWS 管理控制台 在导航栏的区域选择器中，选择区域和[终端节点中列出的其中一个区域*AWS 一般参考*](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)。 CodeDeploy 仅支持这些区域。

1. 选择**创建堆栈**。

1. 在**选择模板**中，选择**指定 Amazon S3 模板 URL**。在框中，键入您所在地区的 CloudFormation 模板位置，然后选择 “**下一步**”。  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/instances-ec2-create-cloudformation-template.html)

1. 在 **Stack name（堆栈名称）**框中，键入堆栈的名称（例如，**CodeDeployDemoStack**）。

1. 在 **Parameters** 中，键入以下内容，然后选择 **Next**。
   + 对于 **InstanceCount**，键入要启动的实例数量。（建议您保留默认值 **1**。）
   + 对于 **InstanceType**，键入要启动的实例类型（或保留默认值 **t1.micro**）。
   + 对于 **KeyPairName**，键入实例 key pair 名称。仅键入密钥对名称而不是密钥对文件扩展名。
   + **OperatingSystem**在 box 中，键**Windows**入启动运行 Windows 服务器的实例（或保留默认值 **Linux**）。
   + 对于 **SSHLocation**，键入用于通过 SSH 或 RDP 连接到实例的 IP 地址范围（或保留默认值 **0.0.0.0** /0）。
**重要**  
提供的默认值**0.0.0.0/0**仅用于演示目的。 CodeDeploy 不要求 Amazon EC2 实例可以不受限制地访问端口。作为最佳实践，建议您限制对 SSH（和 HTTP）端口的访问。有关更多信息，请参阅[有关保护您的 Amazon EC2 实例的提示](https://aws.amazon.com/articles/1233)。
   + 对于 **TagKey**，键入部署期间用于识别实例的实例标签密钥 CodeDeploy （或保留默认**名称**）。
   + 对于 **TagValue**，键入部署期间用于识别实例的实例标签值 CodeDeploy （或保留默认值 **CodeDeployDemo**）。

1. 在 **Options** 页上，将选项框留空，然后选择 **Next**。
**重要**  
CloudFormation 标签与 CodeDeploy 标签不同。 CloudFormation 使用标签来简化基础架构的管理。 CodeDeploy 使用标签来识别 Amazon EC2 实例。您在 “指定**参数” 页面上指定**了 CodeDeploy标签。

1. 在 “**查看**” 页面的 “**能力**” 中，选中 “**我确认 CloudFormation 可能会创建 IAM 资源**” 复选框，然后选择 “**创建**”。

   创建堆栈并启动 Amazon EC2 实例后 CloudFormation ，在 CloudFormation 控制台中，**CREATE\$1COMPL** ETE 将显示在**状态**列中。此过程可能耗时数分钟。

要验证 CodeDeploy 代理是否在 Amazon EC2 实例上运行[管理 CodeDeploy 代理操作](codedeploy-agent-operations.md)，请参阅，然后继续[使用创建应用程序 CodeDeploy](applications-create.md)。

## 使用 CloudFormation 模板启动 Amazon EC2 实例 (AWS CLI)
<a name="instances-ec2-create-cloudformation-template-cli"></a>

1. 在调用**create-stack**命令时使用我们的 CloudFormation 模板。该堆栈将启动一个安装了 CodeDeploy 代理的新 Amazon EC2 实例。

   要启动运行 Amazon Linux 的 Amazon EC2 实例，请执行以下操作：

   ```
   aws cloudformation create-stack \
     --stack-name CodeDeployDemoStack \
     --template-url templateURL \
     --parameters ParameterKey=InstanceCount,ParameterValue=1 ParameterKey=InstanceType,ParameterValue=t1.micro \
       ParameterKey=KeyPairName,ParameterValue=keyName ParameterKey=OperatingSystem,ParameterValue=Linux \
       ParameterKey=SSHLocation,ParameterValue=0.0.0.0/0 ParameterKey=TagKey,ParameterValue=Name \
       ParameterKey=TagValue,ParameterValue=CodeDeployDemo \
     --capabilities CAPABILITY_IAM
   ```

   要启动运行 Windows Server 的 Amazon EC2 实例，请执行以下操作：

   ```
   aws cloudformation create-stack --stack-name CodeDeployDemoStack --template-url template-url --parameters ParameterKey=InstanceCount,ParameterValue=1 ParameterKey=InstanceType,ParameterValue=t1.micro ParameterKey=KeyPairName,ParameterValue=keyName ParameterKey=OperatingSystem,ParameterValue=Windows ParameterKey=SSHLocation,ParameterValue=0.0.0.0/0 ParameterKey=TagKey,ParameterValue=Name ParameterKey=TagValue,ParameterValue=CodeDeployDemo --capabilities CAPABILITY_IAM
   ```

   *keyName*是实例 key pair 的名称。仅键入密钥对名称而不是密钥对文件扩展名。

   *template-url*是您所在地区的 CloudFormation 模板所在位置：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/instances-ec2-create-cloudformation-template.html)

   此命令使用指定 Amazon S3 存储桶中的 CloudFormation 模板创建一个名**CodeDeployDemoStack**为的 CloudFormation 堆栈。虽然 Amazon EC2 实例基于 t1.micro 实例类型，但您可使用任何类型。虽然它是使用值 **CodeDeployDemo** 标记的，但您可使用任何值标记它。它已应用指定的实例密钥对。

1. 调用**describe-stacks**命令验证名为的 CloudFormation 堆栈**CodeDeployDemoStack**已成功创建：

   ```
   aws cloudformation describe-stacks --stack-name CodeDeployDemoStack --query "Stacks[0].StackStatus" --output text
   ```

   在返回 `CREATE_COMPLETE` 值之前，不要继续。

要验证 CodeDeploy 代理是否在 Amazon EC2 实例上运行[管理 CodeDeploy 代理操作](codedeploy-agent-operations.md)，请参阅，然后继续[使用创建应用程序 CodeDeploy](applications-create.md)。

# 配置要使用的 Amazon EC2 实例 CodeDeploy
<a name="instances-ec2-configure"></a>

这些说明向您展示了如何配置运行亚马逊 Linux、Ubuntu 服务器、红帽企业 Linux (RHEL) 或 Windows 服务器的 Amazon EC2 实例以用于部署。 CodeDeploy 

**注意**  
如果您没有亚马逊 EC2 实例，则可以使用该 CloudFormation 模板启动一个运行亚马逊 Linux 或 Windows Server 的实例。我们不提供适用于 Ubuntu Server 或 RHEL 的模板。

## 步骤 1：验证 IAM 实例配置文件是否已附加到 Amazon EC2 实例
<a name="instances-ec2-configure-1-verify-instance-profile-attached"></a>

1. 登录 AWS 管理控制台 并打开 Amazon EC2 控制台，网址为[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中的 **Instances** 下，选择 **Instances**。

1. 浏览并在列表中选择您的 Amazon EC2 实例。

1. 在详细信息窗格中的**描述**选项卡上，记下 **IAM 角色**字段中的值，然后继续下一部分。

   如果该字段为空，您可以向实例附加 IAM 实例配置文件。有关信息，请参阅[将 IAM 角色附加到实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html#attach-iam-role)。

## 步骤 2：验证附加的 IAM 实例配置文件是否具有正确的访问权限
<a name="instances-ec2-configure-2-verify-instance-profile-permissions"></a>

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中，选择**角色**。

1. 浏览并选择您在前一部分的步骤 4 中记下的 IAM 角色名称。
**注意**  
如果要使用 CloudFormation 模板生成的服务角色，而不是按照中的说明创建的服务角色[步骤 2：为创建服务角色 CodeDeploy](getting-started-create-service-role.md)，请注意以下几点：  
在我们 CloudFormation 模板的某些版本中，生成并附加到 Amazon EC2 实例的 IAM 实例配置文件的显示名称与 IAM 控制台中的显示名称不同。例如，IAM 实例配置文件的显示名称可能为 `CodeDeploySampleStack-expnyi6-InstanceRoleInstanceProfile-IK8J8A9123EX`，而 IAM 控制台中的 IAM 实例配置文件的显示名称可能为 `CodeDeploySampleStack-expnyi6-InstanceRole-C5P33V1L64EX`。  
为帮助您标识 IAM 控制台中的实例配置文件，您会看到二者的前缀 `CodeDeploySampleStack-expnyi6-InstanceRole` 是相同的。有关这些显示名称可能不同的原因的信息，请参阅[实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/instance-profiles.html)。

1. 选择 **Trust Relationships** 选项卡。如果**可信实体**中没有显示**身份提供商 ec2.amazonaws.com** 的条目，则您无法使用此 Amazon EC2 实例。使用[使用以下实例 CodeDeploy](instances.md)中的信息停止并创建 Amazon EC2 实例。

   如果有一个显示**身份提供商 ec2.amazonaws.com** 的条目，并且您仅将应用程序存储在存储 GitHub库中，请直接跳至。[步骤 3：为 Amazon EC2 实例添加标签](#instances-ec2-configure-3-tag-instance)

   如果有显示**身份提供商 ec2.amazonaws.com** 的条目，并且您将应用程序存储在 Amazon S3 存储桶中，则选择**权限**选项卡。

1. 如果**权限策略**区域中有一个策略，则展开该策略，然后选择**编辑策略**。

1. 选择 **JSON** 选项卡。如果您将应用程序存储在 Amazon S3 存储桶中，请确保 `"s3:Get*"` 和 `"s3:List*"` 位于指定操作列表中。

   它可能如下所示：

   ```
   {"Statement":[{"Resource":"*","Action":[
     ... Some actions may already be listed here ...
     "s3:Get*","s3:List*"
     ... Some more actions may already be listed here ...
     ],"Effect":"Allow"}]}
   ```

   也可能如下所示：

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:Get*",
           "s3:List*"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------

   如果 `"s3:Get*"` 和 `"s3:List*"` 不在指定操作列表中，请选择 **Edit** 添加它们，然后选择 **Save**。（如果 `"s3:Get*"` 和 `"s3:List*"` 都不是列表中的最后一个操作，请确保在操作后添加逗号，以便策略文档进行验证。）
**注意**  
我们建议您将此策略仅限定用于您的 Amazon EC2 实例必须访问的 Amazon S3 存储桶。确保允许访问包含 CodeDeploy 代理的 Amazon S3 存储桶。否则，在实例上安装或更新 CodeDeploy 代理时可能会出现错误。要仅向 IAM 实例配置文件授予对 Amazon S3 中某些 CodeDeploy 资源套件存储桶的访问权限，请使用以下策略，但要删除要阻止访问的存储桶的行：  

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:Get*",
           "s3:List*"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:s3:::aws-codedeploy-us-east-2/*",
           "arn:aws:s3:::aws-codedeploy-us-east-1/*",
           "arn:aws:s3:::aws-codedeploy-us-west-1/*",
           "arn:aws:s3:::aws-codedeploy-us-west-2/*",
           "arn:aws:s3:::aws-codedeploy-ca-central-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-west-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-west-2/*",
           "arn:aws:s3:::aws-codedeploy-eu-west-3/*",
           "arn:aws:s3:::aws-codedeploy-eu-central-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-central-2/*",
           "arn:aws:s3:::aws-codedeploy-eu-north-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-south-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-south-2/*",
           "arn:aws:s3:::aws-codedeploy-il-central-1/*",
           "arn:aws:s3:::aws-codedeploy-ap-east-1/*",
           "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*",
           "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*",
           "arn:aws:s3:::aws-codedeploy-ap-northeast-3/*",
           "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*",        
           "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*",
           "arn:aws:s3:::aws-codedeploy-ap-southeast-3/*",
           "arn:aws:s3:::aws-codedeploy-ap-southeast-4/*",
           "arn:aws:s3:::aws-codedeploy-ap-south-1/*",
           "arn:aws:s3:::aws-codedeploy-ap-south-2/*",
           "arn:aws:s3:::aws-codedeploy-me-central-1/*",
           "arn:aws:s3:::aws-codedeploy-me-south-1/*",
           "arn:aws:s3:::aws-codedeploy-sa-east-1/*"
         ]
       }
     ]
   }
   ```

## 步骤 3：为 Amazon EC2 实例添加标签
<a name="instances-ec2-configure-3-tag-instance"></a>

有关如何为 Amazon EC2 实例添加标签 CodeDeploy 以便在部署期间找到它的说明，请参阅[在控制台中使用标签](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html#Using_Tags_Console)，然后返回此页面。

**注意**  
您可以使用任何所需的键和值标记 Amazon EC2 实例。只需确保在部署到此实例时指定此密钥和值即可。

## 步骤 4：在 Amazon EC2 实例上安装 AWS CodeDeploy 代理
<a name="instances-ec2-configure-4-install-agent"></a>

有关如何在 Amazon EC2 实例上安装 CodeDeploy 代理并验证其是否正在运行的说明[管理 CodeDeploy 代理操作](codedeploy-agent-operations.md)，请参阅，然后继续[使用创建应用程序 CodeDeploy](applications-create.md)。

# 使用本地实例 CodeDeploy
<a name="instances-on-premises"></a>

本地实例是指任何不是 Amazon EC2 实例的物理设备，可以运行 CodeDeploy 代理并连接到公共 AWS 服务终端节点。

将 CodeDeploy 应用程序修订部署到本地实例涉及两个主要步骤：
+ **步骤 1**-配置每个本地实例，向其注册 CodeDeploy，然后对其进行标记。
+ **步骤 2** - 将应用程序修订部署到本地实例。
**注意**  
要尝试创建示例应用程序修订并将它部署到已正确配置并注册的本地实例，请参阅[教程：使用 CodeDeploy （Windows 服务器、Ubuntu 服务器或红帽企业 Linux）将应用程序部署到本地实例](tutorials-on-premises-instance.md)。有关本地实例及其使用方式的信息 CodeDeploy，请参阅[使用本地实例 CodeDeploy](#instances-on-premises)。

如果您不想再在部署中使用本地实例，可以从部署组中删除本地实例的标签。更可靠的方式是从实例中删除本地实例标签。您也可以显式取消注册本地实例，使其无法再在任何部署中使用。有关更多信息，请参阅 [在中管理本地实例的操作 CodeDeploy](on-premises-instances-operations.md)。

本节中的说明向您展示如何配置本地实例，然后对其进行注册和标记， CodeDeploy 以便在部署中使用该实例。本节还介绍 CodeDeploy 如何使用获取本地实例的相关信息，并在您不再计划部署本地实例后取消注册该实例。

**Topics**
+ [配置本地实例的先决条件](instances-on-premises-prerequisites.md)
+ [注册本地实例](on-premises-instances-register.md)
+ [管理本地实例操作](on-premises-instances-operations.md)

# 配置本地实例的先决条件
<a name="instances-on-premises-prerequisites"></a>

必须满足以下条件才能注册本地实例。

**重要**  
如果您使用[register-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/register-on-premises-instance.html)命令并定期刷新通过 AWS Security Token Service (AWS STS) 生成的临时证书，则还有其他先决条件。有关信息，请参阅[IAM 会话 ARN 注册前提条件](register-on-premises-instance-iam-session-arn.md#register-on-premises-instance-iam-session-arn-prerequisites)。

**设备要求**

您要准备、注册和标记为本地实例的设备 CodeDeploy 必须运行支持的操作系统。有关列表，请参阅[CodeDeploy 代理支持的操作系统](codedeploy-agent.md#codedeploy-agent-supported-operating-systems)。

如果您的操作系统不受支持，则该 CodeDeploy 代理可以作为开源版本供您使用，以适应您的需求。有关更多信息，请参阅中的[CodeDeploy 代理](https://github.com/aws/aws-codedeploy-agent)存储库 GitHub。

**出站通信**

本地实例必须能够连接到公共 AWS 服务终端节点才能与之通信 CodeDeploy。

 CodeDeploy 代理使用 HTTPS 通过端口 443 进行出站通信。

**管理控制**

在本地实例上用于配置本地实例的本地账户或网络账户必须能够以 `sudo` 或 `root` 身份（对于 Ubuntu Server）或者以管理员身份（对于 Windows Server）运行。

**IAM 权限**

您在注册本地实例时使用的 IAM 身份必须具有完成注册的权限（以及在需要时取消注册本地实例的权限）。

请确保发出调用的 IAM 身份除了拥有[第 3 步：限制 CodeDeploy 用户的权限](getting-started-policy.md)中所述的策略之外，还另外附加了以下策略：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow", 
      "Action": [
        "iam:CreateAccessKey",
        "iam:CreateUser",
        "iam:DeleteAccessKey",
        "iam:DeleteUser",
        "iam:DeleteUserPolicy",
        "iam:ListAccessKeys",
        "iam:ListUserPolicies",
        "iam:PutUserPolicy",
        "iam:GetUser"
      ],
      "Resource": "*"
    }
  ]
}
```

------

有关如何附加 IAM policy 的信息，请参阅[管理 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)。

# 向注册本地实例 CodeDeploy
<a name="on-premises-instances-register"></a>

要注册本地实例，必须使用 IAM 身份来对您的请求进行身份验证。您可以针对您使用的 IAM 身份和注册方法从以下选项中进行选择：
+ 使用 IAM 角色 ARN 对请求进行身份验证。
  + 使用[register-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/register-on-premises-instance.html)命令并定期刷新通过 AWS Security Token Service (AWS STS) 生成的临时凭证来手动配置大多数注册选项。此选项提供了最高级别的安全性，因为身份验证是使用临时令牌进行的，该令牌会超时，必须定期刷新。建议将此选项用于任何规模的生产部署。有关信息，请参阅[使用 register-on-premises-instance命令（IAM 会话 ARN）注册本地实例](register-on-premises-instance-iam-session-arn.md)。
+ （不推荐）使用 IAM 用户 ARN 对请求进行身份验证。
  + 使用 [register](https://docs.aws.amazon.com/cli/latest/reference/deploy/register.html) 命令执行高度自动化的注册过程。此选项仅适用于安全性要求较低的非生产部署。此选项不太安全，因为它使用静态（永久）凭证进行身份验证。此选项适用于注册单个本地实例。有关信息，请参阅[使用 register 命令（IAM 用户 ARN）注册本地实例](instances-on-premises-register-instance.md)。
  + 使用 [register-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/register-on-premises-instance.html) 命令手动设置大多数注册选项。适合注册少量内部实例的情况。有关信息，请参阅[使用 register-on-premises-instance命令（IAM 用户 ARN）注册本地实例](register-on-premises-instance-iam-user-arn.md)。

**Topics**
+ [使用 register-on-premises-instance命令（IAM 会话 ARN）注册本地实例](register-on-premises-instance-iam-session-arn.md)
+ [使用 register 命令（IAM 用户 ARN）注册本地实例](instances-on-premises-register-instance.md)
+ [使用 register-on-premises-instance命令（IAM 用户 ARN）注册本地实例](register-on-premises-instance-iam-user-arn.md)

# 使用 register-on-premises-instance命令（IAM 会话 ARN）注册本地实例
<a name="register-on-premises-instance-iam-session-arn"></a>

为了最大限度地控制本地实例的身份验证和注册，您可以使用[register-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/register-on-premises-instance.html)命令并定期刷新通过 AWS Security Token Service (AWS STS) 生成的临时证书。实例的静态 IAM 角色扮演这些刷新的 AWS STS 证书的角色来执行 CodeDeploy 部署操作。

当您需要注册大量实例时，此方法非常有用。它允许您使用自动完成注册过程 CodeDeploy。您可以使用自己的身份和身份验证系统对本地实例进行身份验证，并将服务中的 IAM 会话证书分发给实例以供使用 CodeDeploy。

**注意**  
或者，您可以使用分布到所有本地实例的共享 IAM 用户调用 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)API 来检索本地实例的会话证书。此方法安全性较低，建议不要用于生产或关键任务型环境。

使用以下主题中的信息，使用生成的临时安全证书配置本地实例 AWS STS。

**Topics**
+ [IAM 会话 ARN 注册前提条件](#register-on-premises-instance-iam-session-arn-prerequisites)
+ [步骤 1：创建本地实例将担任的 IAM 角色](#register-on-premises-instance-iam-session-arn-1)
+ [步骤 2：使用为单个实例生成临时证书 AWS STS](#register-on-premises-instance-iam-session-arn-2)
+ [步骤 3：将配置文件添加到本地实例](#register-on-premises-instance-iam-session-arn-3)
+ [步骤 4：为部署准备本地实例 CodeDeploy](#register-on-premises-instance-iam-session-arn-4)
+ [步骤 5：向注册本地实例 CodeDeploy](#register-on-premises-instance-iam-session-arn-5)
+ [步骤 6：标记本地实例](#register-on-premises-instance-iam-session-arn-6)
+ [步骤 7：将应用程序修订部署到本地实例](#register-on-premises-instance-iam-session-arn-7)
+ [步骤 8：跟踪对本地实例的部署](#register-on-premises-instance-iam-session-arn-8)

## IAM 会话 ARN 注册前提条件
<a name="register-on-premises-instance-iam-session-arn-prerequisites"></a>

除了在 [配置本地实例的先决条件](instances-on-premises-prerequisites.md) 中列出的前提条件之外，还必须满足以下要求：

**IAM 权限**

必须向用于注册本地实例的 IAM 身份授予执行 CodeDeploy 操作的权限。确保 **AWSCodeDeployFullAccess** 托管策略已附加到该 IAM 身份。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 托管策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

**用于刷新临时凭证的系统**

如果您使用 IAM 会话 ARN 注册本地实例，则您必须有一个系统来定期刷新该临时凭证。如果在生成凭证时指定的期限较短，临时凭证会在一小时（或更短时间）后过期。有两种刷新凭证的方法：
+ **方法 1**：使用您的企业网络中的身份和身份验证系统以及一个 CRON 脚本，该脚本定期轮询该身份和身份验证系统，并将最新的会话凭证复制到该实例。这使您能够将身份验证和身份结构与集成，而 AWS 无需更改 CodeDeploy 代理或服务以支持您在组织中使用的身份验证类型。
+ **方法 2**：定期在实例上运行 CRON 作业以调用 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)操作并将会话凭证写入 CodeDeploy 代理可以访问的文件。此方法仍需要使用 IAM 用户并将凭证复制到本地实例，但您可以对您的各个本地实例重复使用相同的 IAM 用户和凭证。

**注意**  
无论您使用的是方法 1 还是方法 2，都必须设置一个进程，以便在临时会话证书更新后重新启动 CodeDeploy 代理，这样新的凭证才能生效。

有关创建和使用 AWS STS 证书的信息，请参阅 [AWS Security Token Service API 参考](https://docs.aws.amazon.com/STS/latest/APIReference/)和[使用临时安全证书请求访问 AWS 资源](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)。

## 步骤 1：创建本地实例将担任的 IAM 角色
<a name="register-on-premises-instance-iam-session-arn-1"></a>

您可以使用 AWS CLI 或 IAM 控制台创建 IAM 角色，您的本地实例将使用该角色进行身份验证和交互 CodeDeploy。

您只需要创建一个 IAM 角色。您的每个本地实例都可以担任此角色，以获取为此角色提供权限的临时安全凭证。

您创建的角色需要以下权限才能访问安装 CodeDeploy 代理所需的文件：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

------

我们建议您将此策略限制为您的本地实例需要访问的那些 Amazon S3 存储桶。如果您限制此策略，请确保允许访问包含 CodeDeploy 代理的 Amazon S3 存储桶。否则，每当在本地实例上安装或更新 CodeDeploy 代理时，都可能出现错误。有关如何控制对 Amazon S3 存储桶的访问权限的更多信息，请参阅[管理您的 Amazon S3 资源的访问权限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)。

**创建 IAM 角色**

1. 调用 [create-role](https://docs.aws.amazon.com/cli/latest/reference/iam/create-role.html) 命令，同时使用 `--role-name` 选项指定 IAM 角色的名称（例如 `CodeDeployInstanceRole`），并使用 `--assume-role-policy-document` 选项提供权限。

   为此实例创建 IAM 角色时，您可以为其指定角色名称 `CodeDeployInstanceRole`，并在名为 `CodeDeployRolePolicy.json` 的文件中提供所需的权限：

   ```
   aws iam create-role --role-name CodeDeployInstanceRole --assume-role-policy-document file://CodeDeployRolePolicy.json
   ```

1. 在调用 **create-role** 命令的输出中，记录 ARN 字段的值。例如：

   ```
   arn:aws:iam::123456789012:role/CodeDeployInstanceRole
   ```

   当您使用 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)API 为每个实例生成短期证书时，您将需要角色 ARN。

   有关创建 IAM 角色的更多信息，请参阅 I [A *M 用户指南*中的创建角色以向 AWS 服务委派权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。

   有关为现有角色分配权限的信息，请参阅[AWS CLI 命令参考[put-role-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-role-policy.html)](https://docs.aws.amazon.com/cli/latest/reference/)中的。

## 步骤 2：使用为单个实例生成临时证书 AWS STS
<a name="register-on-premises-instance-iam-session-arn-2"></a>

在生成将用于注册本地实例的临时凭证之前，必须创建或选择您将为其生成临时凭证的 IAM 身份（用户或角色）。在此 IAM 身份的策略设置中，必须包含 `sts:AssumeRole` 权限。

有关向 IAM 身份授予`sts:AssumeRole`权限的信息，请参阅[创建向 AWS 服务委派权限的角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)和[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)。

有两种生成临时凭证的方法：
+ 将 [assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html) 命令与 AWS CLI结合使用。例如：

  ```
  aws sts assume-role --role-arn arn:aws:iam::12345ACCOUNT:role/role-arn --role-session-name session-name
  ```

  其中：
  + *12345ACCOUNT*是贵组织的 12 位账号。
  + *role-arn*是你在中生成的要担任的角色的 ARN。[步骤 1：创建本地实例将担任的 IAM 角色](#register-on-premises-instance-iam-session-arn-1)
  + *session-name*是您要为现在正在创建的角色会话起的名称。
**注意**  
如果您使用定期轮询身份和身份验证系统并将最新的会话凭证复制到实例的 CRON 脚本（用于刷新临时证书的方法 1，如所述[IAM 会话 ARN 注册前提条件](#register-on-premises-instance-iam-session-arn-prerequisites)），则可以改用任何支持的 AWS 软件开发工具包进行调[AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html)用。
+ 使用提供的工具 AWS。

  该 aws-codedeploy-session-helper工具会生成 AWS STS 凭证并将其写入您放置在实例上的文件中。此工具最适用于 [IAM 会话 ARN 注册前提条件](#register-on-premises-instance-iam-session-arn-prerequisites) 中所述的用于刷新临时凭证的方法 2。在此方法中，该 aws-codedeploy-session-helper工具放在每个实例上，并使用 IAM 用户的权限执行命令。每个实例都将相同的 IAM 用户凭证与此工具结合使用。

  有关更多信息，请参阅[aws-codedeploy-session-helper](https://github.com/awslabs/aws-codedeploy-samples/tree/master/utilities/aws-codedeploy-session-helper) GitHub 存储库。
**注意**  
在您创建 IAM 会话凭证之后，请将它们置于本地实例上的任何位置。在下一步中，您将配置 CodeDeploy 代理以访问此位置的凭证。

在继续操作之前，请确保您将用来定期刷新临时凭证的系统已经准备就绪。如果未刷新临时凭证，则部署到本地实例的操作将失败。有关更多信息，请参阅 [IAM 会话 ARN 注册前提条件](#register-on-premises-instance-iam-session-arn-prerequisites) 中的“用于刷新临时凭证的系统”。

## 步骤 3：将配置文件添加到本地实例
<a name="register-on-premises-instance-iam-session-arn-3"></a>

使用 root 或管理员权限将配置文件添加到本地实例。此配置文件用于声明 IAM 证书和要使用的目标 AWS 区域 CodeDeploy。必须将该文件添加到本地实例上的特定位置。该文件必须包含 IAM 临时会话 ARN、其私有密钥 ID 和私有访问密钥以及目标 AWS 区域。

**添加配置文件**

1. 在本地实例上的以下位置，创建名为 `codedeploy.onpremises.yml`（针对 Ubuntu Server 或 RHEL 本地实例）或名为 `conf.onpremises.yml`（针对 Windows Server 本地实例）的文件：
   + 对于 Ubuntu Server：`/etc/codedeploy-agent/conf`
   + 对于 Windows Server：`C:\ProgramData\Amazon\CodeDeploy`

1. 使用文本编辑器将以下信息添加到新创建的 `codedeploy.onpremises.yml` 文件（Linux）或 `conf.onpremises.yml` 文件（Windows）：

   ```
   ---
   iam_session_arn: iam-session-arn
   aws_credentials_file: credentials-file
   region: supported-region
   ```

   其中：
   + *iam-session-arn*是您在中记下的 IAM 会话 ARN。[步骤 2：使用为单个实例生成临时证书 AWS STS](#register-on-premises-instance-iam-session-arn-2)
   + *credentials-file*是临时会话 ARN 的证书文件的位置，如中所述。[步骤 2：使用为单个实例生成临时证书 AWS STS](#register-on-premises-instance-iam-session-arn-2)
   + *supported-region*是 CodeDeploy支持的区域之一，如中的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中所列*AWS 一般参考*。

## 步骤 4：为部署准备本地实例 CodeDeploy
<a name="register-on-premises-instance-iam-session-arn-4"></a>

**安装和配置 AWS CLI **

在本地实例 AWS CLI 上安装和配置。（ AWS CLI 将用于在本地实例上下载和安装 CodeDeploy 代理。） 

1. 要在本地实例 AWS CLI 上安装，请按照*AWS Command Line Interface 用户指南*中的[开始设置 AWS CLI中的说明进行](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)操作。
**注意**  
CodeDeploy 用于处理本地实例的命令已在 1.7.19 版本中提供。 AWS CLI如果您 AWS CLI 已经安装了的版本，则可以通过调用来检查其版本**aws --version**。

1. 要在本地实例 AWS CLI 上配置，请按照*AWS Command Line Interface 用户指南*中的[配置 AWS CLI中的](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)说明进行操作。
**重要**  
在配置时 AWS CLI （例如，通过调用**aws configure**命令），请务必指定至少具有中所述权限的 IAM 用户的私有密钥 ID 和私有访问密钥[IAM 会话 ARN 注册前提条件](#register-on-premises-instance-iam-session-arn-prerequisites)。

**设置 AWS\$1REGION环境变量（仅限 Ubuntu 服务器和 RHEL）**

如果您没有在本地实例上运行 Ubuntu Server 或 RHEL，请跳过此步骤，直接转到 “安装代理”。 CodeDeploy 

在 Ubuntu 服务器或 RHEL 本地实例上安装代 CodeDeploy 理，并允许实例在新版本 CodeDeploy 可用时更新代理。为此，您可以将实例上的 `AWS_REGION` 环境变量设置为 CodeDeploy 支持的某个区域的标识符。我们建议您将该值设置为 CodeDeploy 应用程序、部署组和应用程序修订所在的区域（例如`us-west-2`）。有关区域的列表，请参阅《AWS 一般参考》**中的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)。

要设置环境变量，请从终端调用以下命令：

```
export AWS_REGION=supported-region
```

哪里*supported-region*是区域标识符（例如，`us-west-2`）。

**安装代 CodeDeploy 理**
+ 对于 Ubuntu Server 本地实例，请按照[为 Ubuntu 服务器安装 CodeDeploy 代理](codedeploy-agent-operations-install-ubuntu.md)中的说明操作，然后返回本页。
+ 对于 RHEL 本地实例，请按照[安装适用于亚马逊 Linux 或 RHEL 的 CodeDeploy 代理](codedeploy-agent-operations-install-linux.md)中的说明操作，然后返回本页。
+ 对于 Windows Server 本地实例，请按照[安装适用于 Windows 服务器的 CodeDeploy 代理](codedeploy-agent-operations-install-windows.md)中的说明操作，然后返回本页。

## 步骤 5：向注册本地实例 CodeDeploy
<a name="register-on-premises-instance-iam-session-arn-5"></a>

这一步中的说明假设您从本地实例本身上注册该本地实例。您可以从单独的设备或已 AWS CLI 安装和配置的实例注册本地实例。

使用 AWS CLI 向注册本地实例， CodeDeploy 以便可以在部署中使用该实例。

在使用之前 AWS CLI，您需要在中创建的临时会话证书的 ARN。[步骤 3：将配置文件添加到本地实例](#register-on-premises-instance-iam-session-arn-3)例如，对于您指定为 `AssetTag12010298EX` 的实例：

```
arn:sts:iam::123456789012:assumed-role/CodeDeployInstanceRole/AssetTag12010298EX
```

调用 [register-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/register-on-premises-instance.html) 命令，在命令中指定：
+  唯一标识本地实例的名称（使用 `--instance-name` 选项）。
**重要**  
为了帮助标识本地实例，特别是用于调试用途，我们强烈建议您指定能够反映本地实例的某种唯一特性的名称（例如，在适用时可以指定 STS 凭证的会话名称以及序列号或内部资产标识符）。如果您指定 MAC 地址作为名称，请注意 MAC 地址包含 CodeDeploy 不允许使用的字符，例如冒号 (:)。有关允许字符的列表，请参阅[CodeDeploy 配额](limits.md)。
+ 您在[步骤 1：创建本地实例将担任的 IAM 角色](#register-on-premises-instance-iam-session-arn-1)中设置以对多个本地实例进行身份验证的 IAM 会话 ARN。

例如：

```
aws deploy register-on-premises-instance --instance-name name-of-instance --iam-session-arn arn:aws:sts::account-id:assumed-role/role-to-assume/session-name
```

其中：
+ *name-of-instance*是您用来标识本地实例的名称，例如`AssetTag12010298EX`。
+ *account-id*是贵组织的 12 位数账户 ID，例如`111222333444`。
+ *role-to-assume*是您为实例创建的 IAM 角色的名称，例如`CodeDeployInstanceRole`。
+ *session-name*是您在中指定的会话角色的名称[步骤 2：使用为单个实例生成临时证书 AWS STS](#register-on-premises-instance-iam-session-arn-2)。

## 步骤 6：标记本地实例
<a name="register-on-premises-instance-iam-session-arn-6"></a>

您可以使用 AWS CLI 或 CodeDeploy 控制台来标记本地实例。 （在部署期间CodeDeploy使用本地实例标签来识别部署目标。）

**标记本地实例（CLI）**
+ 调用-premis [add-tags-to-ones-instances 命令，](https://docs.aws.amazon.com/cli/latest/reference/deploy/add-tags-to-on-premises-instances.html)指定：
  + 唯一标识本地实例的名称（使用 `--instance-names` 选项）。
  + 您要使用的本地实例标签密钥的名称和标签值（使用 `--tags` 选项）。必须同时指定名称和值。 CodeDeploy 不允许仅包含值的本地实例标签。

    例如：

    ```
    aws deploy add-tags-to-on-premises-instances --instance-names AssetTag12010298EX --tags Key=Name,Value=CodeDeployDemo-OnPrem
    ```

**标记本地实例（控制台）**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在导航窗格中，展开**部署**，然后选择**本地实例**。

1. 在本地实例列表中，选择要标记的本地实例名称。

1. 在标签列表中，选择或输入所需的标签键和标签值。当您输入标签键和标签值之后，将显示另一行。您可以重复此步骤，最多添加 10 个标签。要删除标签，请选择**移除**。

1. 在您添加标签之后，选择 **Update Tags**。

## 步骤 7：将应用程序修订部署到本地实例
<a name="register-on-premises-instance-iam-session-arn-7"></a>

现在，您已准备好将应用程序修订部署到已注册和标记的本地实例。

将应用程序修订部署到本地实例的方法类似于将应用程序修订部署到 Amazon EC2 实例。有关说明，请参阅[使用创建部署 CodeDeploy](deployments-create.md)。这些说明包含指向先决条件的链接，其中包括创建应用程序、创建部署组和准备应用程序修订。如果您希望部署简单的示例应用程序修订，可以创建[教程：使用 CodeDeploy （Windows 服务器、Ubuntu 服务器或红帽企业 Linux）将应用程序部署到本地实例](tutorials-on-premises-instance.md)的[步骤 2：创建示例应用程序修订](tutorials-on-premises-instance-2-create-sample-revision.md)中所述的修订。

**重要**  
如果您在创建以本地实例为目标的部署组时重复使用 CodeDeploy 服务角色，则必须在该服务角色的策略声明`Action`部分中包含`Tag:get*`该服务角色。有关更多信息，请参阅 [步骤 2：为创建服务角色 CodeDeploy](getting-started-create-service-role.md)。

## 步骤 8：跟踪对本地实例的部署
<a name="register-on-premises-instance-iam-session-arn-8"></a>

将应用程序修订部署到已注册和标记的本地实例之后，您可以跟踪部署进度。

跟踪对本地实例的部署的方法与跟踪对 Amazon EC2 实例的部署的方法类似。有关说明，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

# 使用 register 命令（IAM 用户 ARN）注册本地实例
<a name="instances-on-premises-register-instance"></a>

**重要**  
不建议使用 IAM 用户注册实例，因为它使用静态（永久）凭证进行身份验证。为了提高安全性，我们建议使用临时凭证注册实例以进行身份验证。有关更多信息，请参阅 [使用 register-on-premises-instance命令（IAM 会话 ARN）注册本地实例](register-on-premises-instance-iam-session-arn.md)。

**重要**  
确保您制定了轮换 IAM 用户的访问密钥（永久凭证）的计划。有关更多信息，请参阅[轮换访问密钥](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey)。

本部分介绍如何以最少的工作量使用 CodeDeploy 配置本地实例并注册和标记该实例。当您处理一个或少量的本地实例时，**register** 命令非常有用。仅当您使用 IAM 用户 ARN 对实例进行身份验证时，才能使用 **register** 命令。使用 IAM 会话 ARN 进行身份验证时，不能使用 **register** 命令。

当你使用该**register**命令时，你可以让它 CodeDeploy 执行以下操作：
+ 如果您未使用命令指定 IAM 用户，请在中 AWS Identity and Access Management 为本地实例创建 IAM 用户。
+ 将该 IAM 用户的凭证保存到本地实例配置文件中。
+ 向注册本地实例 CodeDeploy。
+ 如果您在命令中指定了标签，则向本地实例添加标签。

**注意**  
该[register-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/register-on-premises-instance.html)命令是[寄存器](https://docs.aws.amazon.com/cli/latest/reference/deploy/register.html)命令的替代命令。如果您希望主要靠自己使用 CodeDeploy 配置本地实例并注册和标记该实例，请使用 **register-on-premises-instance** 命令。您也可以通过 **register-on-premises-instance** 命令来使用 IAM 会话 ARN 注册实例，而不是使用 IAM 用户 ARN 进行注册。如果您有大量本地实例，则此方法有很大的优势。具体来说，您可以使用一个 IAM 会话 ARN 对多个实例进行身份验证，而不必为每个本地实例都单独创建一个 IAM 用户。有关更多信息，请参阅[使用 register-on-premises-instance命令（IAM 用户 ARN）注册本地实例](register-on-premises-instance-iam-user-arn.md)和[使用 register-on-premises-instance命令（IAM 会话 ARN）注册本地实例](register-on-premises-instance-iam-session-arn.md)。

**Topics**
+ [步骤 1：在本地实例 AWS CLI 上安装和配置](#instances-on-premises-register-instance-1-install-cli)
+ [步骤 2：调用 register 命令](#instances-on-premises-register-instance-2-register-command)
+ [步骤 3：调用 install 命令](#instances-on-premises-register-instance-3-install-command)
+ [步骤 4：将应用程序修订部署到本地实例](#instances-on-premises-register-instance-4-deploy-revision)
+ [步骤 5：跟踪对本地实例的部署](#instances-on-premises-register-instance-5-track-deployment)

## 步骤 1：在本地实例 AWS CLI 上安装和配置
<a name="instances-on-premises-register-instance-1-install-cli"></a>

1. 在本地实例 AWS CLI 上安装。请按照《AWS Command Line Interface 用户指南》**的[使用 AWS CLI进行设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)中的说明操作。
**注意**  
CodeDeploy 1.7.19 及更高 AWS CLI 版本中提供了用于使用本地实例的命令。如果您 AWS CLI 已经安装了，请**aws --version**致电查看其版本。

1. 在本地实例 AWS CLI 上配置。按照《AWS Command Line Interface 用户指南》**的[配置 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) 中的说明进行操作。
**重要**  
在配置时 AWS CLI （例如，通过调用**aws configure**命令），请务必指定除中指定的权限之外还至少具有以下访问权限的 IAM 用户的密钥 ID 和私有 AWS 访问密钥[配置本地实例的先决条件](instances-on-premises-prerequisites.md)。这使得在本地实例上下载和安装 CodeDeploy 代理成为可能。访问权限应与以下示例类似：  

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [
       {
         "Effect" : "Allow",
         "Action" : [
           "codedeploy:*",
           "iam:CreateAccessKey",
           "iam:CreateUser",
           "iam:DeleteAccessKey",
           "iam:DeleteUser",
           "iam:DeleteUserPolicy",
           "iam:ListAccessKeys",
           "iam:ListUserPolicies",
           "iam:PutUserPolicy",
           "iam:GetUser",
           "tag:getTagKeys",
           "tag:getTagValues",
           "tag:GetResources"
         ],
         "Resource" : "*"
       },
       {
         "Effect" : "Allow",
         "Action" : [
           "s3:Get*",
           "s3:List*"
         ],
         "Resource" : [
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-bucket1/*"
         ]
       }     
     ]
   }
   ```
如果您在尝试访问前面显示的 Amazon S3 存储桶时看到访问被拒绝错误，请尝试省略该存储桶的资源 ARN 的 `/*` 部分，例如，`arn:aws:s3:::aws-codedeploy-sa-east-1`。

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [
       {
         "Effect" : "Allow",
         "Action" : [
           "codedeploy:*",
           "iam:CreateAccessKey",
           "iam:CreateUser",
           "iam:DeleteAccessKey",
           "iam:DeleteUser",
           "iam:DeleteUserPolicy",
           "iam:ListAccessKeys",
           "iam:ListUserPolicies",
           "iam:PutUserPolicy",
           "iam:GetUser",
           "tag:GetResources"
         ],
         "Resource" : "*"
       },
       {
         "Effect" : "Allow",
         "Action" : [
           "s3:Get*",
           "s3:List*"
         ],
         "Resource" : [
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-bucket2/*"
         ]
       }     
     ]
   }
   ```

## 步骤 2：调用 register 命令
<a name="instances-on-premises-register-instance-2-register-command"></a>

在这一步中，我们假设您从本地实例本身注册该本地实例。您也可以从单独的设备或实例注册本地实例，该设备或实例已按上一步所述 AWS CLI 安装和配置了本地实例。

使用调用 AWS CLI regist [er](https://docs.aws.amazon.com/cli/latest/reference/deploy/register.html) 命令，指定：
+ 用于唯一标识本地实例的名称 CodeDeploy （带`--instance-name`选项）。
**重要**  
为了帮助在以后标识本地实例，特别是用于调试用途，我们强烈建议您使用的名称能够映射到本地实例的某种唯一特性（例如，在适用时可以使用序列号或唯一内部资产标识符）。如果您为名称指定 MAC 地址，请注意 MAC 地址包含 CodeDeploy 不允许使用的字符，例如冒号 (`:`)。有关允许字符的列表，请参阅[CodeDeploy 配额](limits.md)。
+ （可选）您希望与此本地实例关联的现有 IAM 用户的 ARN（使用 `--iam-user-arn` 选项）。要获取 IAM 用户的 ARN，请调用 [get-user](https://docs.aws.amazon.com/cli/latest/reference/iam/get-user.html) 命令，或者在 IAM 控制台的**用户**部分中选择 IAM 用户名，然后在**摘要**部分找到**用户 ARN** 值。如果未指定此选项，则 CodeDeploy 将在您的 AWS 账户中代表您创建一个 IAM 用户，并将其与本地实例关联。
**重要**  
如果您指定了 `--iam-user-arn` 选项，则还必须手动创建本地实例配置文件，如[步骤 4：将配置文件添加到本地实例](register-on-premises-instance-iam-user-arn.md#register-on-premises-instance-iam-user-arn-4)中所述。  
 您只能将一个 IAM 用户与一个本地实例关联。尝试将一个 IAM 用户与多个本地实例关联会导致出错，对这些本地实例的部署将失败，或者对这些本地实例的部署会停滞在永久等待的状态。
+ （可选）一组本地实例标签（带`--tags`选项）， CodeDeploy 用于标识要部署到的 Amazon EC2 实例集。使用 `Key=tag-key,Value=tag-value` 指定各个标签（例如，`Key=Name,Value=Beta Key=Name,Value=WestRegion`）。如果未指定此选项，将不注册标签。要稍后注册标签，请调用-premises [add-tags-to-on-instances 命令](https://docs.aws.amazon.com/cli/latest/reference/deploy/add-tags-to-on-premises-instances.html)。
+ （可选）将在其中注册本地实例的 AWS 区域 CodeDeploy （带`--region`选项）。这必须是 *AWS 一般参考*的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中列出的受支持区域之一（例如 `us-west-2`）。如果未指定此选项，则将使用与调用 IAM 用户关联的默认 AWS 区域。

例如：

```
aws deploy register --instance-name AssetTag12010298EX --iam-user-arn arn:aws:iam::444455556666:user/CodeDeployUser-OnPrem --tags Key=Name,Value=CodeDeployDemo-OnPrem --region us-west-2
```

**register** 命令执行以下操作：

1. 如果未指定现有 IAM 用户，则创建一个 IAM 用户，向该用户附加必需的权限，然后生成对应的私有密钥和私有访问密钥。本地实例将使用此 IAM 用户及其权限和凭证进行身份验证和交互 CodeDeploy。

1. 向注册本地实例 CodeDeploy。

1. 如果指定，则 CodeDeploy 将使用`--tags`选项指定的标签与注册的本地实例名称相关联。

1. 如果创建了 IAM 用户，则还会在调用 **register** 命令的同一个目录中创建必需的配置文件。

如果此命令遇到错误，则将显示错误消息，说明您可以如何手动完成剩余步骤。否则，将显示成功消息，说明如何调用 **install** 命令，如接下来的步骤中所列。

## 步骤 3：调用 install 命令
<a name="instances-on-premises-register-instance-3-install-command"></a>

在本地实例中，使用调 AWS CLI 用[安装](https://docs.aws.amazon.com/cli/latest/reference/deploy/install.html)命令，指定：
+ 配置文件的路径（使用 `--config-file` 选项）。
+ （可选）是否替换本地实例上已存在的配置文件（使用 `--override-config` 选项）。如果未指定，则不替换现有配置文件。
+ （可选）将在其中注册本地实例的 AWS 区域 CodeDeploy （带`--region`选项）。这必须是 *AWS 一般参考*的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中列出的受支持区域之一（例如 `us-west-2`）。如果未指定此选项，则将使用与调用 IAM 用户关联的默认 AWS 区域。
+ （可选）安装 CodeDeploy 代理的自定义位置（带`--agent-installer`选项）。此选项对于安装 CodeDeploy 不正式支持的 CodeDeploy 代理的自定义版本（例如基于中[CodeDeploy代理](https://github.com/aws/aws-codedeploy-agent)存储库的自定义版本 GitHub）非常有用。该值必须是指向包含以下二者之一的 Amazon S3 存储桶的路径：
  +  CodeDeploy 代理安装脚本（适用于基于 Linux 或 UNIX 的操作系统，类似于中[CodeDeploy代理](https://github.com/aws/aws-codedeploy-agent/blob/master/bin/install)存储库中的 GitHub安装文件）。
  +  CodeDeploy 代理安装程序包 (.msi) 文件（适用于基于 Windows 的操作系统）。

   如果未指定此选项，则 CodeDeploy 将尽最大努力从自己的位置安装与本地实例上的操作系统兼容的官方支持的 CodeDeploy 代理版本。

例如：

```
aws deploy install --override-config --config-file /tmp/codedeploy.onpremises.yml --region us-west-2 --agent-installer s3://aws-codedeploy-us-west-2/latest/codedeploy-agent.msi
```

**install** 命令执行以下操作：

1. 检查本地实例是否为 Amazon EC2 实例。如果是，则将显示错误消息。

1. 将本地实例配置文件从实例上的指定位置复制到 CodeDeploy 代理期望找到的位置，前提是该文件尚未位于该位置。

   对于 Ubuntu Server 和 Red Hat Enterprise Linux（RHEL），这是 `/etc/codedeploy-agent/conf`/`codedeploy.onpremises.yml`。

   对于 Windows Server，这是 `C:\ProgramData\Amazon\CodeDeploy`\$1`conf.onpremises.yml`。

   如果指定了 `--override-config` 选项，则创建或覆盖文件。

1. 在本地实例上安装 CodeDeploy 代理，然后启动它。

## 步骤 4：将应用程序修订部署到本地实例
<a name="instances-on-premises-register-instance-4-deploy-revision"></a>

现在，您已准备好将应用程序修订部署到已注册和标记的本地实例。

将应用程序修订部署到本地实例的方法类似于将应用程序修订部署到 Amazon EC2 实例。有关说明，请参阅[使用创建部署 CodeDeploy](deployments-create.md)。这些说明链接到各种先决条件，包括创建应用程序、创建部署组和准备应用程序修订。如果您希望部署简单的示例应用程序修订，可以创建[教程：使用 CodeDeploy （Windows 服务器、Ubuntu 服务器或红帽企业 Linux）将应用程序部署到本地实例](tutorials-on-premises-instance.md)的[步骤 2：创建示例应用程序修订](tutorials-on-premises-instance-2-create-sample-revision.md)中所述的修订。

**重要**  
如果您在创建以本地实例为目标的部署组时重复使用现有 CodeDeploy 服务角色，则必须在该服务角色的策略声明`Action`部分中包含`Tag:get*`该服务角色。有关更多信息，请参阅 [步骤 2：为创建服务角色 CodeDeploy](getting-started-create-service-role.md)。

## 步骤 5：跟踪对本地实例的部署
<a name="instances-on-premises-register-instance-5-track-deployment"></a>

将应用程序修订部署到已注册和标记的本地实例之后，您可以跟踪部署进度。

跟踪对本地实例的部署的方法与跟踪对 Amazon EC2 实例的部署的方法类似。有关说明，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

有关更多选项，请参阅[在中管理本地实例的操作 CodeDeploy](on-premises-instances-operations.md)。

# 使用 register-on-premises-instance命令（IAM 用户 ARN）注册本地实例
<a name="register-on-premises-instance-iam-user-arn"></a>

**重要**  
不建议使用 IAM 用户注册实例，因为它使用静态（永久）凭证进行身份验证。为了提高安全性，我们建议使用临时凭证注册实例以进行身份验证。有关更多信息，请参阅 [使用 register-on-premises-instance命令（IAM 会话 ARN）注册本地实例](register-on-premises-instance-iam-session-arn.md)。

**重要**  
确保您制定了轮换 IAM 用户的访问密钥（永久凭证）的计划。有关更多信息，请参阅[轮换访问密钥](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_credentials_access-keys.html#Using_RotateAccessKey)。

按以下说明，配置本地实例并主要靠自己通过 CodeDeploy 注册该实例并为其添加标签，同时使用静态 IAM 用户凭证进行身份验证。

**Topics**
+ [步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)
+ [步骤 2：向 IAM 用户分配权限](#register-on-premises-instance-iam-user-arn-2)
+ [步骤 3：获取 IAM 用户凭证](#register-on-premises-instance-iam-user-arn-3)
+ [步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4)
+ [步骤 5：安装和配置 AWS CLI](#register-on-premises-instance-iam-user-arn-5)
+ [步骤 6：设置 AWS\$1REGION环境变量（仅限 Ubuntu 服务器和 RHEL）](#register-on-premises-instance-iam-user-arn-6)
+ [步骤 7：安装代 CodeDeploy 理](#register-on-premises-instance-iam-user-arn-7)
+ [步骤 8：向注册本地实例 CodeDeploy](#register-on-premises-instance-iam-user-arn-8)
+ [步骤 9：标记本地实例](#register-on-premises-instance-iam-user-arn-9)
+ [步骤 10：将应用程序修订部署到本地实例](#register-on-premises-instance-iam-user-arn-10)
+ [步骤 11：跟踪对本地实例的部署](#register-on-premises-instance-iam-user-arn-11)

## 步骤 1：为本地实例创建 IAM 用户
<a name="register-on-premises-instance-iam-user-arn-1"></a>

创建一个 IAM 用户，本地实例将使用该用户进行身份验证和交互 CodeDeploy。

**重要**  
您必须为每个参与的本地实例创建单独的 IAM 用户。如果您尝试将单个 IAM 用户重复用于多个本地实例，则可能无法成功注册或标记这些本地实例 CodeDeploy。对这些本地实例的部署可能会停滞在永久等待的状态或完全失败。

我们建议您为 IAM 用户分配一个标识其用途的名称，例如 CodeDeployUser-OnPrem。

您可以使用 AWS CLI 或 IAM 控制台创建 IAM 用户。有关更多信息，请参阅[在您的 AWS 账户中创建 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)。

**重要**  
无论您是使用还是 IAM 控制台创建新的 IAM 用户，都要记下为该用户提供的用户 ARN。 AWS CLI 稍后在[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4) 和[步骤 8：向注册本地实例 CodeDeploy](#register-on-premises-instance-iam-user-arn-8)中您将需要此信息。

## 步骤 2：向 IAM 用户分配权限
<a name="register-on-premises-instance-iam-user-arn-2"></a>

如果您的本地实例将从 Amazon S3 存储桶部署应用程序修订，则您必须向 IAM 用户分配权限来与这些存储桶交互。您可以使用 AWS CLI 或 IAM 控制台分配权限。

**注意**  
如果要仅从 GitHub 存储库部署应用程序修订版，请跳过此步骤直接转至[步骤 3：获取 IAM 用户凭证](#register-on-premises-instance-iam-user-arn-3)。（您仍需要有关您在[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)中创建的 IAM 用户的信息。后面的步骤中将会用到这些信息。）

**分配权限（CLI）**

1. 在您用于调用 AWS CLI的 Amazon EC2 实例或设备上创建包含以下策略内容的文件。采用类似于 **CodeDeploy-OnPrem-Permissions.json** 的格式命名文件，然后保存文件。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "s3:Get*",
                   "s3:List*"
               ],
               "Effect": "Allow",
               "Resource": "*"
           }
       ]
   }
   ```
**注意**  
我们建议您将此策略限制为您的本地实例需要访问的那些 Amazon S3 存储桶。如果您限制此策略，请确保同时允许访问包含 AWS CodeDeploy 代理的 Amazon S3 存储桶。否则，每当在关联的本地实例上安装或更新 CodeDeploy 代理时，都可能出现错误。  
例如：  

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "s3:Get*",
           "s3:List*"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:s3:::aws-codedeploy-us-east-2/*",
           "arn:aws:s3:::aws-codedeploy-us-east-1/*",
           "arn:aws:s3:::aws-codedeploy-us-west-1/*",
           "arn:aws:s3:::aws-codedeploy-us-west-2/*",
           "arn:aws:s3:::aws-codedeploy-ca-central-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-west-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-west-2/*",
           "arn:aws:s3:::aws-codedeploy-eu-west-3/*",
           "arn:aws:s3:::aws-codedeploy-eu-central-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-central-2/*",
           "arn:aws:s3:::aws-codedeploy-eu-north-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-south-1/*",
           "arn:aws:s3:::aws-codedeploy-eu-south-2/*",
           "arn:aws:s3:::aws-codedeploy-il-central-1/*",
           "arn:aws:s3:::aws-codedeploy-ap-east-1/*",
           "arn:aws:s3:::aws-codedeploy-ap-northeast-1/*",
           "arn:aws:s3:::aws-codedeploy-ap-northeast-2/*",
           "arn:aws:s3:::aws-codedeploy-ap-northeast-3/*",
           "arn:aws:s3:::aws-codedeploy-ap-southeast-1/*",        
           "arn:aws:s3:::aws-codedeploy-ap-southeast-2/*",
           "arn:aws:s3:::aws-codedeploy-ap-southeast-3/*",
           "arn:aws:s3:::aws-codedeploy-ap-southeast-4/*",
           "arn:aws:s3:::aws-codedeploy-ap-south-1/*",
           "arn:aws:s3:::aws-codedeploy-ap-south-2/*",
           "arn:aws:s3:::aws-codedeploy-me-central-1/*",
           "arn:aws:s3:::aws-codedeploy-me-south-1/*",
           "arn:aws:s3:::aws-codedeploy-sa-east-1/*"
         ]
       }
     ]
   }
   ```

1. 调用[put-user-policy](https://docs.aws.amazon.com/cli/latest/reference/iam/put-user-policy.html)命令，指定 IAM 用户的名称（使用`--user-name`选项）、策略的名称（使用`--policy-name`选项）和新创建的策略文档的路径（使用`--policy-document`选项）。例如，假设 **CodeDeploy-OnPrem-Permissions.json** 文件位于您调用此命令时所在的同一个目录（文件夹）中：
**重要**  
务必在文件名前包含 `file://`。此命令中需要该项。

   ```
   aws iam put-user-policy --user-name CodeDeployUser-OnPrem --policy-name CodeDeploy-OnPrem-Permissions --policy-document file://CodeDeploy-OnPrem-Permissions.json
   ```

**分配权限（控制台）**

1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

1. 在导航窗格中选择 **Policies**，然后选择 **Create Policy**。（如果 **Get Started** 按钮出现，选择此按钮，然后选择 **Create Policy**。）

1. 在 **Create Your Own Policy** 旁，选择 **Select**。

1. 在 **Policy Name（策略名称）**框中，键入此策略的名称（例如，**CodeDeploy-OnPrem-Permissions**）。

1. 在**策略文档**框中，键入或粘贴以下权限表达式，该表达式 AWS CodeDeploy 允许代表 IAM 用户将策略中指定的任何 Amazon S3 存储桶中的应用程序修订部署到本地实例：

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "s3:Get*",
                   "s3:List*"
               ],
               "Effect": "Allow",
               "Resource": "*"
           }
       ]
   }
   ```

1. 选择**创建策略**。

1. 在导航窗格中，选择 **Users**（用户）。

1. 在用户列表中，浏览并选择在[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)中创建的 IAM 用户的名称。

1. 在 **Permissions** 选项卡上的 **Managed Policies** 中，选择 **Attach Policy**。

1. 选择名为 **CodeDeploy-OnPrem-Permissions** 的托管策略，然后选择 **Attach Policy（附加策略）**。

## 步骤 3：获取 IAM 用户凭证
<a name="register-on-premises-instance-iam-user-arn-3"></a>

获取 IAM 用户的私有密钥 ID 和秘密访问密钥。您在[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4) 中需要使用它们。您可以使用 AWS CLI 或 IAM 控制台获取密钥 ID 和私有访问密钥。

**注意**  
如果您已具有私有密钥 ID 和秘密访问密钥，则跳过这一步，直接转到[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4)。  
如果用户想在 AWS 外部进行交互，则需要编程访问权限 AWS 管理控制台。授予编程访问权限的方式取决于正在访问的用户类型 AWS。  
要向用户授予编程式访问权限，请选择以下选项之一。  


****  

| 哪个用户需要编程式访问权限？ | 目的 | 方式 | 
| --- | --- | --- | 
| IAM | （推荐）使用控制台凭证作为临时凭证，签署对 AWS CLI AWS SDKs、或的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/register-on-premises-instance-iam-user-arn.html)  | 
|  人力身份 （在 IAM Identity Center 中管理的用户）  | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/register-on-premises-instance-iam-user-arn.html)  | 
| IAM | 使用临时证书签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 | 按照 IAM 用户指南中的将[临时证书与 AWS 资源配合使用](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html)中的说明进行操作。 | 
| IAM | （不推荐使用）使用长期凭证签署向 AWS CLI AWS SDKs、或发出的编程请求 AWS APIs。 |  按照您希望使用的界面的说明进行操作。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/register-on-premises-instance-iam-user-arn.html)  | 

**获取凭证（CLI）**

1. 调用[list-access-keys](https://docs.aws.amazon.com/cli/latest/reference/iam/list-access-keys.html)命令，指定 IAM 用户的姓名（使用`--user-name`选项），然后仅查询访问密钥 IDs （使用`--query`和`--output`选项）。例如：

   ```
   aws iam list-access-keys --user-name CodeDeployUser-OnPrem --query "AccessKeyMetadata[*].AccessKeyId" --output text
   ```

1. 如果输出中没有显示任何密钥或输出中仅显示有关一个密钥的信息，请调用[create-access-key](https://docs.aws.amazon.com/cli/latest/reference/iam/create-access-key.html)命令，指定 IAM 用户的名称（带`--user-name`选项）：

   ```
   aws iam create-access-key --user-name CodeDeployUser-OnPrem
   ```

   在调用 **create-access-key** 命令的输出中，记录 `AccessKeyId` 和 `SecretAccessKey` 字段的值。在[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4) 中您将需要此信息。
**重要**  
这是您仅有的一次查看此秘密访问密钥的机会。如果您忘记或丢失了此秘密访问密钥，则需要按照[步骤 3：获取 IAM 用户凭证](#register-on-premises-instance-iam-user-arn-3) 中的步骤生成新的密钥。

1. 如果已经列出了两个访问密钥，则必须通过调用[delete-access-key](https://docs.aws.amazon.com/cli/latest/reference/iam/delete-access-key.html)命令删除其中一个，指定 IAM 用户的名称（带`--user-name`选项）和要删除的访问密钥的 ID（使用`--access-key-id`选项）。然后调用 **create-access-key** 命令，如此步骤中前面所述。下面是一个调用 **delete-access-key** 命令的示例：

   ```
   aws iam delete-access-key --user-name CodeDeployUser-OnPrem --access-key-id access-key-ID
   ```
**重要**  
如果您调用 **delete-access-key** 命令删除这些访问密钥之一，并且本地实例已经按[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4)中所述使用此访问密钥，则您需要再次按照[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4)中的说明操作，指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则，对该本地实例的任何部署可能会停滞在永久等待的状态或完全失败。

**获取凭证（控制台）**

1. 

   1. 使用 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 打开 IAM 控制台。

   1. 如果用户的列表未显示，则在导航窗格中选择 **Users**。

   1. 在用户列表中，浏览并选择在[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)中创建的 IAM 用户的名称。

1. 在 **Security credentials** 选项卡上，如果没有列出密钥或仅列出了一个密钥，请选择 **Create access key**。

   如果列出了两个访问密钥，则必须删除其中之一。选择其中一个访问密钥旁边的 **Delete**，然后选择 **Create access key**。
**重要**  
如果您选择这些访问密钥之一旁边的**删除**，并且本地实例已经按[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4)中所述使用此访问密钥，则您需要再次按照[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4)中的说明操作，指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则，对该本地实例的部署可能会停滞在永久等待的状态或完全失败。

1. 选择 **Show ** 并记录访问密钥 ID 和秘密访问密钥。您在下一步中需要此信息。或者，您可以选择 **Download .csv file** 来保存访问密钥 ID 和秘密访问密钥的副本。
**重要**  
除非您记录或下载了凭证，否则这是您仅有的一次查看此秘密访问密钥的机会。如果您忘记或丢失了此秘密访问密钥，则需要按照[步骤 3：获取 IAM 用户凭证](#register-on-premises-instance-iam-user-arn-3) 中的步骤生成新的密钥。

1. 选择 “**关闭**” 返回到 “**用户*IAM User Name*” >** 页面。

## 步骤 4：将配置文件添加到本地实例
<a name="register-on-premises-instance-iam-user-arn-4"></a>

使用 root 或管理员权限将配置文件添加到本地实例。此配置文件将用于声明 IAM 用户证书和要使用的目标 AWS 区域 CodeDeploy。必须将该文件添加到本地实例上的特定位置。该文件必须包含 IAM 用户的 ARN、私有密钥 ID、私有访问密钥和目标 AWS 区域。该文件必须遵循特定格式。

1. 在本地实例上的以下位置，创建名为 `codedeploy.onpremises.yml`（针对 Ubuntu Server 或 RHEL 本地实例）或名为 `conf.onpremises.yml`（针对 Windows Server 本地实例）的文件：
   + 对于 Ubuntu Server：`/etc/codedeploy-agent/conf`
   + 对于 Windows Server：`C:\ProgramData\Amazon\CodeDeploy`

1. 使用文本编辑器将以下信息添加到新创建的 `codedeploy.onpremises.yml` 或 `conf.onpremises.yml` 文件：

   ```
   ---
   aws_access_key_id: secret-key-id
   aws_secret_access_key: secret-access-key
   iam_user_arn: iam-user-arn
   region: supported-region
   ```

   其中：
   + *secret-key-id*是您在[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)或中记下的相应 IAM 用户的密钥 ID [步骤 3：获取 IAM 用户凭证](#register-on-premises-instance-iam-user-arn-3)。
   + *secret-access-key*是您在[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)或中记下的相应 IAM 用户的私有访问密钥[步骤 3：获取 IAM 用户凭证](#register-on-premises-instance-iam-user-arn-3)。
   + *iam-user-arn*是您在前面提到的 IAM 用户的 ARN。[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)
   + *supported-region*是您的 CodeDeploy 应用程序、部署组和应用程序修订 CodeDeploy 所在区域所支持的标识符（例如，`us-west-2`）。有关区域的列表，请参阅《AWS 一般参考》**中的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)。

    
**重要**  
如果您在[步骤 3：获取 IAM 用户凭证](#register-on-premises-instance-iam-user-arn-3)中选择这些访问密钥之一旁边的**删除**，并且本地实例已经在使用关联的访问密钥 ID 和秘密访问密钥，则您需要按照[步骤 4：将配置文件添加到本地实例](#register-on-premises-instance-iam-user-arn-4)中的说明操作，指定与此 IAM 用户关联的其他访问密钥 ID 和秘密访问密钥。否则，对您的本地实例的任何部署可能会停滞在永久等待的状态或完全失败。

## 步骤 5：安装和配置 AWS CLI
<a name="register-on-premises-instance-iam-user-arn-5"></a>

在本地实例 AWS CLI 上安装和配置。（ AWS CLI 将在中[步骤 7：安装代 CodeDeploy 理](#register-on-premises-instance-iam-user-arn-7)用于在本地实例上下载和安装 CodeDeploy 代理。）

1. 要在本地实例 AWS CLI 上安装，请按照*AWS Command Line Interface 用户指南*中的[开始设置 AWS CLI中的说明进行](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)操作。
**注意**  
CodeDeploy 用于处理本地实例的命令已在 1.7.19 版本中提供。 AWS CLI如果您 AWS CLI 已经安装了的版本，则可以通过调用来检查其版本**aws --version**。

1. 要在本地实例 AWS CLI 上配置，请按照*AWS Command Line Interface 用户指南*中的[配置 AWS CLI中的](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html)说明进行操作。
**重要**  
在配置时 AWS CLI （例如，通过调用**aws configure**命令），请务必指定除中指定的访问权限之外还至少具有以下 AWS 访问权限的 IAM 用户的私有密钥 ID 和私有访问密钥[配置本地实例的先决条件](instances-on-premises-prerequisites.md)。这样，您就可以在本地实例上下载并安装 CodeDeploy 代理：  
   

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [
       {
         "Effect" : "Allow",
         "Action" : [
           "codedeploy:*"
         ],
         "Resource" : "*"
       },
       {
         "Effect" : "Allow",
         "Action" : [
           "s3:Get*",
           "s3:List*"
         ],
         "Resource" : [
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:s3:::amzn-s3-demo-bucket1/*"
         ]
       }     
     ]
   }
   ```

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement" : [
       {
         "Effect" : "Allow",
         "Action" : [
           "codedeploy:*"
         ],
         "Resource" : "*"
       },
       {
         "Effect" : "Allow",
         "Action" : [
           "s3:Get*",
           "s3:List*"
         ],
         "Resource" : [
           "*"
         ]
       }     
     ]
   }
   ```
这些访问权限可以分配给您在[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)中创建的 IAM 用户或者其他 IAM 用户。要将这些权限分配给 IAM 用户，请按照[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)中的说明操作，并使用这些访问权限而不是该步骤中的权限。

## 步骤 6：设置 AWS\$1REGION环境变量（仅限 Ubuntu 服务器和 RHEL）
<a name="register-on-premises-instance-iam-user-arn-6"></a>

如果您的本地实例上没有运行 Ubuntu Server 或 RHEL，则跳过此步骤，直接转到[步骤 7：安装代 CodeDeploy 理](#register-on-premises-instance-iam-user-arn-7)。

在 Ubuntu 服务器或 RHEL 本地实例上安装代 CodeDeploy 理，并允许该实例在新版本 CodeDeploy 可用时更新代理。为此，您可以将实例上的 `AWS_REGION` 环境变量设置为 CodeDeploy 支持的某个区域的标识符。我们建议您将该值设置为 CodeDeploy 应用程序、部署组和应用程序修订所在的区域（例如`us-west-2`）。有关区域的列表，请参阅《AWS 一般参考》**中的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)。

要设置环境变量，请从终端调用以下命令：

```
export AWS_REGION=supported-region
```

哪里*supported-region*是区域标识符（例如，`us-west-2`）。

## 步骤 7：安装代 CodeDeploy 理
<a name="register-on-premises-instance-iam-user-arn-7"></a>

在本地实例上安装 CodeDeploy 代理：
+ 对于 Ubuntu Server 本地实例，请按照[为 Ubuntu 服务器安装 CodeDeploy 代理](codedeploy-agent-operations-install-ubuntu.md)中的说明操作，然后返回本页。
+ 对于 RHEL 本地实例，请按照[安装适用于亚马逊 Linux 或 RHEL 的 CodeDeploy 代理](codedeploy-agent-operations-install-linux.md)中的说明操作，然后返回本页。
+ 对于 Windows Server 本地实例，请按照[安装适用于 Windows 服务器的 CodeDeploy 代理](codedeploy-agent-operations-install-windows.md)中的说明操作，然后返回本页。

## 步骤 8：向注册本地实例 CodeDeploy
<a name="register-on-premises-instance-iam-user-arn-8"></a>

这一步中的说明假设您从本地实例本身上注册该本地实例。您可以从单独的设备或已 AWS CLI 安装和配置的实例注册本地实例，如中所述[步骤 5：安装和配置 AWS CLI](#register-on-premises-instance-iam-user-arn-5)。

使用 AWS CLI 向注册本地实例， CodeDeploy 以便可以在部署中使用该实例。

1. 在使用之前 AWS CLI，您需要在中创建的 IAM 用户的用户 ARN。[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)如果您还没有用户 ARN，请调用 [get-user](https://docs.aws.amazon.com/cli/latest/reference/iam/get-user.html) 命令，在命令中指定 IAM 用户的名称（使用 `--user-name` 选项）并仅查询用户 ARN（使用 `--query` 和 `--output` 选项）：

   ```
   aws iam get-user --user-name CodeDeployUser-OnPrem --query "User.Arn" --output text
   ```

1. 调用 [register-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/register-on-premises-instance.html) 命令，在命令中指定：
   + 唯一标识本地实例的名称（使用 `--instance-name` 选项）。
**重要**  
为了帮助标识本地实例，特别是用于调试用途，我们强烈建议您指定能够反映本地实例的某种唯一特性的名称（例如，在适用时可以指定序列号或内部资产标识符）。如果指定 MAC 地址作为名称，请注意 MAC 地址包含 CodeDeploy 不允许使用的字符，例如冒号 (`:`)。有关允许字符的列表，请参阅[CodeDeploy 配额](limits.md)。
   + 您在[步骤 1：为本地实例创建 IAM 用户](#register-on-premises-instance-iam-user-arn-1)中创建的 IAM 用户的用户 ARN（使用 `--iam-user-arn` 选项）。

     例如：

     ```
     aws deploy register-on-premises-instance --instance-name AssetTag12010298EX --iam-user-arn arn:aws:iam::444455556666:user/CodeDeployUser-OnPrem
     ```

## 步骤 9：标记本地实例
<a name="register-on-premises-instance-iam-user-arn-9"></a>

您可以使用 AWS CLI 或 CodeDeploy 控制台来标记本地实例。 （在部署期间CodeDeploy使用本地实例标签来识别部署目标。）

**标记本地实例（CLI）**
+ 调用-premis [add-tags-to-ones-instances 命令，](https://docs.aws.amazon.com/cli/latest/reference/deploy/add-tags-to-on-premises-instances.html)指定：

   
  + 唯一标识本地实例的名称（使用 `--instance-names` 选项）。
  + 您要使用的本地实例标签密钥的名称和标签值（使用 `--tags` 选项）。必须同时指定名称和值。 CodeDeploy 不允许仅包含值的本地实例标签。

    例如：

    ```
    aws deploy add-tags-to-on-premises-instances --instance-names AssetTag12010298EX --tags Key=Name,Value=CodeDeployDemo-OnPrem
    ```

**标记本地实例（控制台）**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 从 CodeDeploy 菜单中选择**本地实例**。

1. 在本地实例列表中，选择您要标记的本地实例旁边的箭头。

1. 在标签列表中，选择或输入所需的标签键和标签值。当您输入标签键和标签值之后，将显示另一行。您可以重复此步骤，最多添加 10 个标签。要删除标签，请选择删除图标（![\[The delete icon.\]](http://docs.aws.amazon.com/zh_cn/codedeploy/latest/userguide/images/delete-triggers-x.png)）。

1. 在您添加标签之后，选择 **Update Tags**。

## 步骤 10：将应用程序修订部署到本地实例
<a name="register-on-premises-instance-iam-user-arn-10"></a>

现在，您已准备好将应用程序修订部署到已注册和标记的本地实例。

将应用程序修订部署到本地实例的方法类似于将应用程序修订部署到 Amazon EC2 实例。有关说明，请参阅[使用创建部署 CodeDeploy](deployments-create.md)。这些说明包含指向先决条件的链接，其中包括创建应用程序、创建部署组和准备应用程序修订。如果您希望部署简单的示例应用程序修订，可以创建[教程：使用 CodeDeploy （Windows 服务器、Ubuntu 服务器或红帽企业 Linux）将应用程序部署到本地实例](tutorials-on-premises-instance.md)的[步骤 2：创建示例应用程序修订](tutorials-on-premises-instance-2-create-sample-revision.md)中所述的修订。

**重要**  
如果您在创建以本地实例为目标的部署组时重复使用 CodeDeploy 服务角色，则必须在该服务角色的策略声明`Action`部分中包含`Tag:get*`该服务角色。有关更多信息，请参阅 [步骤 2：为创建服务角色 CodeDeploy](getting-started-create-service-role.md)。

## 步骤 11：跟踪对本地实例的部署
<a name="register-on-premises-instance-iam-user-arn-11"></a>

将应用程序修订部署到已注册和标记的本地实例之后，您可以跟踪部署进度。

跟踪对本地实例的部署的方法与跟踪对 Amazon EC2 实例的部署的方法类似。有关说明，请参阅[查看 CodeDeploy 部署详情](deployments-view-details.md)。

# 在中管理本地实例的操作 CodeDeploy
<a name="on-premises-instances-operations"></a>

注册本地实例后，请按照本节中的说明管理本地实例的操作 CodeDeploy，例如获取有关本地实例的更多信息、从中删除标签、卸载和取消注册本地实例。

**Topics**
+ [获取有关单个本地实例的信息](on-premises-instances-operations-view-details-single.md)
+ [获取有关多个本地实例的信息](on-premises-instances-operations-view-details-multiple.md)
+ [从本地实例中手动删除本地实例标签](on-premises-instances-operations-remove-tags.md)
+ [自动卸载 CodeDeploy 代理并从本地实例中删除配置文件](on-premises-instances-operations-uninstall-agent.md)
+ [自动注销本地实例](on-premises-instances-operations-deregister-automatically.md)
+ [手动取消注册本地实例](on-premises-instances-operations-deregister-manually.md)

# 获取有关单个本地实例的信息
<a name="on-premises-instances-operations-view-details-single"></a>

您可以按照[查看 CodeDeploy 部署详情](deployments-view-details.md)中的说明获取有关单个本地实例的信息。您可以使用 AWS CLI 或 CodeDeploy 控制台获取有关单个本地实例的更多信息。

**获取有关单个本地实例的信息（CLI）**
+ 调用 [get-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-on-premises-instance.html) 命令，在命令中指定唯一标识本地实例的名称（使用 `--instance-name` 选项）：

  ```
  aws deploy get-on-premises-instance --instance-name AssetTag12010298EX
  ```

**获取有关单个本地实例的信息（控制台）**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在导航窗格中，展开**部署**，然后选择**本地实例**。

1. 在本地实例列表中，选择本地实例的名称以查看其详细信息。

# 获取有关多个本地实例的信息
<a name="on-premises-instances-operations-view-details-multiple"></a>

您可以按照[查看 CodeDeploy 部署详情](deployments-view-details.md)中的说明获取有关本地实例的信息。您可以使用 AWS CLI 或 CodeDeploy 控制台获取有关本地实例的更多信息。

**获取有关多个本地实例的信息（CLI）**

1. 如需本地实例名称的列表，请调用 [list-on-premises-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-on-premises-instances.html) 命令，在命令中指定：
   + 获取所有已注册本地实例还是所有已注销本地实例的相关信息（分别使用 `--registration-status` 选项和`Registered` 或 `Deregistered`）。如果忽略此项，则将同时返回已注册和已注销本地实例的名称。
   + 是否仅获取使用特定本地实例标签所标记的本地实例的相关信息（使用 `--tag-filters` 选项）。对于每个本地实例标签，请指定 `Key`、`Value` 和 `Type`（始终应为 `KEY_AND_VALUE`）。在各 `Key`、`Value` 和 `Type` 三元组之间使用空格分隔多个本地实例标签。

   例如：

   ```
   aws deploy list-on-premises-instances --registration-status Registered --tag-filters Key=Name,Value=CodeDeployDemo-OnPrem,Type=KEY_AND_VALUE Key=Name,Value=CodeDeployDemo-OnPrem-Beta,Type=KEY_AND_VALUE
   ```

1. 有关更多详细信息，请使用本地[batch-get-on-premises实例的名称调用-](https://docs.aws.amazon.com/cli/latest/reference/deploy/batch-get-on-premises-instances.html) instances 命令（带`--instance-names`选项）：

   ```
   aws deploy batch-get-on-premises-instances --instance-names AssetTag12010298EX AssetTag09920444EX
   ```

**获取有关多个本地实例的信息（控制台）**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在导航窗格中，展开**部署**，然后选择**本地实例**。

   此时将显示有关本地实例的信息。

# 从本地实例中手动删除本地实例标签
<a name="on-premises-instances-operations-remove-tags"></a>

通常，当一个标签不再使用时，或者您希望从依赖该标签的任何部署组中删除本地实例时，您可以从本地实例中删除本地实例标签。您可以使用 AWS CLI 或 AWS CodeDeploy 控制台从本地实例中移除本地实例标签。

您无需在注销本地实例之前从本地实例中删除本地实例标签。

手动删除本地实例的本地实例标签不会取消注册实例。它不会从实例中卸载 CodeDeploy 代理。此操作不会删除实例中的配置文件。此操作不会删除与实例关联的 IAM 用户。

要自动注销本地实例，请参阅[自动注销本地实例](on-premises-instances-operations-deregister-automatically.md)。

要手动注销本地实例，请参阅[手动取消注册本地实例](on-premises-instances-operations-deregister-manually.md)。

要自动卸载 CodeDeploy 代理并从本地实例中删除配置文件，请参阅[自动卸载 CodeDeploy 代理并从本地实例中删除配置文件](on-premises-instances-operations-uninstall-agent.md)。

要仅从本地实例中手动卸载 CodeDeploy 代理，请参阅[管理 CodeDeploy 代理操作](codedeploy-agent-operations.md)。

要手动删除关联的 IAM 用户，请参阅[删除您的 AWS 账户中的 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_DeletingUserFromAccount.html)。

**从本地实例删除本地实例标签（CLI）**
+ 调用-premises [remove-tags-from-on-instances，指定](https://docs.aws.amazon.com/cli/latest/reference/deploy/remove-tags-from-on-premises-instances.html)：

   
  + 唯一标识本地实例的名称（使用 `--instance-names` 选项）。
  + 您要删除的标签的名称和值（使用 `--tags` 选项）。

    例如：

    ```
    aws deploy remove-tags-from-on-premises-instances --instance-names AssetTag12010298EX --tags Key=Name,Value=CodeDeployDemo-OnPrem
    ```

**从本地实例删除本地实例标签（控制台）**

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/codede](https://console.aws.amazon.com/codedeploy) ploy 上打开 CodeDeploy 控制台。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在导航窗格中，展开**部署**，然后选择**本地实例**。

1. 在本地实例列表中，选择要从中删除标签的本地实例的名称。

1. 在 **Tags（标签）**中，选择要删除的每个标签旁的 **Remove（删除）**。

1. 删除标签之后，选择 **Update tags**。

# 自动卸载 CodeDeploy 代理并从本地实例中删除配置文件
<a name="on-premises-instances-operations-uninstall-agent"></a>

通常，在您不再计划部署到本地实例之后，您可以卸载 CodeDeploy 代理并从该实例中删除配置文件。

**注意**  
自动卸载 CodeDeploy 代理并从本地实例中删除配置文件不会取消本地实例的注册。此操作不会取消关联与本地实例关联的任何本地实例标签。此操作不会删除与本地实例关联的 IAM 用户。  
要自动注销本地实例，请参阅[自动注销本地实例](on-premises-instances-operations-deregister-automatically.md)。  
要手动注销本地实例，请参阅[手动取消注册本地实例](on-premises-instances-operations-deregister-manually.md)。  
要手动取消任何已关联本地实例标签的关联，请参阅[从本地实例中手动删除本地实例标签](on-premises-instances-operations-remove-tags.md)。  
要从本地实例中手动卸载 CodeDeploy 代理，请参阅[管理 CodeDeploy 代理操作](codedeploy-agent-operations.md)。  
要手动删除关联的 IAM 用户，请参阅[删除您的 AWS 账户中的 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_DeletingUserFromAccount.html)。

在本地实例中，使用调 AWS CLI 用[卸](https://docs.aws.amazon.com/cli/latest/reference/deploy/uninstall.html)载命令。

例如：

```
aws deploy uninstall
```

**uninstall** 命令执行以下操作：

1. 停止本地实例上正在运行的 CodeDeploy 代理。

1. 从本地实例卸载 CodeDeploy 代理。

1. 从本地实例删除配置文件。（对于 Ubuntu 服务器和 RHEL，这是 `/etc/codedeploy-agent/conf`/`codedeploy.onpremises.yml`。对于 Windows 服务器，这是 `C:\ProgramData\Amazon\CodeDeploy`\$1`conf.onpremises.yml`。）

# 自动注销本地实例
<a name="on-premises-instances-operations-deregister-automatically"></a>

通常，当您不再计划部署到某个本地实例之后，您可以注销该实例。在您注销本地实例时，即使本地实例可能属于某个部署组的本地实例标签，该本地实例也不会包括在任何部署中。您可以使用取消注册本地实例。 AWS CLI 

**注意**  
您不能使用 CodeDeploy 控制台注销本地实例。此外，注销本地实例还会删除与本地实例关联的任何本地实例标签。它不会从本地实例中卸载 CodeDeploy 代理。此操作不会从本地实例中删除本地实例配置文件。  
要使用 CodeDeploy 控制台执行本节中的某些（但不是全部）活动，请参阅的 CodeDeploy 控制台部分[手动取消注册本地实例](on-premises-instances-operations-deregister-manually.md)。  
要手动取消任何已关联本地实例标签的关联，请参阅[从本地实例中手动删除本地实例标签](on-premises-instances-operations-remove-tags.md)。  
要自动卸载 CodeDeploy 代理并从本地实例中删除配置文件，请参阅[自动卸载 CodeDeploy 代理并从本地实例中删除配置文件](on-premises-instances-operations-uninstall-agent.md)。  
要仅从本地实例手动卸载 CodeDeploy 代理，请参阅[管理 CodeDeploy 代理操作](codedeploy-agent-operations.md)。

使用调 AWS CLI 用[取消注册](https://docs.aws.amazon.com/cli/latest/reference/deploy/deregister.html)命令，指定：
+ 唯一标识本地实例的名称 CodeDeploy （带`--instance-name`选项）。
+  （可选）是否删除与本地实例关联的 IAM 用户。默认行为是删除 IAM 用户。如果您不希望删除与本地实例关联的 IAM 用户，请在命令中指定 `--no-delete-iam-user` 选项。
+ （可选）注册本地实例的 AWS 区域 CodeDeploy（带`--region`选项）。这必须是《AWS 一般参考》**的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中列出的受支持区域之一（例如 `us-west-2`）。如果未指定此选项，则将使用与调用 IAM 用户关联的默认 AWS 区域。

注销实例并删除用户的示例：

```
aws deploy deregister --instance-name AssetTag12010298EX --region us-west-2
```

注销实例但不删除用户的示例：

```
aws deploy deregister --instance-name AssetTag12010298EX --no-delete-iam-user --region us-west-2
```

**deregister** 命令执行以下操作：

1. 向注销本地实例。 CodeDeploy

1. 如果指定，则删除与本地实例关联的 IAM 用户。

在注销本地实例后，请注意以下情况：
+  它立即停止显示在控制台中。
+  您可以立即创建另一个同名的实例。

如果此命令遇到错误，则将显示错误消息，说明您可以如何手动完成剩余步骤。否则，将显示成功消息，说明如何调用 **uninstall** 命令。

# 手动取消注册本地实例
<a name="on-premises-instances-operations-deregister-manually"></a>

通常，当您不再计划部署到某个本地实例之后，您可以注销该实例。您可以使用手动注销本地实例。 AWS CLI 

手动注销本地实例不会卸载 CodeDeploy 代理。此操作不会删除实例中的配置文件。此操作不会删除与实例关联的 IAM 用户。此操作不会删除与实例关联的任何标签。

要自动卸载 CodeDeploy 代理并从本地实例中删除配置文件，请参阅[自动卸载 CodeDeploy 代理并从本地实例中删除配置文件](on-premises-instances-operations-uninstall-agent.md)。

要仅手动卸载 CodeDeploy 代理，请参阅[管理 CodeDeploy 代理操作](codedeploy-agent-operations.md)。

要手动删除关联的 IAM 用户，请参阅[删除您的 AWS 账户中的 IAM 用户](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_DeletingUserFromAccount.html)。

要仅手动删除关联的本地实例标签，请参阅[从本地实例中手动删除本地实例标签](on-premises-instances-operations-remove-tags.md)。
+ 调用 [deregister-on-premises-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/deregister-on-premises-instance.html) 命令，在命令中指定唯一标识本地实例的名称（使用 `--instance-name` 选项）：

  ```
  aws deploy deregister-on-premises-instance --instance-name AssetTag12010298EX
  ```

  在注销本地实例后，请注意以下情况：
  +  它立即停止显示在控制台中。
  +  您可以立即创建另一个同名的实例。

# 使用 CodeDeploy 查看实例详细信息
<a name="instances-view-details"></a>

您可使用 CodeDeploy 控制台、AWS CLI 或 CodeDeploy API 查看有关部署中使用的实例的详细信息。

有关使用 CodeDeploy API 操作查看实例的信息，请参阅 [GetDeploymentInstance](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_GetDeploymentInstance.html)、[ListDeploymentInstances](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_ListDeploymentInstances.html) 和 [ListOnPremisesInstances](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_ListOnPremisesInstances.html)。

**Topics**
+ [查看实例详细信息（控制台）](#instances-view-details-console)
+ [查看实例详细信息（CLI）](#instances-view-details-cli)

## 查看实例详细信息（控制台）
<a name="instances-view-details-console"></a>

查看实例详细信息：

1. 登录 AWS 管理控制台并打开 CodeDeploy 控制台，网址为 [https://console.aws.amazon.com/codedeploy](https://console.aws.amazon.com/codedeploy)。
**注意**  
使用您在[入门 CodeDeploy](getting-started-codedeploy.md)中设置的同一用户登录。

1. 在导航窗格中，展开**部署**，然后选择**部署**。
**注意**  
如果未显示任何条目，请确保选择了正确的区域。在全局导航栏上的区域选择器中，选择 *AWS 一般参考* 的[区域和终端节点](https://docs.aws.amazon.com/general/latest/gr/rande.html#codedeploy_region)中列出的某个区域。只有这些区域支持 CodeDeploy。

1. 要显示部署详细信息，请选择实例的部署 ID。

1. 您可以在部署的页面的 **Instance activity（实例活动）**部分中查看所有实例。

1. 要查看有关实例的各个部署生命周期事件的信息，请在部署详细信息页上的 **Events** 列中，选择 **View events**。
**注意**  
如果为任何生命周期事件显示 **Failed**，请在实例详细信息页上，选择 **View logs** 和/或 **View in EC2**。您可在[排查实例问题](troubleshooting-ec2-instances.md)中找到问题排查提示。

1. 如果要查看有关某个 Amazon EC2 实例的更多信息，请在**实例 ID** 列中选择实例的 ID。

## 查看实例详细信息（CLI）
<a name="instances-view-details-cli"></a>

要使用 AWS CLI 查看实例详细信息，请调用 `get-deployment-instance` 命令或 `list-deployment-instances` 命令。

要查看有关单个实例的详细信息，请调用 [get-deployment-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html) 命令，并指定：
+ 唯一部署 ID。要获取部署 ID，请调用 [list-deployments](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployments.html) 命令。
+ 唯一实例 ID。要获取实例 ID，请调用 [list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) 命令。

要查看部署中使用的实例的 ID 列表，请调用 [list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) 命令，并指定：
+ 唯一部署 ID。要获取部署 ID，请调用 [list-deployments](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployments.html) 命令。
+ （可选）是否仅按实例的部署状态包含特定的实例 ID。（如果未指定，则将列出所有匹配实例的 ID，不管其部署状态如何。）

# CodeDeploy 实例运行状况
<a name="instances-health"></a>

CodeDeploy 监控部署组中实例的运行状况。如果运行正常的实例数小于部署期间已为部署组指定的最小运行正常实例数，则部署将失败。例如，如果 85% 的实例必须在部署期间保持运行正常，且部署组包含 10 个实例，则只要一个实例的部署失败，整个部署都将失败。这是因为，当一个实例脱机以安装最新的应用程序版本时，可用的运行正常的实例计数已降至 90%。一个出现故障的实例加上另一个脱机实例意味着只有 80% 的实例运行正常且可用。 CodeDeploy 将使整个部署失败。

需要牢记的是，为了使整个部署成功，必须满足以下条件：
+ CodeDeploy 能够部署到部署中的每个实例。
+ 到至少一个实例的部署必须成功。也就是说，即使最小正常运行的主机数值为 0，也是到至少一个实例的部署必须成功（即至少有一个实例必须是正常运行的），才能使整个部署成功。

**Topics**
+ [运行状况](#instances-health-status)
+ [关于最小运行正常的实例数](#minimum-healthy-hosts)
+ [关于每个可用区最小运行正常的实例数](#minimum-healthy-hosts-az)

## 运行状况
<a name="instances-health-status"></a>

CodeDeploy 为每个实例分配两个运行状况值：*修订运行状况*和*实例运行状况*。

修订运行状况  
修订运行状况基于实例上当前安装的应用程序修订。它具有以下状态值：  
+ 当前：实例上安装的修订与部署组的上次成功部署的修订匹配。
+ 旧：实例上安装的修订与旧版应用程序匹配。
+ 未知：应用程序修订尚未安装成功到实例上。

实例运行状况  
实例运行状况基于针对实例的部署是否成功。它具有以下值：  
+ 正常：针对实例的上次部署成功。
+ 不正常：尝试将修订部署到实例失败，或修订尚未部署到实例。

CodeDeploy 使用修订运行状况和实例运行状况按以下顺序安排部署到部署组实例的部署：

1. “不正常”实例运行状况。

1. “未知”修订运行状况。

1. “旧”修订运行状况。

1. “当前”修订运行状况。

如果整个部署成功，则将更新修订，并更新部署组的运行状况值来反映最新的部署。
+ 具有成功部署的所有当前实例将保持“当前”状态。否则，它们将变为“未知”状态。
+ 具有成功部署的所有“旧”或“未知”实例将变为“当前”状态。否则，它们将保持“旧”或“未知”状态。
+ 所有具有成功部署的正常实例都将保持“正常”状态。否则，它们将变为“不正常”状态。
+ 所有具有成功部署的不正常实例都将变为“正常”状态。否则，它们将保持“不正常”状态。

如果整个部署失败或停止：
+  CodeDeploy 尝试部署应用程序修订的每个实例都将其实例运行状况设置为正常或不正常，具体取决于该实例的部署尝试是成功还是失败。
+  CodeDeploy 未尝试部署应用程序修订的每个实例都将保留其当前实例运行状况值。
+ 部署组的修订保持不变。

## 关于最小运行正常的实例数
<a name="minimum-healthy-hosts"></a>

所需的最小运行正常实例数在部署配置中进行定义。

**重要**  
在 blue/green 部署期间，部署配置和最低运行正常主机值适用于替换环境中的实例，而不是原始环境中的实例。但是，当原始环境中的实例从负载均衡器取消注册时，只要一个原始实例未能成功取消注册，整个环境就将标记为失败。

CodeDeploy 提供了三种默认部署配置，这些配置具有常用的最低运行状况主机值：


| 默认部署配置名称 | 预定义的最小正常运行主机值 | 
| --- | --- | 
| CodeDeployDefault.OneAtATime | 1 | 
| CodeDeployDefault.HalfAtATime | 50% | 
| CodeDeployDefault.AllAtOnce | 0 | 

在 [在中使用部署配置 CodeDeploy](deployment-configurations.md) 中，您将发现有关默认部署配置的更多信息。

您可以在中创建自定义部署配置 CodeDeploy ，以定义自己的最低运行状况主机值。在使用以下操作时，您可以将这些值定义为整数或百分比：
+ 就像`minimum-healthy-hosts`您在中使用[create-deployment-config](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-config.html)命令一样 AWS CLI。
+ 就`Value`像 CodeDeploy API 中的[MinimumHealthyHosts](https://docs.aws.amazon.com/codedeploy/latest/APIReference/API_MinimumHealthyHosts.html)数据类型一样。
+ 就像你在 CloudFormation 模板[AWS::CodeDeploy::DeploymentConfig](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codedeploy-deploymentconfig.html)中使用`MinimumHealthyHosts`时一样。

CodeDeploy 允许您为部署指定运行正常的实例的最小数量，主要有两个目的：
+ 确定整个部署是成功还是失败。如果应用程序修订已成功部署到至少最小数量的运行正常的实例，则部署将成功。
+ 确定部署期间为允许继续部署而必须运行正常的实例的数量。

您可以实例数或实例总数百分比的形式为部署组指定最小运行正常的实例数。如果您指定百分比，则在部署开始时， CodeDeploy 会将该百分比转换为等值的实例数，将所有小数实例向上舍入。

CodeDeploy 在部署过程中跟踪部署组实例的运行状况，并使用部署中指定的最小运行正常实例数来确定是否继续部署。基本原则是，部署绝对不能导致运行正常的实例数低于您指定的最小数量。此规则的一个例外情况是，当部署组最初具有的运行正常的实例数少于指定的最小运行正常的实例数时。在此情况下，部署过程不会进一步减少运行正常的实例数。

**注意**  
CodeDeploy 将尝试部署到部署组中的所有实例，包括那些当前处于 “已停止” 状态的实例。在计算正常运行的最小主机数过程中，处于停止状态的实例和出现故障的实例的影响相同。如果由于处于停止状态的实例过多而导致部署失败，要解决这种问题，请重启实例或更改实例的标签，以将它们从部署组排除出去。

CodeDeploy 通过尝试将应用程序修订部署到部署组运行状况不佳的实例来启动部署过程。对于每次成功部署，都会将实例的运行状况 CodeDeploy 更改为运行状况良好，然后将其添加到部署组的运行正常的实例中。 CodeDeploy 然后将当前运行正常的实例数与指定的最小运行正常实例数进行比较。
+ 如果运行正常的实例数量小于或等于指定的最小运行正常实例数，则 CodeDeploy 取消部署以确保运行正常的实例数量不会随着部署的增加而减少。
+ 如果运行正常的实例数比指定的最小运行正常实例数至少多一个，则会将应用程序修订版 CodeDeploy 部署到最初的一组运行正常的实例。

如果部署到运行正常的实例失败，则会将该实例的运行状况 CodeDeploy 更改为不健康。随着部署的进展， CodeDeploy 更新当前运行正常的实例数，并将其与指定的最小运行正常实例数进行比较。如果运行正常的实例数量在部署过程中的任何时候降至指定的最小数量，则 CodeDeploy 会停止部署。此做法可防止下一个部署失败的可能性，并减小运行正常的实例数以使其小于指定的最小数量。

**注意**  
确保您指定的最小运行正常的实例数小于部署组中的实例总数。如果您指定百分比值，请记住此值将取整。否则，当部署开始时，运行正常的实例数将小于或等于指定的最小运行正常的实例数，并且 CodeDeploy 将立即使整个部署失败。

CodeDeploy 还使用指定的最小运行正常实例数和实际运行正常的实例数来确定是否以及如何将应用程序修订部署到多个实例。默认情况下，会将应用程序修订 CodeDeploy 部署到尽可能多的实例，而不会出现运行正常的实例数量低于指定的最小运行正常实例数的风险。

要确定应同时部署到的实例数量，请 CodeDeploy 使用以下计算方法：

```
[total-hosts] - [minimum-healthy-hosts] =
        [number-of-hosts-to-deploy-to-at-once]
```

例如：
+ 如果您的部署组有 10 个实例，并且您将运行正常的最小实例数设置为 9，则一次将 CodeDeploy 部署到 1 个实例。
+ 如果您的部署组有 10 个实例，并且您将运行正常的最小实例数设置为 3，则在第一批中同时 CodeDeploy 部署到 7 个实例，然后在第二批中同时部署到其余 3 个实例。
+ 如果您的部署组有 10 个实例，并且您将运行正常的最小实例数设置为 0，则会同时 CodeDeploy 部署到 10 个实例。

**示例**

以下示例假定一个具有 10 个实例的部署组。

最小运行正常的实例数：95%  
CodeDeploy 将最小运行状况良好的实例数四舍五入为 10，这等于运行正常的实例数。如果未将修订部署到任何实例，则整个部署将立即失败。

最小运行正常的实例数：9  
CodeDeploy 一次将修订部署到一个实例。如果部署到任一实例失败，则整体部署将 CodeDeploy 立即失败，因为运行正常的实例数量等于最小运行正常的实例数。此规则的例外情况是，如果最后一个实例失败，部署仍将成功。  
CodeDeploy 继续部署，每次部署一个实例，直到任何部署失败或整体部署完成。如果 10 个部署全都成功，则部署组现在将具有 10 个运行正常的实例。

最小运行正常的实例数：8  
CodeDeploy 一次将修订部署到两个实例。如果其中两个部署失败，则整个部署 CodeDeploy 立即失败。此规则的例外情况是，如果最后一个实例是第二个失败的实例，则部署仍将成功。

最小运行正常的实例数：0  
CodeDeploy 将修订一次部署到整个部署组。至少一个到实例的部署必须成功，整个部署才能成功。如果 0 个实例正常运行，则部署会失败。这是因为如下要求：为了将整个部署标记为成功，在完成整个部署时，至少有一个实例必须是正常运行的，即使最小正常运行的实例数值为 0。

## 关于每个可用区最小运行正常的实例数
<a name="minimum-healthy-hosts-az"></a>

**注意**  
本节交替使用*实例*和*主机*这两个术语来指代 Amazon EC2 实例。

如果您要部署到多个[可用区的](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones)实例，则可以选择启用该[zonal configuration](deployment-configurations-create.md#zonal-config)功能，该功能允许一次部署 CodeDeploy 到一个可用区。

启用此功能后， CodeDeploy 将确保运行正常的主机数量保持在 “每个区域最小运行正常主机数” *和* “最小运行正常主机数” 值之上。如果运行正常的主机数量低于任一值， CodeDeploy 则所有可用区的部署都将失败。

要计算一次部署到的主机数量，请同时 CodeDeploy 使用 “每个区域最少运行正常的主机” 和 “最少运行正常的主机” 值。 CodeDeploy 将使用*较小的*计算方法 `[A]``[B]`，在何处`[A]`和`[B]`是：

```
[A] = [total-hosts] - [min-healthy-hosts] =
        [number-of-hosts-to-deploy-to-at-once]
```

```
[B] = [total-hosts-per-AZ] - [min-healthy-hosts-per-AZ] =
        [number-of-hosts-to-deploy-to-at-once-per-AZ]
```

确定一次要部署到的主机数量后，将按该数量的批次 CodeDeploy 部署到主机，一次部署一个可用区，在区域之间可以选择暂停（或 “烘焙时间”）。

**示例**

如果您的部署配置如下：
+ `[total-hosts]` 是 `200`
+ `[minimum-healthy-hosts]` 是 `160`
+ `[total-hosts-per-AZ]` 是 `100` 
+ `[minimum-healthy-hosts-per-AZ]` 是 `50`

则...
+ `[A]` = `200 - 160 = 40`
+ `[B]` = `100 - 50 = 50`
+ `40` 小于 `50`

因此， CodeDeploy 将立即部署到`40`主机。

在这种情况下，部署展开如下：

1. CodeDeploy 部署到第一个可用区：

   1. CodeDeploy 部署到第一批`40`主机。

   1. CodeDeploy 部署到下一个主`40`机。

   1. CodeDeploy 部署到其余`20`主机。

      到第一个可用区的部署现已完成。

1. （可选） CodeDeploy 等待第一个区域的部署 “烘烤”，具体定义为**监控器持续时间**或**为第一个区域添加监视器持续时间**设置。如果没有问题，请 CodeDeploy 继续。

1. CodeDeploy 部署到第二个可用区：

   1. CodeDeploy 部署到第一批`40`主机。

   1. CodeDeploy 部署到下一个主`40`机。

   1. CodeDeploy 部署到其余`20`主机。

      到第二个也是最后一个可用区的部署现已完成。

要了解区域配置功能以及如何指定每个可用区正常运行主机的最小数量，请参阅[zonal configuration](deployment-configurations-create.md#zonal-config)。