本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 Amazon CodeBuild 与 Amazon Virtual Private Cloud 结合使用
通常,Amazon CodeBuild 无法访问 VPC 中的资源。要支持访问,您必须在 CodeBuild 项目配置中提供额外的 VPC 特定配置信息。这包括 VPC ID、VPC 子网 ID 和 VPC 安全组 ID。支持 VPC 的构建随后就可以访问 VPC 中的资源。有关在 Amazon VPC 中设置 VPC 的更多信息,请参阅《Amazon VPC 用户指南》。
主题
使用案例
来自 Amazon CodeBuild 构建的 VPC 连接使以下操作成为可能:
-
针对在私有子网上隔离的 Amazon RDS 数据库中的数据,从您的构建中运行集成测试。
-
直接通过测试查询 Amazon ElastiCache 集群中的数据。
-
与托管于 Amazon EC2、Amazon ECS 或使用内部 Elastic Load Balancing 的服务上的内部 Web 服务交互。
-
从自托管的内部构件存储库(如适用于 Python 的 PyPI、适用于 Java 的 Maven 和适用于 Node.js 的 npm)检索依赖项。
-
访问配置为仅允许通过 Amazon VPC 端点访问的 S3 存储桶中的对象。
-
利用与您的子网关联的 NAT 网关或 NAT 实例的弹性 IP 地址,来查询需要固定 IP 地址的外部 Web 服务。
您的构建可以访问您的 VPC 中托管的任何资源。
在您的 CodeBuild 项目中允许 Amazon VPC 访问
在您的 VPC 配置中包含以下设置:
-
对于 VPC ID,请选择 CodeBuild 使用的 VPC ID。
-
对于子网,选择具有 NAT 转换的私有子网,其中包括或具有指向 CodeBuild 使用的资源的路由。
-
对于安全组,请选择 CodeBuild 用来支持对 VPC 中资源的访问的安全组。
要使用控制台创建构建项目,请参阅创建构建项目(控制台)。当您创建或更改 CodeBuild 项目时,请在 VPC 中选择您的 VPC ID、子网和安全组。
要使用 Amazon CLI 创建构建项目,请参阅创建构建项目 (Amazon CLI)。如果您要将 Amazon CLI 与 CodeBuild 结合使用,则 CodeBuild 用来代表 IAM 用户与服务交互的服务角色必须已附加策略。有关信息,请参阅 允许 CodeBuild 访问创建 VPC 网络接口所需的 Amazon 服务。
vpcConfig
对象应包含您的 vpcId
、securityGroupIds
和 subnets
。
-
vpcId
:必需。CodeBuild 使用的 VPC ID。运行此命令获取您的区域中的所有 Amazon VPC ID 的列表:aws ec2 describe-vpcs
-
subnets
:必需。包含 CodeBuild 使用的资源的子网 ID。要获取这些 ID,请运行此命令:aws ec2 describe-subnets --filters "Name=vpc-id,Values=<vpc-id>" --region us-east-1
注意
将
us-east-1
替换为您的区域。 -
securityGroupIds
:必需。CodeBuild 用来支持对 VPC 中的资源的访问的安全组 ID。要获取这些 ID,请运行此命令:aws ec2 describe-security-groups --filters "Name=vpc-id,Values=<vpc-id>" --region us-east-1
注意
将
us-east-1
替换为您的区域。
VPC 的最佳实操
在设置 VPC 以使用 CodeBuild 时,请使用此核对清单。
-
设置具有公有和私有子网以及一个 NAT 网关的 VPC。NAT 网关必须位于公有子网中。有关更多信息,请参阅《Amazon VPC 用户指南》中的具有公有和私有子网 (NAT) 的 VPC。
重要
您需要一个 NAT 网关或 NAT 实例以便将 CodeBuild 与您的 VPC 结合使用,从而使 CodeBuild 能够访问公有端点(例如,在运行构建时运行 CLI 命令)。您不能使用互联网网关代替 NAT 网关或 NAT 实例,因为 CodeBuild 不支持将弹性 IP 地址分配给其创建的网络接口,并且 Amazon EC2 不支持为在 Amazon EC2 实例启动之外创建的任何网络接口自动分配公有 IP 地址。
-
将多个可用区包含在您的 VPC 中。
-
确保您的安全组不允许入站 (入口) 流量流至您的构建。CodeBuild 对出站流量没有具体要求,但您必须允许访问构建所需的任何互联网资源,例如 GitHub 或 Amazon S3。
有关更多信息,请参阅《Amazon VPC 用户指南》中的安全组规则。
-
为您的构建设置单独的子网。
-
当您设置 CodeBuild 项目以访问 VPC 时,请仅选择私有子网。
有关在 Amazon VPC 中设置 VPC 的更多信息,请参阅《Amazon VPC 用户指南》。
有关使用 Amazon CloudFormation 将 VPC 配置为使用 CodeBuild VPC 功能的更多信息,请参阅Amazon CloudFormation VPC 模板。
排查 VPC 设置的问题
使用错误消息中显示的信息可帮助您确定、诊断和解决问题。
下面是一些帮助您排查常见的 CodeBuild VPC 错误的指导信息:Build does not have internet connectivity. Please check subnet network
configuration
。
-
确保 CodeBuild 用来代表 IAM 用户与服务交互的服务器角色具有此策略中的权限。有关更多信息,请参阅创建 CodeBuild 服务角色。
如果 CodeBuild 缺少权限,您可能会收到一个错误,其内容为
Unexpected EC2 error: UnauthorizedOperation
。如果 CodeBuild 没有使用 VPC 所需的 Amazon EC2 权限,则会出现此错误。
VPC 的限制
-
Windows 不支持来自 CodeBuild 的 VPC 连接。
-
共享 VPC 不支持来自 CodeBuild 的 VPC 连接。
-
如果您配置 VPC,则不支持本地缓存。从 2022 年 2 月 28 日起,您的 VPC 构建将花费更长的时间,因为系统会针对每个构建使用新的 Amazon EC2 实例。