教程:将构件上传到 Amazon S3
在本教程中,您将学习如何使用包含若干构建操作的 Amazon CodeCatalyst 工作流,将构件上传到 Amazon S3 存储桶。当工作流启动时,这些操作将按顺序运行。第一个构建操作生成两个文件(Hello.txt
和 Goodbye.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 角色。
创建构建角色
-
按如下步骤操作,为角色创建策略:
-
登录到 AWS。
打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
在导航窗格中,选择策略。
-
选择创建策略。
-
选择 JSON 选项卡。
-
删除现有代码。
-
粘贴以下代码:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:ListBucket" ], "Resource": "*" } ] }
注意
第一次使用该角色运行工作流操作时,请在资源策略语句中使用以下通配符,然后在策略可用后使用资源名称缩小策略范围。
"Resource": "*"
-
选择下一步:标签。
-
选择下一步:审核。
-
在名称中,输入:
codecatalyst-s3-build-policy
-
选择创建策略。
现在,您已经创建了权限策略。
-
-
按如下步骤操作,创建构建角色:
-
在导航窗格中,选择角色,然后选择创建角色。
-
选择自定义信任策略。
-
删除现有的自定义信任策略。
-
添加以下自定义信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": [ "codecatalyst-runner.amazonaws.com", "codecatalyst.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
-
选择下一步。
-
在权限策略中,搜索
codecatalyst-s3-build-policy
并选中其复选框。 -
选择下一步。
-
对于角色名称,输入:
codecatalyst-s3-build-role
-
对于角色描述,输入:
CodeCatalyst build role
-
选择创建角色。
现在,您已创建一个具有信任策略和权限策略的构建角色。
-
步骤 2:创建 Amazon S3 存储桶
在此步骤中,您将创建一个 Amazon S3 存储桶,Hello.txt
和 Goodbye.txt
构件会上传到该存储桶中。
创建 Amazon S3 存储桶
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
在主窗格中,选择创建存储桶。
-
对于存储桶名称,输入:
codecatalyst-artifact-bucket
-
对于 AWS 区域,选择一个区域。本教程假设您选择了美国西部(俄勒冈州)us-west-2。有关 Amazon S3 支持的区域的信息,请参阅《AWS 一般参考》中的 Amazon Simple Storage Service endpoints and quotas。
-
在页面底部选择创建存储桶。
-
复制您刚刚创建的存储桶的名称,例如:
codecatalyst-artifact-bucket
现在,您已经在美国西部(俄勒冈州)us-west-2 区域中创建了一个名为 codecatalyst-artifact-bucket
的存储桶。
步骤 3:创建源存储库
在此步骤中,您将在 CodeCatalyst 中创建源存储库。此存储库用于存储本教程的工作流定义文件。
有关源存储库的更多信息,请参阅创建源存储库。
创建源存储库
通过访问 https://codecatalyst.aws/
打开 CodeCatalyst 控制台。 -
导航到您的项目
codecatalyst-artifact-project
。 -
在导航窗格中,选择代码,然后选择源存储库。
-
选择添加存储库,然后选择创建存储库。
-
在存储库名称中,输入:
codecatalyst-artifact-source-repository
-
选择创建。
现在,您已经创建了一个名为 codecatalyst-artifact-source-repository
的存储库。
步骤 4:创建工作流
在此步骤中,您将创建一个工作流,其中包含以下按顺序运行的构建基块:
-
触发器 – 当您将更改推送到源存储库时,此触发器会自动启动工作流运行。有关触发器的更多信息,请参阅使用触发器自动启动工作流运行。
-
一个名为
GenerateFiles
的构建操作 –GenerateFiles
操作在触发时,会创建两个文件(Hello.txt
和Goodbye.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。
有关构建操作的更多信息,请参阅使用工作流进行构建。
创建工作流
-
在导航窗格中,选择 CI/CD,然后选择工作流。
-
选择创建工作流。
-
删除 YAML 示例代码。
-
添加以下 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
在以上代码中,进行如下替换:
-
将
codecatalyst-artifact-environment
替换为您在先决条件中创建的环境的名称。 -
将
codecatalyst-account-connection
替换为您在先决条件中创建的账户连接的名称。 -
将
codecatalyst-s3-build-role
替换为您在步骤 1:创建 AWS 角色中创建的构建角色的名称。 -
将
codecatalyst-artifact-bucket
替换为您在步骤 2:创建 Amazon S3 存储桶中创建的 Amazon S3 的名称。
有关此文件中的属性的信息,请参阅构建和测试操作 YAML。
-
-
(可选)选择验证,确保 YAML 代码在提交之前有效。
-
选择提交。
-
在提交工作流对话框中,输入以下内容:
-
对于工作流文件名,保留默认值
codecatalyst-artifact-workflow
。 -
对于提交消息,输入:
add initial workflow file
-
对于存储库,选择 codecatalyst-artifact-source-repository。
-
对于分支名称,选择主。
-
选择提交。
现在,您已创建工作流。由于在工作流顶部定义了触发器,因此工作流运行会自动启动。具体而言,当您将
codecatalyst-artifact-workflow.yaml
文件提交(并推送)到源存储库时,触发器启动了工作流运行。 -
查看正在运行的工作流
-
在导航窗格中,选择 CI/CD,然后选择工作流。
-
选择您刚刚创建的角色:
codecatalyst-artifact-workflow
。 -
选择 GenerateFiles 以查看第一个构建操作的进度。
-
选择上传以查看第二个构建操作的进度。
-
上传操作完成后,请执行以下操作:
-
如果工作流运行成功,请转到下一过程。
-
如果工作流运行失败,请选择日志来解决该问题。
-
步骤 5:验证结果
工作流运行后,转到 Amazon S3 服务并查看您的 codecatalyst-artifact-bucket
存储桶。现在,该存储桶应包含以下文件和文件夹:
. |— .aws/ |— .git/ |Goodbye.txt |Hello.txt |REAME.md
已上传 Goodbye.txt
和 Hello.txt
文件,因为它们是 codecatalystArtifact
构件的一部分。已上传 .aws/
、.git/
和 README.md
文件,因为它们位于您的源存储库中。
清理
在 CodeCatalyst 和 AWS 中进行清理,避免为这些服务付费。
在 CodeCatalyst 中进行清理
通过访问 https://codecatalyst.aws/
打开 CodeCatalyst 控制台。 -
删除
codecatalyst-artifact-source-repository
源存储库。 -
删除
codecatalyst-artifact-workflow
工作流。
在 AWS 中进行清理
-
在 Amazon S3 中进行清理,如下所示:
通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/
。 -
删除
codecatalyst-artifact-bucket
存储桶内的文件。 -
删除
codecatalyst-artifact-bucket
存储桶。
-
在 IAM 中进行清理,如下所示:
打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
删除
codecatalyst-s3-build-policy
。 -
删除
codecatalyst-s3-build-role
。