的亚马逊 Elastic File System 示例 Amazon CodeBuild - Amazon CodeBuild
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

的亚马逊 Elastic File System 示例 Amazon CodeBuild

您可能需要在 Amazon Elastic File System 上创建您的 Amazon CodeBuild 构建,这是一种适用于 Amazon EC2 实例的可扩展共享文件服务。Amazon EFS 中的存储容量是弹性的,因此会随着文件的添加和删除而增长或收缩。它具有简单的 Web 服务界面,可用于创建和配置文件系统。它还为您管理所有文件存储基础设施,因此您无需担心部署、修补或维护文件系统配置。有关更多信息,请参阅 Amazon Elastic File System 用户指南中的什么是 Amazon Elastic File System?

此示例向您展示如何配置 CodeBuild 项目,使其安装并构建 Java 应用程序到 Amazon EFS 文件系统。在开始之前,您必须准备好构建并上传到 S3 输入存储桶或 Amazon CodeCommit、 GitHub、 GitHub 企业服务器或 Bitbucket 存储库的 Java 应用程序。

系统会加密文件系统的传输中数据。要使用其他映像来加密传输中的数据,请参阅加密传输中的数据

概括步骤

此示例涵盖了使用 Amazon EFS 所需的三个高级步骤 Amazon CodeBuild:

  1. 在您的 Amazon 账户中创建虚拟私有云 (VPC)。

  2. 创建使用此 VPC 的文件系统。

  3. 创建并构建使用 VPC 的 CodeBuild 项目。该 CodeBuild 项目使用以下内容来标识文件系统:

    • 文件系统的唯一标识符。当您在构建项目中指定文件系统时,可以选择该标识符。

    • 文件系统 ID。当您在 Amazon EFS 控制台中查看文件系统时,系统会显示该 ID。

    • 挂载点。这是 Docker 容器中用于挂载文件系统的目录。

    • 挂载选项。这些选项包含了有关如何挂载文件系统的详细信息。

注意

只有 Linux 平台支持在 Amazon EFS 中创建的文件系统。

使用创建 VPC Amazon CloudFormation

使用 Amazon CloudFormation 模板创建您的 VPC。

  1. 按照中的说明进行操作Amazon CloudFormation VPC 模板, Amazon CloudFormation 使用创建 VPC。

    注意

    此 Amazon CloudFormation 模板创建的 VPC 有两个私有子网和两个公有子网。只有在使用挂载在 Amazon EFS 中创建的文件系统时,才必须使用 Amazon CodeBuild 私有子网。如果您使用其中一个公有子网,则构建会失败。

  2. 登录 Amazon Web Services Management Console 并打开亚马逊 VPC 控制台,网址为 https://console.aws.amazon.com/vpc/

  3. 选择您创建时使用的 VPC Amazon CloudFormation。

  4. 描述选项卡上,记下 VPC 的名称及其 ID。稍后在本示例中创建 Amazon CodeBuild 项目时,两者都是必需的。

使用您的 VPC 创建 Amazon File System File System 文件系统

使用您之前创建的 VPC 为本示例创建简单的 Amazon EFS 文件系统。

  1. 登录 Amazon Web Services Management Console 并打开 Amazon EFS 控制台,网址为 https://console.aws.amazon.com/efs/

  2. 选择创建文件系统

  3. VPC,选择您之前在本示例中记录的 VPC 名称。

  4. 保持可用区与您选定子网的关联。

  5. 选择下一步

  6. 添加标签中,对于默认的名称键,在中,输入 Amazon EFS 文件系统的名称。

  7. 保留突增通用型选定为您的默认性能和吞吐量模式,然后选择下一步

  8. 对于配置客户端访问,请选择下一步

  9. 选择创建文件系统

  10. (可选)我们建议您为您的 Amazon EFS 文件系统添加策略,以强制对传输中的数据进行加密。在 Amazon EFS 控制台中,选择文件系统策略,选择编辑,选中标有针对所有客户端强制执行传输中加密的复选框,然后选择保存

创建要用于 Amazon EFS 的 CodeBuild 项目

创建一个使用您在本示例前面创建的 VPC 的 Amazon CodeBuild 项目。运行构建时,它会挂载之前创建的 Amazon EFS 文件系统。接下来,它会将 Java 应用程序创建的 .jar 文件存储在文件系统的挂载点目录中。

  1. 打开 Amazon CodeBuild 控制台,网址为 https://console.aws.amazon.com/codesuite/codebuild/home

  2. 从导航窗格中选择构建项目,然后选择创建构建项目

  3. 项目名称中输入项目名称。

  4. 源提供商中,选择包含要构建的 Java 应用程序的存储库。

  5. 输入 CodeBuild 用于定位应用程序的信息,例如存储库 URL。每个源提供商的选项有所不同。有关更多信息,请参阅Choose source provider

  6. 环境映像中,选择托管映像

  7. 操作系统中,选择 Amazon Linux 2

  8. 运行时中,选择标准

  9. 映像中,选择 aws/codebuild/amazonlinux2-x86_64-standard:4.0

  10. 环境类型中,选择 Linux

  11. 服务角色下,选择新建服务角色。在角色名称中,输入为您 CodeBuild 创建的角色的名称。

  12. 展开其他配置

  13. 选择 Enable this flag if you want to build Docker images or want your builds to get elevated privileges (如果要构建 Docker 映像或希望您的构建获得提升的特权,请启用此标志)

    注意

    默认情况下,非 VPC 版本启用 Docker 守护程序。如果您想使用 Docker 容器进行 VPC 构建,请参阅 Docker Docs 网站上的运行时权限和 Linux 功能并启用特权模式。此外,Windows 不支持特权模式。

  14. VPC 中,选择 VPC ID。

  15. 子网中,选择一个或多个与您的 VPC 关联的私有子网。您必须在挂载 Amazon EFS 文件系统的构建项目中使用私有子网。如果您使用公有子网,则构建会失败。

  16. 安全组中,选择默认安全组。

  17. 文件系统中,输入以下信息:

    • 针对标识符,输入文件系统的唯一标识符。标识符只能包含字母数字字符和下划线,且长度必须少于 129 个字符。 CodeBuild 使用此标识符创建标识弹性文件系统的环境变量。该环境变量的格式为采用大写字母的 CODEBUILD_<file_system_identifier>。例如,如果输入 my_efs,则环境变量为 CODEBUILD_MY_EFS

    • 对于 ID,请选择文件系统 ID。

    • (可选)输入文件系统中的一个目录。 CodeBuild 装入此目录。如果将 Directory path (目录路径) 留为空白,则 CodeBuild 会挂载整个文件系统。该路径相对于文件系统的根目录指定。

    • 对于挂载点,输入构建容器中用于挂载文件系统的目录的绝对路径。如果此目录不存在,则在构建过程中 CodeBuild 创建该目录。

    • (可选)输入挂载选项。如果将装载选项留空,则 CodeBuild 使用其默认装载选项:

      nfsvers=4.1 rsize=1048576 wsize=1048576 hard timeo=600 retrans=2

      有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的建议的 NFS 挂载选项

  18. 对于构建规范,选择插入构建命令,然后选择切换到编辑器

  19. 在编辑器中输入以下构建规范命令。将 <file_system_identifier> 替换为您在步骤 17 中输入的标识符。使用大写字母(例如 CODEBUILD_MY_EFS)。

    version: 0.2 phases: install: runtime-versions: java: corretto11 build: commands: - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
  20. 对所有其他设置使用默认值,然后选择创建构建项目。构建完成后,系统会显示项目的控制台页面。

  21. 选择开始构建

CodeBuild 以及 Amazon EFS 示例摘要

Amazon CodeBuild 项目构建完成后:

  • 您会拥有一个由 Java 应用程序创建的 .jar 文件,该文件已被构建到您的挂载点目录下的 Amazon EFS 文件系统中。

  • 系统会使用您在创建项目时输入的文件系统标识符,创建标识文件系统的环境变量。

有关更多信息,请参阅《Amazon Elastic File System 用户指南》中的装载文件系统

故障排除

以下是您在设置 Amazon EFS 时可能遇到的错误 CodeBuild。

CLIENT_ERROR:挂载 127.0.0.1:/ 失败。权限被拒绝

通过挂载 Amazon EFS 不支持 IAM 授权 CodeBuild。如果您使用的是自定义 Amazon EFS 文件系统策略,则需要向所有 IAM 主体授予读写权限。例如:

"Principal": { "AWS": "*" }

CLIENT_ERROR:挂载 127.0.0.1:/ 失败。连接被对等方重置

有两种可能的原因会导致此错误:

  • CodeBuild VPC 子网与 Amazon EFS 挂载目标位于不同的可用区中。您可以通过在 Amazon EFS 挂载目标所在的同一可用区中添加 VPC 子网来解决此问题。

  • 安全组不具备与 Amazon EFS 通信的权限。您可以通过添加入站规则来允许来自 VPC(为您的 VPC 添加主要 CIDR 块)或安全组本身的所有流量,从而解决此问题。

VPC_CLIENT_ERROR:意外的 EC2 错误: UnauthorizedOperation

当 CodeBuild项目的 VPC 配置中的所有子网均为公有子网时,就会发生此错误。您在 VPC 中必须至少有一个私有子网才能确保网络连接正常。