

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

# 步骤 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 有关已上传修订的信息。