

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

# 将修订推送 CodeDeploy 到 Amazon S3（仅限 EC2/本地部署）
<a name="application-revisions-push"></a>

按照中所述计划修订版[为 CodeDeploy 规划修订](application-revisions-plan.md)并按照中所述向修订版添加 AppSpec 文件后[将应用程序规范文件添加到修订版中 CodeDeploy](application-revisions-appspec-file.md)，就可以捆绑组件文件并将修订推送到 Amazon S3 了。对于部署到 Amazon EC2 实例，在推送修订之后，您可以使用 CodeDeploy 将修订从 Amazon S3 部署到实例。

**注意**  
CodeDeploy 也可以用来部署已推送到的修订版 GitHub。有关更多信息，请参阅您的 GitHub 文档。

我们假定您已遵循 [入门 CodeDeploy](getting-started-codedeploy.md)中的说明来设置 AWS CLI。这对于调用稍后描述的 **push** 命令来说特别重要。

请确保您拥有 Amazon S3 存储桶。遵循[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html)中的说明。

如果要部署到 Amazon EC2 实例，则必须创建目标 Amazon S3 存储桶或者它必须存在于目标实例所在的区域中。例如，如果您要将修订部署到美国东部（弗吉尼亚州北部）区域的某些实例和美国西部（俄勒冈州）区域的其他实例，那么您必须在美国东部（弗吉尼亚州北部）区域的一个存储桶中部署一个修订副本，在美国西部（俄勒冈州）区域的另一个存储桶中部署同一修订的另一个副本。在此方案中，您随后需要分别在美国东部（弗吉尼亚州北部）区域和美国西部（俄勒冈州）区域中各创建一个单独的部署，即使两个区域和存储桶中的修订相同也是如此。

您必须拥有上传到 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 存储桶策略，请参阅[存储桶策略示例](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html)。

调用 **push** 命令的用户必须至少具有将修订上传到每个目标 Amazon S3 存储桶的权限。例如，以下策略允许用户将修订上传到名为 `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，请参阅[使用策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingPolicies.html#AddingPermissions_Console)。

## 使用推送修订版 AWS CLI
<a name="push-with-cli"></a>

**注意**  
 该`push`命令将应用程序工件和 AppSpec 文件捆绑到修订版中。此修订的文件格式是压缩的 ZIP 文件。该命令不能用于 AWS Lambda 或 Amazon ECS 部署，因为每个部署都需要一个 JSON 格式或 YAML 格式文件的修订版。 AppSpec 

调用 **push** 命令以便为部署绑定和推送修订。它的参数包括：
+  **--application-name**：（字符串）必需。要应用程序修订关联的 CodeDeploy 应用程序的名称。
+  **--s3-location**：（字符串）必需。要上传到 Amazon S3 的应用程序修订的位置的相关信息。您必须指定一个 Amazon S3 存储桶和一个键。关键是修订的名称。 CodeDeploy 在上传内容之前对其进行压缩。采用格式 `s3://amzn-s3-demo-bucket/your-key.zip`。
+  **--ignore-hidden-files** 或 **--no-ignore-hidden-files**：（布尔值）可选。使用 `--no-ignore-hidden-files` 标志（默认值）会将隐藏文件绑定和上传到 Amazon S3。使用 `--ignore-hidden-files` 标志不会将隐藏文件绑定和上传到 Amazon S3。
+  **--source**（字符串）可选。要部署的内容以及开发计算机上要压缩并上传到 Amazon S3 AppSpec 的文件的位置。该位置被指定为相对于当前目录的路径。如果未指定相对路径或者对路径使用了单个句点（“.”），则使用当前目录。
+  **--description**（字符串）可选。用于概述应用程序修订的注释。如果未指定，则使用默认字符串 “按 AWS CLI '时间'UTC上传”，其中'时间'是协调世界时 (UTC) 中的当前系统时间。

您可以使用推送 Amazon EC2 部署的修订。 AWS CLI 示例推送命令如下所示：

在 Linux、macOS 或 Unix 中：

```
aws deploy push \
  --application-name WordPress_App \
  --description "This is a revision for the application WordPress_App" \
  --ignore-hidden-files \
  --s3-location s3://amzn-s3-demo-bucket/WordPressApp.zip \
  --source .
```

 在 Windows 中：

```
aws deploy push --application-name WordPress_App --description "This is a revision for the application WordPress_App" --ignore-hidden-files --s3-location s3://amzn-s3-demo-bucket/WordPressApp.zip --source .
```

 此命令执行以下操作：
+  将已绑定的文件与名为 `WordPress_App` 的应用程序关联。
+  将描述附加到修订。
+  忽略隐藏文件。
+  为修订 `WordPressApp.zip` 命名并将其推送到名为 `amzn-s3-demo-bucket` 的存储桶。
+  将根目录中的所有文件绑定到修订。

推送成功后，您可以使用 AWS CLI 或 CodeDeploy 控制台从 Amazon S3 部署修订。要部署此修订版，请执行以下 AWS CLI操作：

 在 Linux、macOS 或 Unix 中：

```
aws deploy create-deployment \
  --application-name WordPress_App \ 
  --deployment-config-name your-deployment-config-name \ 
  --deployment-group-name your-deployment-group-name \ 
  --s3-location bucket=amzn-s3-demo-bucket,key=WordPressApp.zip,bundleType=zip
```

 在 Windows 中：

```
aws deploy create-deployment --application-name WordPress_App --deployment-config-name your-deployment-config-name --deployment-group-name your-deployment-group-name --s3-location bucket=amzn-s3-demo-bucket,key=WordPressApp.zip,bundleType=zip
```

 有关更多信息，请参阅 [使用创建部署 CodeDeploy](deployments-create.md)。