

终止支持通知：2026 年 10 月 7 日， AWS 将终止对的支持。 AWS Proton 2026 年 10 月 7 日之后，您将无法再访问 AWS Proton 控制台或 AWS Proton 资源。您部署的基础架构将保持不变。有关更多信息，请参阅《[AWS Proton 服务弃用和迁移指南》](https://docs.aws.amazon.com/proton/latest/userguide/proton-end-of-support.html)。

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

# CodeBuild 配置自定义 Amazon VPC 支持
<a name="vpc-codebuild-custom-support"></a>

AWS Proton CodeBuild Provisioning 在 AWS Proton 环境帐户中的 CodeBuild 项目中执行客户提供的任意 CLI 命令。这些命令通常使用基础设施即代码 (IaC) 工具（例如 CDK）管理资源。如果您在 Amazon VPC 中拥有资源，则 CodeBuild 可能无法访问它们。要实现此功能，需要 CodeBuild 支持在特定的 Amazon VPC 内运行。一些示例使用案例包括：
+ 从自托管的内部构件存储库中检索依赖项，例如适用于 Python 的 `PyPI`、适用于 Java 的 `Maven` 和适用于 Node.js 的 `npm`。
+ CodeBuild 需要访问特定 Amazon VPC 中的 Jenkins 服务器才能注册管道。
+ 访问配置为仅允许通过 Amazon VPC 终端节点访问的 Amazon S3 存储桶中的对象。
+ 针对在私有子网上隔离的 Amazon RDS 数据库中的数据，从您的构建中运行集成测试。

有关更多信息，请参阅[CodeBuild 和 VPC 文档](https://docs.aws.amazon.com/codebuild/latest/userguide/vpc-support.html#use-cases)。

如果您想让 CodeBuild 配置在自定义 VPC 中运行，请 AWS Proton 提供一个简单的解决方案。首先，您必须将 VPC ID、子网和安全组添加到环境模板中。接下来，您将这些值输入到环境规范中。这将为您创建一个针对给定 VPC 的 CodeBuild 项目。

## 更新环境模板
<a name="vpc-codebuild-update-environment-template"></a>

**架构**  
需要将 VPC ID、子网和安全组添加到模板架构中，以便将其包含在环境规范中。

一个示例 `schema.yaml`：

```
schema:
  format:
    openapi: "3.0.0"
  environment_input_type: "EnvironmentInputType"
  types:
    EnvironmentInputType:
      type: object
      properties:
        codebuild_vpc_id:
          type: string
        codebuild_subnets:
          type: array
          items:
            type: string
        codebuild_security_groups:
          type: array
          items:
            type: string
```

这添加了清单使用的三个新属性：
+ `codebuild_vpc_id`
+ `codebuild_subnets`
+ `codebuild_security_groups`

**Manifest**  
要在中配置 Amazon VPC 设置 CodeBuild，模板清单中`project_properties`有一个名为的可选属性。`project_properties`的内容将添加到创建 CodeBuild 项目的 CloudFormation 堆栈中。这样不仅可以添加 [Amazon VPC CloudFormation 属性](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-vpcconfig.html)，还可以添加任何支持的[CodeBuild CloudFormation 属性](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-codebuild-project.html)，例如构建超时。为 `proton-inputs.json` 提供的相同数据也可以作为 `project_properties` 的值。

将该部分添加到 `manifest.yaml` 中：

```
project_properties:
          VpcConfig:
            VpcId: "{{ environment.inputs.codebuild_vpc_id }}"
            Subnets: "{{ environment.inputs.codebuild_subnets }}"
            SecurityGroupIds: "{{ environment.inputs.codebuild_security_groups }}"
```

生成的 `manifest.yaml` 可能如下所示：

```
infrastructure:
  templates:
    - rendering_engine: codebuild
      settings:
        image: aws/codebuild/amazonlinux2-x86_64-standard:4.0
        runtimes:
          nodejs: 16
        provision:
          - npm install
          - npm run build
          - npm run cdk bootstrap
          - npm run cdk deploy -- --require-approval never
        deprovision:
          - npm install
          - npm run build
          - npm run cdk destroy -- --force
        project_properties:
          VpcConfig:
            VpcId: "{{ environment.inputs.codebuild_vpc_id }}"
            Subnets: "{{ environment.inputs.codebuild_subnets }}"
            SecurityGroupIds: "{{ environment.inputs.codebuild_security_groups }}"
```

**创建环境**  
使用支持 CodeBuild 预配置 VPC 的模板创建环境时，必须提供 Amazon VPC ID、子网和安全组。

要获取您所在 IDs 地区的所有 Amazon VPC 的列表，请运行以下命令：

```
aws ec2 describe-vpcs
```

要获取所有子网的列表 IDs，请运行：

```
aws ec2 describe-subnets --filters "Name=vpc-id,Values=vpc-id"
```

**重要**  
仅包括私有子网。 CodeBuild 如果您提供公有子网，则会失败。公有子网具有到[互联网网关](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html)的默认路由，而私有子网没有。

运行以下命令以获取安全组 IDs。 IDs 也可以通过以下方式获得 AWS 管理控制台：

```
aws ec2 describe-security-groups --filters "Name=vpc-id,Values=vpc-id"
```

这些值将类似于：

```
vpc-id: vpc-045ch35y28dec3a05
subnets:
  - subnet-04029a82e6ae46968
  - subnet-0f500a9294fc5f26a
 security-groups:
  - sg-03bc4c4ce32d67e8d
```

**确保 CodeBuild 权限**  
Amazon VPC 支持需要具有某些权限，例如，能够创建弹性网络接口。

如果在控制台中创建环境，请在执行环境创建向导期间输入这些值。如果要以编程方式创建环境，您的 `spec.yaml` 如下所示：

```
proton: EnvironmentSpec

spec:
  codebuild_vpc_id: vpc-045ch35y28dec3a05
  codebuild_subnets:
    - subnet-04029a82e6ae46968
    - subnet-0f500a9294fc5f26a
  codebuild_security_groups:
    - sg-03bc4c4ce32d67e8d
```