AWS CodeBuild
用户指南 (API 版本 2016-10-06)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

将 CodeBuild 与 Amazon Virtual Private Cloud 结合使用

通常,AWS CodeBuild 无法访问 VPC 中的资源。要支持访问,您必须提供额外的 VPC 特定配置信息以作为 CodeBuild 项目配置的一部分。这包括 VPC ID、VPC 子网 ID 和 VPC 安全组 ID。支持 VPC 的构建随后就可以访问 VPC 内的资源。有关在 Amazon VPC 中设置 VPC 的更多信息,请参阅 VPC 用户指南

使用案例

来自 AWS CodeBuild 构建的 VPC 连接使以下操作成为可能:

  • 通过您的构建对私有子网上隔离的 Amazon RDS 数据库中的数据运行集成测试。

  • 直接通过测试查询 Amazon ElastiCache 集群中的数据。

  • 与托管于 Amazon EC2、Amazon ECS 或使用内部 Elastic Load Balancing 的服务上的内部 Web 服务交互。

  • 从自托管的内部项目存储库 (如适用于 Python 的 PyPI、适用于 Java 的 Maven 和适用于 Node.js 的 npm) 检索依赖项。

  • 访问 Amazon S3 存储桶中配置为仅允许通过 Amazon VPC 终端节点访问的对象。

  • 通过与您的子网关联的 NAT 网关或 NAT 实例的弹性 IP 地址查询需要固定 IP 地址的外部 Web 服务。

您的构建可以访问您的 VPC 中托管的任何资源。

在您的 CodeBuild 项目中启用 Amazon VPC 访问

在您的 VPC 配置中包含以下设置:

  • 对于 VPC ID,选择 CodeBuild 使用的 VPC ID。

  • 对于 Subnets (子集),选择具有 NAT 转换的私有子集,其中包括或具有路由,指向使用 CodeBuild 的资源。

  • 对于 Security Groups (安全组),选择 CodeBuild 用来支持对 VPC 中资源的访问的安全组。

创建构建项目 (控制台)

有关创建构建项目的信息,请参阅创建构建项目 (控制台)。当您创建或更改 CodeBuild 项目时,请在 VPC 中选择您的 VPC ID、子网和安全组。

创建构建项目 (AWS CLI)

有关创建构建项目的信息,请参阅创建构建项目 (AWS CLI)。如果您要将 AWS CLI 与 CodeBuild 结合使用,则 CodeBuild 用来代表 IAM 用户与服务交互的服务器角色必须已附加以下策略:允许 CodeBuild 访问创建 VPC 网络接口时所需的 AWS 服务

vpcConfig 对象应包含您的 vpcIdsecurityGroupIdssubnets

  • 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) 的 VPC

    重要

    您需要一个 NAT 网关或 NAT 实例以便将 CodeBuild 与您的 Amazon VPC 结合使用,从而使 CodeBuild 能够访问公有终端节点(例如,在运行构建时执行 CLI 命令)。您不能使用 Internet 网关代替 NAT 网关或 NAT 实例,因为 CodeBuild 不支持将弹性 IP 地址分配给其创建的网络接口,并且 Amazon EC2 不支持为在 Amazon EC2 实例启动之外创建的任何网络接口自动分配公有 IP 地址。

  • 将多个可用区包含在您的 VPC 中。

  • 确保您的安全组不允许入站 (入口) 流量流至您的构建。有关更多信息,请参阅安全组规则

  • 为您的构建设置单独的子网。

  • 当您设置 CodeBuild 项目以访问 VPC 时,请仅选择私有子网。

有关在 Amazon VPC 中设置 VPC 的更多信息,请参阅 Amazon VPC 用户指南

有关借助 AWS CloudFormation 将 Amazon VPC 配置为使用 CodeBuild VPC 功能的更多信息,请参阅AWS CloudFormation VPC 模板

VPC 设置问题排查

当您排查 VPC 问题时,请使用错误消息中显示的信息帮助您发现、诊断和解决问题。

下面是一些帮助您排查常见的 CodeBuild VPC 错误“Build does not have internet connectivity.Please check subnet network configuration”的准则。

  1. 确保您的 Internet 网关已连接到 VPC

  2. 确保您的公有子网的路由表指向 Internet 网关

  3. 确保您的网络 ACL 允许流量流动

  4. 确保您的安全组允许流量流动

  5. 对 NAT 网关进行故障排除

  6. 确保私有子网的路由表指向 NAT 网关

  7. 确保 CodeBuild 用来代表 IAM 用户与服务交互的服务器角色具有此策略中的权限。有关更多信息,请参阅创建 CodeBuild 服务角色

    如果 CodeBuild 缺少权限,您可能会收到如下错误:“Unexpected EC2 error: UnauthorizedOperation”(意外的 EC2 错误:UnauthorizedOperation)。 如果 CodeBuild 没有使用 Amazon VPC 时所需的 Amazon EC2 权限,则会出现此错误。