本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
的亚马逊弹性文件系统示例Amazon CodeBuild
你可能想创建你的Amazon CodeBuild基于 Amazon Elastic File System 构建,这是一种适用于 Amazon EC2 实例的可扩展共享 Amazon EFS 的存储容量具有弹性,因此它会随着文件的添加和删除而增长或缩小。它具有简单的 Web 服务界面,可用于创建和配置文件系统。它还为您管理所有文件存储基础设施,因此您无需担心部署、修补或维护文件系统配置。有关更多信息,请参阅什么是亚马逊弹性文件系统?在亚马逊弹性文件系统用户指南。
此示例向您展示如何配置CodeBuild项目,以便它安装并生成一个 Java 应用程序到 Amazon EFS 文件系统。在开始之前,您必须准备好构建并上传到 S3 输入存储桶或 S3 输入存储桶的 Java 应用程序Amazon CodeCommit,GitHub,GitHub企业服务器或 Bitbucket 存储库。
系统会加密文件系统的传输中数据。要使用其他映像来加密传输中的数据,请参阅加密传输中的数据。
概括步骤
此示例涵盖了使用 Amazon EFS 所需的三个高级步骤Amazon CodeBuild:
-
在您的 VPC 中创建虚拟私有云 (VPC)Amazon账户。
-
创建使用此 VPC 的文件系统。
-
创建并构建使用此 VPC 的 CodeBuild 项目。该 CodeBuild 项目使用以下内容来标识文件系统:
-
文件系统的唯一标识符。当您在构建项目中指定文件系统时,可以选择该标识符。
-
文件系统 ID。当您在 Amazon EFS 控制台中查看您的文件系统时,会显示该 ID。
-
挂载点。这是 Docker 容器中用于挂载文件系统的目录。
-
挂载选项。这些选项包含了有关如何挂载文件系统的详细信息。
-
注意
只有 Linux 平台支持在 Amazon EFS 中创建的文件系统。
使用 Amazon CloudFormation 创建 VPC
使用 Amazon CloudFormation 模板创建 VPC。
-
按照Amazon CloudFormation VPC 模板中的说明使用 Amazon CloudFormation 创建 VPC。
注意
通过此 Amazon CloudFormation 模板创建的 VPC 具有两个私有子网和两个公有子网。您只能在使用私有子网时使用私有子网Amazon CodeBuild挂载您在 Amazon EFS 中创建的文件系统。如果您使用其中一个公有子网,则构建会失败。
登录到Amazon Web Services Management Console并打开 Amazon VPC 控制台,网址:https://console.aws.amazon.com/vpc/
。 -
选择您使用 Amazon CloudFormation 创建的 VPC。
-
在 Description (描述) 选项卡上,记下 VPC 的名称及其 ID。在本示例的后面部分中创建您的 Amazon CodeBuild 项目时,需要这两者。
使用您的 VPC 创建亚马逊弹性文件系统文件系统
使用您之前创建的 VPC 为此示例创建一个简单的 Amazon EFS 文件系统。
登录Amazon Web Services Management Console然后打开亚马逊 EFS 控制台,网址为https://console.aws.amazon.com/efs/
。 -
选择 Create file system。
-
从 VPC,选择您之前在本示例中记录的 VPC 名称。
-
让可用区保持与您选定的子网关联。
-
选择 Next Step。
-
在添加标签,默认姓名key,in价值,输入您的亚马逊 EFS 文件系统的名称。
-
保留 Bursting (突增) 和 General Purpose (通用型) 选定为您的默认性能和吞吐量模式,然后选择 Next Step (下一步)。
-
对于配置客户端访问,请选择下一步。
-
选择创建文件系统。
-
(可选)我们建议您在您的 Amazon EFS 文件系统中添加一项策略,强制对传输中的数据进行加密。在亚马逊 EFS 控制台中,选择文件系统策略,选择编辑,选择标有标签的方框对所有客户端强制执行传输中加密,然后选择保存。
创建一个CodeBuild要与亚马逊 EFS 一起使用的项目
创建一个 Amazon CodeBuild 项目,该项目使用您之前在本示例中创建的 VPC。运行该版本时,它会挂载之前创建的 Amazon EFS 文件系统。接下来,它会将 Java 应用程序创建的 .jar 文件存储在文件系统的挂载点目录中。
打开Amazon CodeBuild控制台位于https://console.aws.amazon.com/codesuite/codebuild/home
。 -
从导航窗格中选择 Build projects (构建项目),然后选择 Create build project (创建构建项目)。
-
在项目名称中输入项目名称。
-
从 Source provider (源提供商) 中,选择包含要构建的 Java 应用程序的存储库。
-
输入 CodeBuild 用于找到您的应用程序的信息,例如存储库 URL。每个源提供商的选项有所不同。有关更多信息,请参阅Choose source provider:
-
对于 Environment image (环境映像),选择 Managed image (托管映像)。
-
从 Operating system (操作系统) 中,选择 Amazon Linux 2。
-
从 Runtime(s) (运行时) 中,选择 Standard (标准)。
-
来自图片,选择aws/codebuild/amazonlinux2-x86_64 standard: 4.。
-
对于 Environment type (环境类型),选择 Linux。
-
选择 Privileged (特权)。
注意
默认情况下,Docker 容器不允许访问任何设备。特权模式将授予构建项目的 Docker 容器访问所有设备的权限。有关更多信息,请参阅 Docker 文档网站上的运行时权限和 Linux 功能
。此外,Windows 不支持特权模式。 -
在 Service role (服务角色) 下,选择 New service role (新建服务角色)。在 Role name (角色名称) 中,输入 CodeBuild 为您创建的角色的名称。
-
展开 Additional configuration (其他配置)。
-
从 VPC,选择 VPC ID。
-
对于 Subnets (子网),选择一个或多个与您的 VPC 关联的私有子网。您必须在装载 Amazon EFS 文件系统的版本中使用私有子网。如果您使用公有子网,则构建会失败。
-
对于 Security Groups (安全组),选择默认安全组。
-
在 File systems (文件系统) 中,输入以下信息:
-
对于 Identifier (标识符),输入文件系统的唯一标识符。它必须少于 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
有关更多信息,请参阅推荐的 NFS 装载选项在亚马逊弹性文件系统用户指南。
-
-
对于 Build specification (构建规范),选择 Insert build commands (插入构建命令),然后选择 Switch to editor (切换到编辑器)。
-
在编辑器中输入以下构建规范命令。将
替换为您在步骤 17 中输入的标识符。使用大写字母(例如<file_system_identifier>
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>
-
对所有其他设置使用默认值,然后选择 Create build project (创建构建项目)。构建完成后,系统会显示项目的控制台页面。
-
选择 Start build。
CodeBuild和亚马逊 EFS 示例摘要
在 Amazon CodeBuild 项目构建完成后:
-
您的 Java 应用程序创建了一个.jar 文件,该文件是在挂载点目录下的 Amazon EFS 文件系统中构建的。
-
系统会使用您在创建项目时输入的文件系统标识符,创建标识文件系统的环境变量。
有关更多信息,请参阅挂载文件系统在亚马逊弹性文件系统用户指南。
问题排查
以下是您在设置 Amazon EFS 时可能遇到的错误CodeBuild。
主题
CLIENT_ERROR:挂载 '127.0.0.1: /' 失败。权限被拒绝
通过以下方式挂载亚马逊 EFS 不支持 IAM 授权CodeBuild。如果您使用的是自定义 Amazon EFS 文件系统策略,则需要向所有 IAM 委托人授予读写权限。例如:
"Principal": { "AWS": "*" }
CLIENT_ERROR:挂载 '127.0.0.1: /' 失败。连接由对方重置
造成此错误的原因可能有两个:
-
的CodeBuildVPC 子网与 Amazon EFS 挂载目标位于不同的可用区中。您可以通过在与 Amazon EFS 挂载目标相同的可用区中添加 VPC 子网来解决此问题。
-
安全组无权与 Amazon EFS 通信。您可以通过添加入站规则来解决此问题,该规则允许来自 VPC(为您的 VPC 添加主 CIDR 块)或安全组本身的所有流量。
VPC_CLIENT_ERROR:意外的 EC2 错误:UnauthorizedOperation
当您的 VPC 配置中的所有子网都使用时,就会发生此错误CodeBuild项目是公共子网。为了确保网络连接,您必须在 VPC 中至少有一个私有子网。