

終止支援通知：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 命令。這些命令通常會使用 Infrastructure as Code (IaC) 工具來管理資源，例如 CDK。如果您在 Amazon VPC 中有資源，CodeBuild 可能無法存取它們。為了啟用此功能，CodeBuild 支援在特定 Amazon VPC 內執行的能力。幾個範例使用案例包括：
+ 從自我託管的內部成品儲存庫擷取相依性，例如`PyPI`適用於 Python、`Maven`適用於 Java 和`npm`適用於 Node.js 的
+ 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 Provisioning 在自訂 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`

**清單檔案**  
若要在 CodeBuild 中設定 Amazon VPC 設定，範本資訊清單中`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、子網路和安全群組。

若要取得您區域中所有 Amazon VPC IDs的清單，請執行下列命令：

```
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
```