

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

# 教程：使用 CodeDeploy 部署“Hello, World\$1” 带有 CodeDeploy （Windows 服务器）的应用程序
<a name="tutorials-windows"></a>

在本教程中，您将一个网页部署到一个正在将 Internet Information Services（IIS）作为其 Web 服务器运行的 Windows Server Amazon EC2 实例。此网页将显示简单的“Hello，World\$1” 消息。

不是您要找的内容？
+ 要练习部署到 Amazon Linux 或 Red Hat Enterprise Linux（RHEL）Amazon EC2 实例，请参阅[教程：部署 WordPress 到亚马逊 EC2 实例（亚马逊 Linux 或红帽企业 Linux 和 Linux、macOS 或 Unix）](tutorials-wordpress.md)。
+ 要改而部署到本地实例，请参阅[教程：使用 CodeDeploy （Windows 服务器、Ubuntu 服务器或红帽企业 Linux）将应用程序部署到本地实例](tutorials-on-premises-instance.md)。

本教程中的步骤是从 Windows 角度提供的。虽然您可以在运行 Linux、macOS 或 Unix 的本地计算机上完成其中的大部分步骤，但您必须适应涵盖基于 Windows 的目录路径（例如 `c:\temp`）的步骤。另外，如果您要连接到 Amazon EC2 实例，则需要一个客户端应用程序，该应用程序可以通过远程桌面协议（RDP）连接到正在运行 Windows Server 的 Amazon EC2 实例。（默认情况下，Windows 包含 RDP 连接客户端应用程序。）

在开始本教程之前，您必须完成中的先决条件[入门 CodeDeploy](getting-started-codedeploy.md)，包括配置您的用户、安装或升级 AWS CLI，以及创建 IAM 实例配置文件和服务角色。

**Topics**
+ [步骤 1：启动 Windows Server Amazon EC2 实例](tutorials-windows-launch-instance.md)
+ [步骤 2：将您的源内容配置为部署到 Windows Server Amazon EC2 实例](tutorials-windows-configure-content.md)
+ [步骤 3：将“Hello, World\$1” 应用程序上传到 Amazon S3](tutorials-windows-upload-application.md)
+ [步骤 4：部署 Hello World 应用程序](tutorials-windows-deploy-application.md)
+ [步骤 5：更新和重新部署“Hello, World\$1” 应用程序](tutorials-windows-update-and-redeploy-application.md)
+ [步骤 6：清理“Hello，World\$1” 应用程序和相关资源](tutorials-windows-clean-up.md)

# 步骤 1：启动 Windows Server Amazon EC2 实例
<a name="tutorials-windows-launch-instance"></a>

要使用部署 Hello World 应用程序 CodeDeploy，你需要一个运行 Windows Server 的 Amazon EC2 实例。

按照[为创建一个 Amazon EC2 实例 CodeDeploy](instances-ec2-create.md)中的说明进行操作。当您准备好向实例分配 Amazon EC2 实例标签时，请确保指定标签键 **Name** 和标签值 **CodeDeployDemo**。（如果您指定不同的标记键或标签值，则[步骤 4：部署 Hello World 应用程序](tutorials-windows-deploy-application.md)中的说明可能会产生意外结果。）

在您启动 Amazon EC2 实例之后，请返回到此页，并继续下一部分。请勿继续[使用创建应用程序 CodeDeploy](applications-create.md)作为下一步骤。

## 连接到您的 Amazon EC2 实例
<a name="tutorials-windows-launch-instance-connect"></a>

启动 Amazon EC2 实例之后，请按照说明来练习连接操作。

**注意**  
在这些说明中，我们假定您运行 Windows 和 Windows Desktop Connection 客户端应用程序。有关信息，请参阅[使用 RDP 连接到您的 Windows 实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/connecting_to_windows_instance.html)。对于其他操作系统或其他 RDP 连接客户端应用程序，您可能需要相应修改这些说明。

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

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

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

1. 选择**连接**。

1. 选择**获取密码**，然后选择**选择文件**。

1. 浏览并选择与 Windows Server Amazon EC2 实例关联的 Amazon EC2 实例密钥对，然后选择**打开**。

1. 选择 **Decrypt Password**。记录显示的密码。您在步骤 10 中需要它。

1. 选择 **Download Remote Desktop File**，然后打开文件。

1. 如果系统提示您连接（即使无法确定远程连接的发布程序），请继续。

1. 键入您在步骤 7 中记录的密码，然后继续。（如果 RDP 连接客户端应用程序提示您输入用户名，请键入 **Administrator**。）

1. 如果系统提示您连接（即使无法验证远程计算机的身份），请继续。

1. 在连接之后，将显示运行 Windows Server 的 Amazon EC2 实例的桌面。

1. 现在您可以断开 Amazon EC2 实例的连接。
**警告**  
请不要停止或终止实例。否则， CodeDeploy 无法对其进行部署。

## 添加允许 HTTP 流量传输到您的 Windows Server Amazon EC2 实例的入站规则
<a name="tutorials-windows-launch-instance-add-inbound-rule"></a>

下一步是确认您的 Amazon EC2 实例具有开放的 HTTP 端口，以便您可以在浏览器中查看在您的 Windows Server Amazon EC2 实例上部署的网页。

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

1. 选择**实例**，然后选择您的实例。

1. 在**描述**选项卡上的**安全组**下，选择**查看入站规则**。

   您应在安全组中看到类似如下的规则列表：

   ```
   Security Groups associated with i-1234567890abcdef0
    Ports     Protocol     Source     launch-wizard-N
    22        tcp          0.0.0.0/0          ✔
   ```

1.  在**安全组**下，为您的 Amazon EC2 实例选择安全组。其可能被命名为 **launch-wizard-*N***。名称中的 ***N*** 是创建实例时分配到您安全组的编号。

    选择**入站**选项卡。如果实例的安全组配置正确，则应看到一条具有以下值的规则：
   + **类型**：HTTP
   + **协议**：TCP
   + **端口范围**：80
   + **来源**：0.0.0.0/0

1.  如果您没有看到包含这些值的规则，请使用[向安全组添加规则](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html#adding-security-group-rule)中的过程将其添加到新的安全规则中。

# 步骤 2：将您的源内容配置为部署到 Windows Server Amazon EC2 实例
<a name="tutorials-windows-configure-content"></a>

现在可以配置您的应用程序的源内容了，这样您就有可以部署到 Amazon EC2 实例的内容了。在此教程中，您会将一个网页部署到运行 Windows Server 的 Amazon EC2 实例，后者将 Internet Information Services（IIS）作为其 Web 服务器运行。此网页将简单地显示“Hello，World\$1” 消息。

**Topics**
+ [创建网页](#tutorials-windows-configure-content-download-code)
+ [创建运行应用程序的脚本](#tutorials-windows-configure-content-create-scripts)
+ [添加应用程序规范文件](#tutorials-windows-configure-content-add-appspec-file)

## 创建网页
<a name="tutorials-windows-configure-content-download-code"></a>

1. 在您的 `HelloWorldApp` 文件夹中创建一个名为 `c:\temp` 的子目录（子文件夹），然后切换到该文件夹。

   ```
   mkdir c:\temp\HelloWorldApp
   cd c:\temp\HelloWorldApp
   ```
**注意**  
您不必使用 `c:\temp` 作为位置或 `HelloWorldApp` 作为子文件夹名称。如果您使用不同的位置或子文件夹名称，请确保在本教程中通篇使用它。

1. 使用文本编辑器在文件夹内创建一个文件。将文件命名为 `index.html`。

   ```
   notepad index.html
   ```

1. 将以下 HTML 代码添加到该文件中，然后保存文件。

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #0188cc;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello, World!</h1></div>
     <div align="center"><h2>You have successfully deployed an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## 创建运行应用程序的脚本
<a name="tutorials-windows-configure-content-create-scripts"></a>

接下来，您将创建一个用于在 CodeDeploy 目标 Amazon EC2 实例上设置 Web 服务器的脚本。

1. 在保存 `index.html` 文件的相同子文件夹中，使用文本编辑器创建另一个文件。将文件命名为 `before-install.bat`。

   ```
   notepad before-install.bat
   ```

1. 将以下批处理脚本代码添加到该文件中，然后保存文件。

   ```
   REM Install Internet Information Server (IIS).
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Import-Module -Name ServerManager
   c:\Windows\Sysnative\WindowsPowerShell\v1.0\powershell.exe -Command Install-WindowsFeature Web-Server
   ```

## 添加应用程序规范文件
<a name="tutorials-windows-configure-content-add-appspec-file"></a>

接下来，除了网页和批处理脚本AppSpec 文件之外，您还将添加应用程序规范文件（文件）。该 AppSpec 文件是一个 [YAML](http://www.yaml.org) 格式的文件，用于以下用途： CodeDeploy 
+ 将应用程序修订中的源文件映射到其在实例上的目的地。
+ 指定在部署期间要在实例上运行的脚本。

 AppSpec 文件必须命名`appspec.yml`。它必须放置在应用程序源代码的根文件夹中。

1. 在保存 `index.html` 和 `before-install.bat` 文件的相同子文件夹中，使用文本编辑器创建另一个文件。将文件命名为 `appspec.yml`。

   ```
   notepad appspec.yml
   ```

1. 将以下 YAML 代码添加到该文件中，然后保存该文件。

   ```
   version: 0.0
   os: windows
   files:
     - source: \index.html
       destination: c:\inetpub\wwwroot
   hooks:
     BeforeInstall:
       - location: \before-install.bat
         timeout: 900
   ```

CodeDeploy 将使用此 AppSpec 文件将应用程序源代码根文件夹中的`index.html`文件复制到目标 Amazon EC2 实例上的`c:\inetpub\wwwroot`文件夹。在部署期间， CodeDeploy 将在**BeforeInstall**部署生命周期事件期间在目标 Amazon EC2 实例上运行`before-install.bat`批处理脚本。如果此脚本运行时间超过 900 秒（15 分钟），则 CodeDeploy 会停止部署并将对 Amazon EC2 实例的部署标记为失败。

有关这些设置的更多信息，请参阅 [CodeDeploy AppSpec 文件引用](reference-appspec-file.md)。

**重要**  
此文件中各项之间的空格的位置和数量很重要。如果间距不正确， CodeDeploy 将引发可能难以调试的错误。有关更多信息，请参阅 [AppSpec 文件间距](reference-appspec-file.md#reference-appspec-file-spacing)。

# 步骤 3：将“Hello, World\$1” 应用程序上传到 Amazon S3
<a name="tutorials-windows-upload-application"></a>

现在，您将准备源内容并将其上传到 CodeDeploy 可以部署的地方。以下说明向您演示如何预置 Amazon S3 存储桶、为存储桶准备应用程序修订的文件、对修订的文件打包，然后将修订推送到存储桶。

**注意**  
尽管本教程中没有介绍，但您可以使用 CodeDeploy 将应用程序从 GitHub 存储库部署到实例。有关更多信息，请参阅 [CodeDeploy 与集成 GitHub](integrations-partners-github.md)。

**Topics**
+ [预置 Amazon S3 存储桶](#tutorials-windows-upload-application-create-s3-bucket)
+ [为存储桶准备应用程序的文件](#tutorials-windows-upload-application-prepare-application-files)
+ [将应用程序的文件打包到单个存档文件并推送此存档文件](#tutorials-windows-upload-application-bundle-and-push-archive)

## 预置 Amazon S3 存储桶
<a name="tutorials-windows-upload-application-create-s3-bucket"></a>

在 Amazon S3 中创建存储容器或*存储桶*，或者使用现有的存储桶。确保您可将修订上传到存储桶，并确保部署中使用的 Amazon EC2 实例可从存储桶下载修订。

您可以使用 AWS CLI、亚马逊 S3 控制台或 Amazon S3 APIs 来创建 Amazon S3 存储桶。创建存储桶后，请确保提供对存储桶和您的 CodeDeploy 用户的访问权限。

**注意**  
在 Amazon S3 中，所有 AWS 账户的存储桶名称必须是唯一的。如果您无法使用 **amzn-s3-demo-bucket**，请尝试其他存储桶名称，例如 **amzn-s3-demo-bucket** 后跟短划线和您的姓名首字母或其他某个唯一标识符。之后，请确保将此教程中的任何 **amzn-s3-demo-bucket** 替换为您的存储桶名称。  
Amazon S3 存储桶必须在启动目标 Amazon EC2 实例的同一 AWS 区域创建。例如，如果您在美国东部（弗吉尼亚州北部）区域创建存储桶，则您的目标 Amazon EC2 实例必须在美国东部（弗吉尼亚州北部）区域启动。

**Topics**
+ [创建 Amazon S3 存储桶（CLI）](#tutorials-windows-upload-application-create-s3-bucket-cli)
+ [创建 Amazon S3 存储桶（控制台）](#tutorials-windows-upload-application-create-s3-bucket-console)
+ [向 Amazon S3 存储桶和您的 AWS 账户授予权限](#tutorials-windows-upload-application-create-s3-bucket-grant-permission)

### 创建 Amazon S3 存储桶（CLI）
<a name="tutorials-windows-upload-application-create-s3-bucket-cli"></a>

调用 **mb** 命令以创建一个名为 **amzn-s3-demo-bucket** 的 Amazon S3 存储桶：

```
aws s3 mb s3://amzn-s3-demo-bucket --region region
```

### 创建 Amazon S3 存储桶（控制台）
<a name="tutorials-windows-upload-application-create-s3-bucket-console"></a>

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在 Amazon S3 控制台中，选择**创建存储桶**。

1. 在 **Bucket name** 框中，键入存储桶的名称。

1. 在 **Region** 列表中，选择目标区域，然后选择 **Create**。

### 向 Amazon S3 存储桶和您的 AWS 账户授予权限
<a name="tutorials-windows-upload-application-create-s3-bucket-grant-permission"></a>

您必须拥有上传到 Amazon S3 存储桶的权限。您可以通过 Amazon S3 存储桶策略指定这些权限。例如，在以下 Amazon S3 存储桶策略中，使用通配符 (\$1) 允许 AWS 账户将文件上传`111122223333`到 Amazon S3 存储桶中名为`amzn-s3-demo-bucket`的任何目录：

```
{
    "Statement": [
        {
            "Action": [
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "111122223333"
                ]
            }
        }
    ]
}
```

要查看您的 AWS 账户 ID，请参阅[查找您的 AWS 账户 ID](https://docs.aws.amazon.com/IAM/latest/UserGuide/console_account-alias.html#FindingYourAWSId)。

现在是验证 Amazon S3 存储桶是否允许来自每个参与的 Amazon EC2 实例的下载请求的好时机。您可以通过 Amazon S3 存储桶策略来指定这一点。例如，在下面的 Amazon S3 存储桶策略中，使用通配符（\$1）允许任何附有包含 ARN `arn:aws:iam::444455556666:role/CodeDeployDemo` 的 IAM 实例配置文件的 Amazon EC2 实例，从名为 `amzn-s3-demo-bucket` 的 Amazon S3 存储桶中的任何目录下载文件：

```
{
    "Statement": [
        {
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::444455556666:role/CodeDeployDemo"
                ]
            }
        }
    ]
}
```

有关如何生成和附加 Amazon S3 存储桶策略的信息，请参阅[存储桶策略示例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)。

您在中创建的 CodeDeploy 管理员用户还[步骤 1：设置](getting-started-setting-up.md)必须有权将修订版上传到 Amazon S3 存储桶。指定这一点的一种方法是通过 IAM policy（添加到用户的权限集）或 IAM 角色（允许用户代入）。以下 IAM policy 允许用户将修订上传到名为 `amzn-s3-demo-bucket` 的 Amazon S3 存储桶中的任意位置：

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

****  

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

------

有关如何创建 IAM policy 的信息，请参阅《IAM 用户指南》**中的[创建 IAM policy](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html)。有关向权限集添加策略的信息，请参阅《AWS IAM Identity Center 用户指南》**中的[创建权限集](https://docs.aws.amazon.com/singlesignon/latest/userguide/howtocreatepermissionset.html)。

## 为存储桶准备应用程序的文件
<a name="tutorials-windows-upload-application-prepare-application-files"></a>

确保网页、 AppSpec 文件和脚本在开发计算机上按如下方式组织：

```
c:\
  |-- temp\
        |--HelloWorldApp\
             |-- appspec.yml
             |-- before-install.bat
             |-- index.html
```

## 将应用程序的文件打包到单个存档文件并推送此存档文件
<a name="tutorials-windows-upload-application-bundle-and-push-archive"></a>

将这些文件打包到一个存档文件（称为应用程序*修订*）。

**注意**  
将对象存储在存储桶中以及将应用程序修订传入和传出存储桶可能需支付费用。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

1. 在开发计算机上，切换到这些文件存储到的文件夹：

   ```
   cd c:\temp\HelloWorldApp
   ```
**注意**  
如果您未切换到此文件夹，则将在您的当前文件夹中启动文件打包。例如，如果您当前的文件夹是 `c:\temp` 而非 `c:\temp\HelloWorldApp`，则打包操作将从 `c:\temp` 文件夹中的文件和子文件夹开始，这可能包括 `HelloWorldApp` 子文件夹之外的内容。

1. 调用**create-application**命令注册一个名**HelloWorld\$1App**为的新应用程序 CodeDeploy：

   ```
   aws deploy create-application --application-name HelloWorld_App
   ```

1. 调用 p CodeDeploy [ush 命令将](https://docs.aws.amazon.com/cli/latest/reference/deploy/push.html)文件捆绑在一起，将修订上传到 Amazon S3，并在其中注册 CodeDeploy 有关已上传修订的信息，所有这些操作只需一个操作即可。

   ```
   aws deploy push --application-name HelloWorld_App --s3-location s3://amzn-s3-demo-bucket/HelloWorld_App.zip --ignore-hidden-files
   ```

   此命令将当前目录中的文件（不包括任何隐藏文件）捆绑到名为的单个存档文件中`HelloWorld_App.zip`，将修订版上传到**amzn-s3-demo-bucket**存储桶，并在其中注册 CodeDeploy 有关已上传修订的信息。

# 步骤 4：部署 Hello World 应用程序
<a name="tutorials-windows-deploy-application"></a>

现在，您将部署已上传到 Amazon S3 的示例 Hello World 应用程序修订。您可以使用 AWS CLI 或 CodeDeploy 控制台来部署修订版并监控部署进度。成功部署应用程序修订之后，可以检查结果。

**Topics**
+ [使用部署您的应用程序修订版 CodeDeploy](#tutorials-windows-deploy-application-create-deployment)
+ [监控您的部署并排除故障](#tutorials-windows-deploy-application-monitor)
+ [验证您的部署](#tutorials-windows-deploy-application-verify)

## 使用部署您的应用程序修订版 CodeDeploy
<a name="tutorials-windows-deploy-application-create-deployment"></a>

 您可以使用 CLI 或控制台部署应用程序。

**Topics**
+ [部署您的应用程序修订（CLI）](#tutorials-windows-deploy-application-create-deployment-cli)
+ [部署应用程序修订（控制台）](#tutorials-windows-deploy-application-create-deployment-console)

### 部署您的应用程序修订（CLI）
<a name="tutorials-windows-deploy-application-create-deployment-cli"></a>

1. 首先，部署需要部署组。不过，在创建部署组之前，您需要服务角色 ARN。服务角色是 IAM 角色，该角色授予某个服务代表您执行操作的权限。在这种情况下，服务角色授予访问您的 Amazon EC2 实例以扩展（读取）其 Amazon EC2 实例标签的 CodeDeploy 权限。

   您应该已经按照[创建服务角色（CLI）](getting-started-create-service-role.md#getting-started-create-service-role-cli)中的说明创建了服务角色。要获取服务角色的 ARN，请参阅[获取服务角色 ARN（CLI）](getting-started-create-service-role.md#getting-started-get-service-role-cli)。

1. 现在您已拥有此 ARN，请调用 **create-deployment-group** 命令，使用名为 **CodeDeployDemo** 的 Amazon EC2 实例标签和名为 **CodeDeployDefault.OneAtATime** 的部署配置创建一个与名为 **HelloWorld\$1App** 的应用程序相关联的名为 **HelloWorld\$1DepGroup** 的部署组（具有指定的服务角色 ARN）：

   ```
   aws deploy create-deployment-group --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --deployment-config-name CodeDeployDefault.OneAtATime --ec2-tag-filters Key=Name,Value=CodeDeployDemo,Type=KEY_AND_VALUE --service-role-arn serviceRoleARN
   ```
**注意**  
该[create-deployment-group](https://docs.aws.amazon.com/cli/latest/reference/deploy/create-deployment-group.html)命令支持创建触发器，从而向主题订阅者发送有关部署和实例中指定事件的 Amazon SNS 通知。该命令还支持自动回滚部署和设置警报以在满足 Amazon CloudWatch 警报中的监控阈值时停止部署的选项。本教程中不包含用于这些操作的命令。

1. 在创建部署之前，部署组中的实例必须安装 CodeDeploy 代理。您可以使用以下命令通过 AWS Systems Manager 从命令行安装代理：

   ```
   aws ssm create-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo --parameters action=Install,name=AWSCodeDeployAgent --schedule-expression "cron(0 2 ? * SUN *)" 
   ```

   此命令在 Systems Manager 状态管理器中创建关联，该关联将安装 CodeDeploy 代理，然后在每个星期日凌晨 2:00 尝试对其进行更新。有关 CodeDeploy 代理的更多信息，请参阅[使用代 CodeDeploy 理](https://docs.aws.amazon.com/codedeploy/latest/userguide/codedeploy-agent.html)。有关 Systems Manager 的详细信息，请参阅[什么是 AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)。

1. 现在调用 **create-deployment** 命令，使用名为 **amzn-s3-demo-bucket** 的存储桶中名为 **HelloWorld\$1App.zip** 的应用程序修订，创建一个与名为 **HelloWorld\$1App** 的应用程序、名为 **CodeDeployDefault.OneAtATime** 的部署配置、名为 **HelloWorld\$1DepGroup** 的部署组关联的部署。

   ```
   aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
   ```

### 部署应用程序修订（控制台）
<a name="tutorials-windows-deploy-application-create-deployment-console"></a>

1. 在使用 CodeDeploy 控制台部署应用程序修订版之前，您需要一个服务角色 ARN。服务角色是 IAM 角色，该角色授予某个服务代表您执行操作的权限。在这种情况下，服务角色授予访问您的 Amazon EC2 实例以扩展（读取）其 Amazon EC2 实例标签的 CodeDeploy 权限。

   您应该已经按照[创建服务角色（控制台）](getting-started-create-service-role.md#getting-started-create-service-role-console)中的说明创建了服务角色。要获取服务角色的 ARN，请参阅[获取服务角色 ARN（控制台）](getting-started-create-service-role.md#getting-started-get-service-role-console)。

1. 现在您已获得 ARN，您可以使用 CodeDeploy 控制台来部署您的应用程序修订版。

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

1. 在导航窗格中，展开**部署**，然后选择**应用程序**。

1. 选择 **HelloWorld\$1App**。

1. 在**部署组**选项卡中，选择**创建部署组**。

1. 在 **Deployment group name（部署组名称）**中，输入 **HelloWorld\$1DepGroup**。

1. 在**服务角色**中，选择服务角色的名称。

1. 在**部署类型**中，选择**就地**。

1. 在**环境配置**中，选择 **Amazon EC2 实例**。

1. 在使用的 **Agent 配置**中 AWS Systems Manager，保留默认值。

1. 在**键**中，输入 **Name**。

1. 在**值**中，输入 **CodeDeployDemo**。

1. 在**部署配置**中，选择**CodeDeployDefault。 OneAtATime**。

1. 在**负载均衡器**中，清除**启用负载均衡**。

1. 选择 **Create deployment group（创建部署组）**。

1. 选择**创建部署**。

1. 在**部署组**中，选择 **HelloWorld\$1 DepGroup**

1. 在**修订类型**中，选择**我的应用程序将存储在 Amazon S3** 中，然后在**修订位置**中输入已上传到 Amazon S3 的示例 Hello World 应用程序修订的位置。获取位置：

   1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

   1. 在存储桶列表中，选择 **amzn-s3-demo-bucket**（或您将应用程序修订上传到的存储桶的名称）。

   1. 在对象列表中，选择 **HelloWorld\$1App.zip**。

   1. 在 **Overview（概述）**选项卡上，选择 **Copy path（复制路径）**。

   1. 返回 CodeDeploy 控制台，然后在 “**修订位置**” 中粘贴 “**链接**” 字段值。

1. 对于 **Revision file type（修订文件类型）**，选择 **.zip**。

1. （可选）在 **Deployment description（部署描述）**中输入注释。

1. 选择 **Create deployment（创建部署）**。有关您新创建的部署的信息将显示在 **Deployments** 页上。

## 监控您的部署并排除故障
<a name="tutorials-windows-deploy-application-monitor"></a>

使用 AWS CLI 或控制台监控您的部署并对其进行故障排除。

**Topics**
+ [监视您的部署并排除故障（CLI）](#tutorials-windows-deploy-application-monitor-cli)
+ [监视您的部署和故障排除（控制台）](#tutorials-windows-deploy-application-monitor-console)

### 监视您的部署并排除故障（CLI）
<a name="tutorials-windows-deploy-application-monitor-cli"></a>

1. 针对名为 **HelloWorld\$1App** 的应用程序和名为 **HelloWorld\$1DepGroup** 的部署组调用 **list-deployments** 命令，以获取部署的 ID：

   ```
   aws deploy list-deployments --application-name HelloWorld_App --deployment-group-name HelloWorld_DepGroup --query "deployments" --output text
   ```

1. 通过部署 ID 调用 **get-deployment** 命令：

   ```
   aws deploy get-deployment --deployment-id deploymentID --query "deploymentInfo.status" --output text
   ```

1. 该命令将返回部署的整体状态。如果成功，该值将为 `Succeeded`。

   如果整体状态为 `Failed`，则您可以调用诸如 [list-deployment-instances](https://docs.aws.amazon.com/cli/latest/reference/deploy/list-deployment-instances.html) 和 [get-deployment-instance](https://docs.aws.amazon.com/cli/latest/reference/deploy/get-deployment-instance.html) 这样的命令来排除故障。有关更多故障排除选项，请参阅[分析日志文件以调查针对实例的部署失败](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)。

### 监视您的部署和故障排除（控制台）
<a name="tutorials-windows-deploy-application-monitor-console"></a>

在 CodeDeploy 控制台的 “**部署**” 页面上，您可以在 “状态” 列中监控部署的**状态**。

要获取有关部署的详细信息（特别是在 **Status** 列值为 **Succeeded** 之外的任何值的情况下），请执行以下操作：

1. 在**部署**表中，选择您的部署 ID。部署失败后，部署的详细信息页中将显示描述失败原因的消息。

1. 将显示有关部署实例的更多信息。部署失败之后，您可以确定在哪些 Amazon EC2 实例上失败以及部署在哪个步骤失败。

1. 如果您需要执行进一步的故障排除，可以使用类似于 [使用 CodeDeploy 查看实例详细信息](instances-view-details.md) 的技巧。您还可以分析有关 Amazon EC2 实例的部署日志文件。有关更多信息，请参阅 [分析日志文件以调查针对实例的部署失败](troubleshooting-ec2-instances.md#troubleshooting-deploy-failures)。

## 验证您的部署
<a name="tutorials-windows-deploy-application-verify"></a>

部署成功后，请验证您的安装是否正常工作。使用 Amazon EC2 实例的公有 DNS 地址，在 Web 浏览器中查看网页。（要获取公有 DNS 值，请在 Amazon EC2 控制台中，选择 Amazon EC2 实例，然后在**描述**选项卡上，查找**公有 DNS** 的值。）

例如，如果 Amazon EC2 实例的公有 DNS 地址为 **ec2-01-234-567-890.compute-1.amazonaws.com**，则您可以使用以下 URL：

```
http://ec2-01-234-567-890.compute-1.amazonaws.com
```

如果成功，您应该看到 Hello, World\$1 网页。

# 步骤 5：更新和重新部署“Hello, World\$1” 应用程序
<a name="tutorials-windows-update-and-redeploy-application"></a>

现在，您已经成功部署了应用程序修订版，请在开发计算机上更新网页的代码，然后使用 CodeDeploy 来重新部署网站。重新部署后，您应该可以在 Amazon EC2 实例上看到更改。

**Topics**
+ [修改网页](#tutorials-windows-update-and-redeploy-application-modify-code)
+ [重新部署站点](#tutorials-windows-update-and-redeploy-application-deploy-updates)

## 修改网页
<a name="tutorials-windows-update-and-redeploy-application-modify-code"></a>

1. 转到 `c:\temp\HelloWorldApp` 子文件夹并使用文本编辑器修改 `index.html` 文件：

   ```
   cd c:\temp\HelloWorldApp
   notepad index.html
   ```

1. 修订 `index.html` 文件的内容，以更改网页的背景颜色和一些文本，然后保存该文件：

   ```
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
   <html>
   <head>
     <title>Hello Again, World!</title>
     <style>
       body {
         color: #ffffff;
         background-color: #66cc00;
         font-family: Arial, sans-serif;  
         font-size:14px;
       }
     </style>
   </head>
   <body>
     <div align="center"><h1>Hello Again, World!</h1></div>
     <div align="center"><h2>You have successfully deployed a revision of an application using CodeDeploy</h2></div>
     <div align="center">
       <p>What to do next? Take a look through the <a href="https://aws.amazon.com/codedeploy">CodeDeploy Documentation</a>.</p>
     </div>
   </body>
   </html>
   ```

## 重新部署站点
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates"></a>

现在，您已经修改了代码，请使用 Amazon S3 CodeDeploy 并重新部署网页。

将更改打包并上传到 Amazon S3，如[将应用程序的文件打包到单个存档文件并推送此存档文件](tutorials-windows-upload-application.md#tutorials-windows-upload-application-bundle-and-push-archive)中所述。（在按照这些说明操作时，您不需要创建新的应用程序。） 为修订提供与之前一样的密钥（**HelloWorld\$1App.zip**）。将其上传到之前创建的同一个 Amazon S3 存储桶（例如，**amzn-s3-demo-bucket**）。

使用 AWS CLI 或 CodeDeploy 控制台重新部署站点。

**Topics**
+ [重新部署站点（CLI）](#tutorials-windows-update-and-redeploy-application-deploy-updates-cli)
+ [重新部署站点（控制台）](#tutorials-windows-update-and-redeploy-application-deploy-updates-console)

### 重新部署站点（CLI）
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-cli"></a>

现在调用 **create-deployment** 命令，再次使用名为 **HelloWorld\$1App** 的应用程序、名为 **CodeDeployDefault.OneAtATime** 的部署配置、名为 **HelloWorld\$1DepGroup** 的部署组以及名为 **amzn-s3-demo-bucket** 的存储桶中名为 **HelloWorld\$1App.zip** 的修订，基于上传的修订创建部署。

```
 aws deploy create-deployment --application-name HelloWorld_App --deployment-config-name CodeDeployDefault.OneAtATime --deployment-group-name HelloWorld_DepGroup --s3-location bucket=amzn-s3-demo-bucket,bundleType=zip,key=HelloWorld_App.zip
```

您可以检查新部署的状态，如[监控您的部署并排除故障](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor)中所述。

重新部署网站 CodeDeploy 后，请在 Web 浏览器中重新访问该站点，以验证网页上的背景颜色和文本是否已更改。（您可能需要刷新浏览器。） 如果背景颜色和文本已更改，那么恭喜！您已经修改并重新部署了站点！

### 重新部署站点（控制台）
<a name="tutorials-windows-update-and-redeploy-application-deploy-updates-console"></a>

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

1. 在导航窗格上，选择**应用程序**。

1. 在 “**应用程序**” 列表中，选择 **HelloWorld\$1App**。

1. 在**部署**选项卡中，选择**创建部署**。

   1. 在**部署组**列表中，选择 **HelloWorld\$1 DepGroup**。

   1.  在**修订位置**中，输入您的修订的 Amazon S3 链接。

      要查找链接值，请执行以下操作：

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

         浏览到并打开 **amzn-s3-demo-bucket**，然后在 Amazon S3 控制台中选择您的修订 **HelloWorld\$1App.zip**。

      1. 如果**属性**窗格在 Amazon S3 控制台中不可见，则选择**属性**按钮。

      1. 在**属性**窗格中，复制**链接**字段的值。

      1. 返回 CodeDeploy 控制台，然后将链接粘贴到 “**修订版” 位置**。

   1. 在**修订文件类型**中，如果出现指示无法检测文件类型的消息，则选择 **.zip**。

   1. 保留**部署描述**为空。

   1. **展开**部署组覆盖**在**部署配置**列表中，选择CodeDeployDefault。 OneAtATime**，然后选择**创建部署**。

      您可以检查部署的状态，如[监控您的部署并排除故障](tutorials-windows-deploy-application.md#tutorials-windows-deploy-application-monitor)中所述。

      重新部署网站 CodeDeploy 后，请在 Web 浏览器中重新访问该站点，以验证网页上的背景颜色和文本是否已更改。（您可能需要刷新浏览器。） 如果背景颜色和文本已更改，那么恭喜！您已经修改并重新部署了站点！

# 步骤 6：清理“Hello，World\$1” 应用程序和相关资源
<a name="tutorials-windows-clean-up"></a>

您现在已成功更新“Hello, World\$1” 代码并已重新部署站点。要避免为完成此教程而创建的资源持续产生费用，您应删除：
+ 任何 CloudFormation 堆栈（或终止任何 Amazon EC2 实例，如果您是在外部创建的 CloudFormation）。
+ 任何 Amazon S3 存储桶。
+  CodeDeploy 中的 `HelloWorld_App` 应用程序。
+  CodeDeploy 代理的 AWS Systems Manager 州经理协会。

你可以使用 AWS CLI、、、Amazon S3、Amazon EC2 和 CodeDeploy 控制台，或者 AWS APIs 来执行清理。 CloudFormation

**Topics**
+ [使用清除资源（CLI）](#tutorials-windows-clean-up-cli)
+ [清除资源（控制台）](#tutorials-windows-clean-up-console)
+ [接下来做什么？](#tutorials-windows-clean-up-whats-next)

## 使用清除资源（CLI）
<a name="tutorials-windows-clean-up-cli"></a>

1. 如果您在本教程中使用了 CloudFormation 堆栈，请通过对名为的堆栈调用**delete-stack**命令来删除堆栈**CodeDeployDemoStack**。这将终止所有附带的 Amazon EC2 实例并删除所有最初由该堆栈创建的附带 IAM 角色。

   ```
   aws cloudformation delete-stack --stack-name CodeDeployDemoStack
   ```

1. 要删除 Amazon S3 存储桶，请使用 **--recursive** 开关针对名为 **rm** 的存储桶调用 **amzn-s3-demo-bucket** 命令。这将删除存储桶以及该存储桶中的所有对象。

   ```
   aws s3 rm s3://amzn-s3-demo-bucket --recursive --region region
   ```

1. 要从中删除`HelloWorld_App`应用程序 CodeDeploy，请调用**delete-application**命令。这将删除应用程序的所有关联部署组记录和部署记录。

   ```
   aws deploy delete-application --application-name HelloWorld_App
   ```

1. 要删除 Systems Manager 状态管理器关联，请调用 **delete-association** 命令。

   ```
   aws ssm delete-association --assocation-id association-id
   ```

   你可以*association-id*通过调用**describe-association**命令来获取。

   ```
   aws ssm describe-association --name AWS-ConfigureAWSPackage --targets Key=tag:Name,Values=CodeDeployDemo
   ```

1. 如果您未在本教程中使用 CloudFormation 堆栈，请调用**terminate-instances**命令终止您手动创建的 Amazon EC2 实例。提供要终止的 Amazon EC2 实例的 ID。

   ```
   aws ec2 terminate-instances --instance-ids instanceId
   ```

## 清除资源（控制台）
<a name="tutorials-windows-clean-up-console"></a>

如果您在本教程中使用了我们的 CloudFormation 模板，请删除关联的 CloudFormation 堆栈。

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/cloudformat](https://console.aws.amazon.com/cloudformation/) ion 上打开 CloudFormation 控制台。

1. 在搜索框中，键入 CloudFormation 堆栈名称（例如，**CodeDeployDemoStack**）。

1. 选中堆栈名称旁边的框。

1. 在 **Actions** 菜单中，选择 **Delete Stack**。这将删除堆栈，终止所有附带的 Amazon EC2 实例，并删除所有附带的 IAM 角色。

要终止您在 CloudFormation 堆栈之外创建的 Amazon EC2 实例，请执行以下操作：

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

1. 在 **Instances** 区域中，选择 **Instances**。

1. 在搜索框中，键入要终止的 Amazon EC2 实例的名称，然后按 **Enter**。

1. 选择您的 Amazon EC2 实例。

1. 选择 **Actions**，指向 **Instance State**，然后选择 **Terminate**。在系统提示时，选择 **Yes, Terminate**。对任何其他 Amazon EC2 实例重复这些步骤。

要删除 Amazon S3 存储桶，请执行以下步骤：

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

1. 在存储桶列表中，浏览到并选择 Amazon S3 存储桶的名称（例如，**amzn-s3-demo-bucket**）。

1. 您必须先删除存储桶的内容，然后才能删除存储桶。选择存储桶中的所有文件（如 **HelloWorld\$1App.zip**）。在 **Actions** 菜单中，选择 **Delete**。在提示确认删除时，选择 **OK**。

1. 在清空存储桶后，可以删除存储桶。在存储桶列表中，选择存储桶的行（而不是存储桶名称）。选择 **Delete bucket**，当系统提示进行确认时，选择 **OK**。

要从中删除`HelloWorld_App`应用程序，请执行 CodeDeploy以下操作：

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

1. 在导航窗格中，展开**部署**，然后选择**应用程序**。

   

1. 选择 **`HelloWorld_App`**。

1. 选择**删除应用程序**。

1. 当系统提示时，输入 **Delete**，然后选择**删除**。

要删除 Systems Manager 状态管理器关联，请执行以下操作：

1. 在 https://console.aws.amazon.com /systems- AWS Systems Manager manager 上打开控制台。

1. 在导航窗格中，选择**状态管理器**。

1. 选择您创建的关联，然后选择**删除**。

## 接下来做什么？
<a name="tutorials-windows-clean-up-whats-next"></a>

如果您已到达这里，则表示您已成功完成部署 CodeDeploy。恭喜您！