

亚马逊 CodeCatalyst 不再向新买家开放。现有客户可以继续正常使用该服务。有关更多信息，请参阅 [如何从中迁移 CodeCatalyst](migration.md)。

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

# 教程：将构件上传到 Amazon S3
<a name="build-deploy"></a>

在本教程中，您将学习如何使用包含几个[构建操作](workflows-concepts.md#workflows-concepts-actions)的 Amazon CodeCatalyst [工作流程](workflows-concepts.md#workflows-concepts-workflows)将项目上传到 Amazon S3 存储桶。当工作流启动时，这些操作将按顺序运行。第一个构建操作生成两个文件（`Hello.txt` 和 `Goodbye.txt`），并将它们捆绑到一个构建构件中。第二个构建操作将构件上传到 Amazon S3。您需要将工作流配置为每次将提交命令推送到源存储库时运行。

**Topics**
+ [先决条件](#build-deploy-tut-prereqs)
+ [步骤 1：创建 AWS 角色](#build-deploy-tut-role)
+ [步骤 2：创建 Amazon S3 存储桶](#build-deploy-tut-artifact)
+ [步骤 3：创建源存储库](#deploy-tut-lambda-cfn-source)
+ [步骤 4：创建工作流](#build-deploy-tut-workflow.title)
+ [步骤 5：验证结果](#build-deploy.s3.verify)
+ [清理](#deploy-tut-lambda-cfn-clean-up)

## 先决条件
<a name="build-deploy-tut-prereqs"></a>

在开始之前，您需要：
+ 你需要一个带有关联 AWS 账户的 CodeCatalyst **空间**。有关更多信息，请参阅 [创建空间](spaces-create.md)。
+ 在您的空间中，您需要一个空项目，其名称为：

  ```
  codecatalyst-artifact-project
  ```

  使用**从头开始**选项来创建此项目。

  有关更多信息，请参阅 [在 Amazon 中创建一个空项目 CodeCatalyst](projects-create.md#projects-create-empty)。
+ 在你的项目中，你需要一个 CodeCatalyst **名**为：

  ```
  codecatalyst-artifact-environment
  ```

  按如下方式配置此环境：
  + 选择任何类型，例如**开发**。
  + 将您的 AWS 账户与之关联。
  + 对于**默认 IAM 角色**，选择任何角色。稍后需要指定另一个角色。

  有关更多信息，请参阅 [部署到 AWS 账户 和 VPCs](deploy-environments.md)。

## 步骤 1：创建 AWS 角色
<a name="build-deploy-tut-role"></a>

在此步骤中，您将创建一个 AWS IAM 角色，稍后将该角色分配给工作流程中的构建操作。此角色授予 CodeCatalyst 构建操作访问您的 AWS 账户和写入存储项目的 Amazon S3 的权限。该角色被称为**构建角色**。

**注意**  
如果您已经为其他教程创建了构建角色，也可以在本教程中使用该角色。只要确保该角色具有以下过程中显示的权限和信任策略即可。

有关 IAM 角色的更多信息，请参阅*AWS AWS Identity and Access Management 用户指南*[中的 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)。

**创建构建角色**

1. 按如下步骤操作，为角色创建策略：

   1. 登录到 AWS。

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

   1. 在导航窗格中，选择**策略**。

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

   1. 选择 **JSON** 选项卡。

   1. 删除现有代码。

   1. 粘贴以下代码：

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": [
                      "s3:PutObject",
                      "s3:ListBucket"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------
**注意**  
第一次使用该角色运行工作流操作时，请在资源策略语句中使用以下通配符，然后在策略可用后使用资源名称缩小策略范围。  

      ```
      "Resource": "*"
      ```

   1. 选择**下一步：标签**。

   1. 选择**下一步：审核**。

   1. 在**名称**中，输入：

      ```
      codecatalyst-s3-build-policy
      ```

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

      现在，您已经创建了权限策略。

1. 按如下步骤操作，创建构建角色：

   1. 在导航窗格中，选择**角色**，然后选择**创建角色**。

   1. 选择**自定义信任策略**。

   1. 删除现有的自定义信任策略。

   1. 添加以下自定义信任策略：

   1. 选择**下一步**。

   1. 在**权限策略**中，搜索 `codecatalyst-s3-build-policy` 并选中其复选框。

   1. 选择**下一步**。

   1. 对于**角色名称**，输入：

      ```
      codecatalyst-s3-build-role
      ```

   1. 对于**角色描述**，输入：

      ```
      CodeCatalyst build role
      ```

   1. 选择**创建角色**。

   现在，您已创建一个具有信任策略和权限策略的构建角色。

## 步骤 2：创建 Amazon S3 存储桶
<a name="build-deploy-tut-artifact"></a>

在此步骤中，您将创建一个 Amazon S3 存储桶，`Hello.txt` 和 `Goodbye.txt` 构件会上传到该存储桶中。

**创建 Amazon S3 存储桶**

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

1. 在主窗格中，选择**创建存储桶**。

1. 对于**存储桶名称**，输入：

   ```
   codecatalyst-artifact-bucket
   ```

1. 对于 **AWS 区域**，选择一个区域。本教程假设您选择了**美国西部（俄勒冈州）us-west-2**。有关 Amazon S3 支持的区域的信息，请参阅《AWS 一般参考》**中的 [Amazon Simple Storage Service endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/s3.html)。

1. 在页面底部选择**创建存储桶**。

1. 复制您刚刚创建的存储桶的名称，例如：

   ```
   codecatalyst-artifact-bucket
   ```

现在，您已经在美国西部（俄勒冈州）us-west-2 区域中创建了一个名为 **codecatalyst-artifact-bucket** 的存储桶。

## 步骤 3：创建源存储库
<a name="deploy-tut-lambda-cfn-source"></a>

在此步骤中，您将在中创建源存储库 CodeCatalyst。此存储库用于存储本教程的工作流定义文件。

有关源存储库的更多信息，请参阅[创建源存储库](source-repositories-create.md)。

**创建源存储库**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 导航到您的项目 `codecatalyst-artifact-project`。

1. 在导航窗格中，选择**代码**，然后选择**源存储库**。

1. 选择**添加存储库**，然后选择**创建存储库**。

1. 在**存储库名称**中，输入：

   ```
   codecatalyst-artifact-source-repository
   ```

1. 选择**创建**。

现在，您已经创建了一个名为 `codecatalyst-artifact-source-repository` 的存储库。

## 步骤 4：创建工作流
<a name="build-deploy-tut-workflow.title"></a>

在此步骤中，您将创建一个工作流，其中包含以下按顺序运行的构建基块：
+ 触发器 – 当您将更改推送到源存储库时，此触发器会自动启动工作流运行。有关触发器的更多信息，请参阅[使用触发器自动启动工作流运行](workflows-add-trigger.md)。
+ 一个名为 `GenerateFiles` 的构建操作 – `GenerateFiles` 操作在触发时，会创建两个文件（`Hello.txt` 和 `Goodbye.txt`），并将这两个文件打包到一个名为 `codecatalystArtifact` 的输出构件中。
+ 另一个名为 `Upload` 的构建操作 – `GenerateFiles` 操作完成后，`Upload` 操作会运行 AWS CLI 命令 `aws s3 sync`，将 `codecatalystArtifact` 和源存储库中的文件上传到您的 Amazon S3 存储桶。已在 AWS CLI CodeCatalyst计算平台上预安装和预先配置，因此您无需安装或配置它。

  有关 CodeCatalyst 计算平台上预打包软件的更多信息，请参阅[指定运行时环境映像](build-images.md)。有关`aws s3 sync`命令 AWS CLI的更多信息，请参阅《*AWS CLI 命令参考*》中的 [sync](https://docs.aws.amazon.com/cli/latest/reference/s3/sync.html)。

有关构建操作的更多信息，请参阅[使用工作流进行构建](build-workflow-actions.md)。

**创建工作流**

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择**创建工作流**。

1. 删除 YAML 示例代码。

1. 添加以下 YAML 代码：
**注意**  
在接下来的 YAML 代码中，如果需要，可以省略 `Connections:` 部分。如果您省略此部分，则必须确保您环境的**默认 IAM 角色**字段中指定的角色包含[步骤 1：创建 AWS 角色](#build-deploy-tut-role)中描述的权限和信任策略。有关使用默认 IAM 角色设置环境的更多信息，请参阅[创建环境](deploy-environments-creating-environment.md)。

   ```
   Name: codecatalyst-artifact-workflow
   SchemaVersion: 1.0
   
   Triggers:
     - Type: Push
       Branches:
         - main   
   Actions:
     GenerateFiles:
       Identifier: aws/build@v1
       Configuration: 
         Steps:
           # Create the output files.
           - Run: echo "Hello, World!" > "Hello.txt"
           - Run: echo "Goodbye!" > "Goodbye.txt"
       Outputs:
         Artifacts:
           - Name: codecatalystArtifact
             Files:
               - "**/*"
     Upload:
       Identifier: aws/build@v1
       DependsOn: 
         - GenerateFiles
       Environment:
         Name: codecatalyst-artifact-environment
         Connections:
           - Name: codecatalyst-account-connection
             Role: codecatalyst-s3-build-role
       Inputs:
         Artifacts:
           - codecatalystArtifact
       Configuration: 
         Steps:
           # Upload the output artifact to the S3 bucket.
           - Run: aws s3 sync . s3://codecatalyst-artifact-bucket
   ```

   在以上代码中，进行如下替换：
   + *codecatalyst-artifact-environment*使用您在中创建的环境的名称[先决条件](#build-deploy-tut-prereqs)。
   + *codecatalyst-account-connection*使用您在中创建的账户连接的名称[先决条件](#build-deploy-tut-prereqs)。
   + 将 *codecatalyst-s3-build-role* 替换为您在[步骤 1：创建 AWS 角色](#build-deploy-tut-role)中创建的构建角色的名称。
   + *codecatalyst-artifact-bucket*使用您在中创建的 Amazon S3 的名称[步骤 2：创建 Amazon S3 存储桶](#build-deploy-tut-artifact)。

   有关此文件中的属性的信息，请参阅[构建和测试操作 YAML](build-action-ref.md)。

1. （可选）选择**验证**，确保 YAML 代码在提交之前有效。

1. 选择**提交**。

1. 在**提交工作流**对话框中，输入以下内容：

   1. 对于**工作流文件名**，保留默认值 `codecatalyst-artifact-workflow`。

   1. 对于**提交消息**，输入：

      ```
      add initial workflow file
      ```

   1. 对于**存储库**，选择 **codecatalyst-artifact-source-repository**。

   1. 对于**分支名称**，选择**主**。

   1. 选择**提交**。

   现在，您已创建工作流。由于在工作流顶部定义了触发器，因此工作流运行会自动启动。具体而言，当您将 `codecatalyst-artifact-workflow.yaml` 文件提交（并推送）到源存储库时，触发器启动了工作流运行。

**查看正在运行的工作流**

1. 在导航窗格中，选择 **CI/CD**，然后选择**工作流**。

1. 选择您刚刚创建的工作流：`codecatalyst-artifact-workflow`。

1. 选择**GenerateFiles**查看第一个构建操作的进度。

1. 选择**上传**以查看第二个构建操作的进度。

1. **上传**操作完成后，请执行以下操作：
   + 如果工作流运行成功，请转到下一过程。
   + 如果工作流运行失败，请选择**日志**来解决该问题。

## 步骤 5：验证结果
<a name="build-deploy.s3.verify"></a>

工作流程运行后，转到 Amazon S3 服务并查看您的*codecatalyst-artifact-bucket*存储桶。现在，该存储桶应包含以下文件和文件夹：

```
.
|— .aws/
|— .git/
|Goodbye.txt
|Hello.txt
|REAME.md
```

已上传 `Goodbye.txt` 和 `Hello.txt` 文件，因为它们是 `codecatalystArtifact` 构件的一部分。已上传 `.aws/`、`.git/` 和 `README.md` 文件，因为它们位于您的源存储库中。

## 清理
<a name="deploy-tut-lambda-cfn-clean-up"></a>

清理干净 CodeCatalyst AWS ，避免为这些服务收费。

**要清理干净 CodeCatalyst**

1. 打开 CodeCatalyst 控制台，[网址为 https://codecatalyst.aws/](https://codecatalyst.aws/)。

1. 删除 `codecatalyst-artifact-source-repository` 源存储库。

1. 删除 `codecatalyst-artifact-workflow` 工作流。

**要清理干净 AWS**

1. 在 Amazon S3 中进行清理，如下所示：

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

   1. 删除 `codecatalyst-artifact-bucket` 存储桶内的文件。

   1. 删除 `codecatalyst-artifact-bucket` 存储桶。

1. 在 IAM 中进行清理，如下所示：

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

   1. 删除 `codecatalyst-s3-build-policy`。

   1. 删除 `codecatalyst-s3-build-role`。