

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

# 步骤 3：将您的 WordPress 应用程序上传到亚马逊 S3
<a name="tutorials-wordpress-upload-application"></a>

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

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

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

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

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

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

**注意**  
在 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-wordpress-upload-application-create-s3-bucket-cli)
+ [创建 Amazon S3 存储桶（控制台）](#tutorials-wordpress-upload-application-create-s3-bucket-console)
+ [向 Amazon S3 存储桶和 AWS 账户授予权限](#tutorials-wordpress-upload-application-create-s3-bucket-grant-permissions)

### 创建 Amazon S3 存储桶（CLI）
<a name="tutorials-wordpress-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-wordpress-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-wordpress-upload-application-create-s3-bucket-grant-permissions"></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)。

有关如何创建和附加 IAM policy 的信息，请参阅[使用策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html#AddingPermissions_Console)。

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

确保 WordPress 应用程序文件、 AppSpec 文件和脚本在开发计算机上的组织方式与以下内容类似：

```
/tmp/
  |--WordPress/
      |-- appspec.yml  
      |-- scripts/
      |    |-- change_permissions.sh
      |    |-- create_test_db.sh
      |    |-- install_dependencies.sh
      |    |-- start_server.sh
      |    |-- stop_server.sh
      |-- wp-admin/
      |    |-- (various files...)
      |-- wp-content/
      |    |-- (various files...)
      |-- wp-includes/
      |    |-- (various files...)
      |-- index.php
      |-- license.txt
      |-- readme.html
      |-- (various files ending with .php...)
```

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

将 WordPress 应用程序文件和 AppSpec 文件捆绑到存档文件（称为应用程序*修订版*）中。

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

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

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

1. 调用 **create-application** 命令可注册名为 **WordPress\$1App** 的新应用程序：

   ```
   aws deploy create-application --application-name WordPress_App
   ```

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

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

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