教程:将构件上传到 Amazon S3 - Amazon CodeCatalyst

教程:将构件上传到 Amazon S3

在本教程中,您将学习如何使用包含若干构建操作的 Amazon CodeCatalyst 工作流,将构件上传到 Amazon S3 存储桶。当工作流启动时,这些操作将按顺序运行。第一个构建操作生成两个文件(Hello.txtGoodbye.txt),并将它们捆绑到一个构建构件中。第二个构建操作将构件上传到 Amazon S3。您需要将工作流配置为每次将提交命令推送到源存储库时运行。

先决条件

在开始之前,您需要:

  • 您需要一个带有已连接的 AWS 账户的 CodeCatalyst 空间。有关更多信息,请参阅创建空间

  • 在您的空间中,您需要一个空项目,其名称为:

    codecatalyst-artifact-project

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

    有关更多信息,请参阅在 Amazon CodeCatalyst 中创建空项目

  • 在您的项目中,您需要一个 CodeCatalyst 环境,其名称为:

    codecatalyst-artifact-environment

    按如下方式配置此环境:

    • 选择任何类型,例如开发

    • 将您的 AWS 账户连接到该类型。

    • 对于默认 IAM 角色,选择任何角色。稍后需要指定另一个角色。

    有关更多信息,请参阅部署到 AWS 账户和 VPC 中

步骤 1:创建 AWS 角色

在此步骤中,您将创建一个 AWS IAM 角色,稍后需要将该角色分配到工作流中的构建操作。该角色向 CodeCatalyst 构建操作授予权限,使其能够访问您的 AWS 账户并对将存储构件的 Amazon S3 进行写入。该角色被称为构建角色

注意

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

有关 IAM 角色的更多信息,请参阅《AWS AWS Identity and Access Management 用户指南》中的 IAM 角色

创建构建角色
  1. 按如下步骤操作,为角色创建策略:

    1. 登录到 AWS。

    2. 打开 IAM 控制台:https://console.aws.amazon.com/iam/

    3. 在导航窗格中,选择策略

    4. 选择创建策略

    5. 选择 JSON 选项卡。

    6. 删除现有代码。

    7. 粘贴以下代码:

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

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

      "Resource": "*"
    8. 选择下一步:标签

    9. 选择下一步:审核

    10. 名称中,输入:

      codecatalyst-s3-build-policy
    11. 选择创建策略

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

  2. 按如下步骤操作,创建构建角色:

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

    2. 选择自定义信任策略

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

    4. 添加以下自定义信任策略:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
    5. 选择下一步

    6. 权限策略中,搜索 codecatalyst-s3-build-policy 并选中其复选框。

    7. 选择下一步

    8. 对于角色名称,输入:

      codecatalyst-s3-build-role
    9. 对于角色描述,输入:

      CodeCatalyst build role
    10. 选择创建角色

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

步骤 2:创建 Amazon S3 存储桶

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

创建 Amazon S3 存储桶
  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 在主窗格中,选择创建存储桶

  3. 对于存储桶名称,输入:

    codecatalyst-artifact-bucket
  4. 对于 AWS 区域,选择一个区域。本教程假设您选择了美国西部(俄勒冈州)us-west-2。有关 Amazon S3 支持的区域的信息,请参阅《AWS 一般参考》中的 Amazon Simple Storage Service endpoints and quotas

  5. 在页面底部选择创建存储桶

  6. 复制您刚刚创建的存储桶的名称,例如:

    codecatalyst-artifact-bucket

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

步骤 3:创建源存储库

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

有关源存储库的更多信息,请参阅创建源存储库

创建源存储库
  1. 通过访问 https://codecatalyst.aws/ 打开 CodeCatalyst 控制台。

  2. 导航到您的项目 codecatalyst-artifact-project

  3. 在导航窗格中,选择代码,然后选择源存储库

  4. 选择添加存储库,然后选择创建存储库

  5. 存储库名称中,输入:

    codecatalyst-artifact-source-repository
  6. 选择创建

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

步骤 4:创建工作流

在此步骤中,您将创建一个工作流,其中包含以下按顺序运行的构建基块:

  • 触发器 – 当您将更改推送到源存储库时,此触发器会自动启动工作流运行。有关触发器的更多信息,请参阅使用触发器自动启动工作流运行

  • 一个名为 GenerateFiles 的构建操作 – GenerateFiles 操作在触发时,会创建两个文件(Hello.txtGoodbye.txt),并将这两个文件打包到一个名为 codecatalystArtifact 的输出构件中。

  • 另一个名为 Upload 的构建操作 – GenerateFiles 操作完成后,Upload 操作会运行 AWS CLI 命令 aws s3 sync,将 codecatalystArtifact 和源存储库中的文件上传到您的 Amazon S3 存储桶。由于 CodeCatalyst 计算平台上已经预安装和预先配置 AWS CLI,因此您无需安装或配置它。

    有关 CodeCatalyst 计算平台上的预打包软件的更多信息,请参阅指定运行时环境映像。有关 AWS CLI 的 aws s3 sync 命令的更多信息,请参阅《AWS CLI 命令行参考》中的 sync

有关构建操作的更多信息,请参阅使用工作流进行构建

创建工作流
  1. 在导航窗格中,选择 CI/CD,然后选择工作流

  2. 选择创建工作流

  3. 删除 YAML 示例代码。

  4. 添加以下 YAML 代码:

    注意

    在接下来的 YAML 代码中,如果需要,可以省略 Connections: 部分。如果您省略此部分,则必须确保您环境的默认 IAM 角色字段中指定的角色包含步骤 1:创建 AWS 角色中描述的权限和信任策略。有关使用默认 IAM 角色设置环境的更多信息,请参阅创建环境

    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

    在以上代码中,进行如下替换:

    有关此文件中的属性的信息,请参阅构建和测试操作 YAML

  5. (可选)选择验证,确保 YAML 代码在提交之前有效。

  6. 选择提交

  7. 提交工作流对话框中,输入以下内容:

    1. 对于工作流文件名,保留默认值 codecatalyst-artifact-workflow

    2. 对于提交消息,输入:

      add initial workflow file
    3. 对于存储库,选择 codecatalyst-artifact-source-repository

    4. 对于分支名称,选择

    5. 选择提交

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

查看正在运行的工作流
  1. 在导航窗格中,选择 CI/CD,然后选择工作流

  2. 选择您刚刚创建的角色:codecatalyst-artifact-workflow

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

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

  5. 上传操作完成后,请执行以下操作:

    • 如果工作流运行成功,请转到下一过程。

    • 如果工作流运行失败,请选择日志来解决该问题。

步骤 5:验证结果

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

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

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

清理

在 CodeCatalyst 和 AWS 中进行清理,避免为这些服务付费。

在 CodeCatalyst 中进行清理
  1. 通过访问 https://codecatalyst.aws/ 打开 CodeCatalyst 控制台。

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

  3. 删除 codecatalyst-artifact-workflow 工作流。

在 AWS 中进行清理
  1. 在 Amazon S3 中进行清理,如下所示:

    1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

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

    3. 删除 codecatalyst-artifact-bucket 存储桶。

  2. 在 IAM 中进行清理,如下所示:

    1. 打开 IAM 控制台:https://console.aws.amazon.com/iam/

    2. 删除 codecatalyst-s3-build-policy

    3. 删除 codecatalyst-s3-build-role