Amazon Virtual Private Cloud で AWS CodeBuild を使用する - AWS CodeBuild

Amazon Virtual Private Cloud で AWS CodeBuild を使用する

通常、AWS CodeBuild は VPC 内のリソースにアクセスできません。アクセスできるようにするには、CodeBuild プロジェクト設定で追加の VPC 固有の設定情報を指定する必要があります。これには、VPC ID、VPC サブネット IDs、および VPC セキュリティグループ IDs が含まれます。 VPC 対応のビルドは、VPC 内のリソースにアクセスできます。Amazon VPC で VPC を設定する方法の詳細については、Amazon VPC ユーザーガイドを参照してください。

注記

CodeBuild からの VPC 接続は Windows ではサポートされていません。

ユースケース

AWS CodeBuild からの VPC 接続により、次のことが可能になります。

  • プライベートサブネット上に分離された Amazon RDS データベース内のデータに対して、ビルドから統合テストを実行する。

  • Amazon ElastiCache クラスターのデータをテストから直接クエリする。

  • Amazon EC2、Amazon ECS、または内部 Elastic Load Balancing を使用するサービスでホストされる内部ウェブサービスを操作する。

  • Python 用 PyPI、Java 用 Maven、Node.js 用 npm など、セルフホスト型の内部アーティファクトリポジトリから依存関係を取得します。

  • Amazon VPC エンドポイント経由でのみアクセスできるように設定された S3 バケット内のオブジェクトにアクセスする。

  • 固定 IP アドレスを必要とする外部ウェブサービスを、サブネットに関連付けられた NAT ゲートウェイまたは NAT インスタンスの Elastic IP アドレスを使用してクエリする。

お客様のビルドは、VPC でホストされている任意のリソースにアクセスできます。

CodeBuild プロジェクトでの Amazon VPC アクセスの許可

以下の設定を VPC 設定に含めます。

  • [VPC ID] で、CodeBuild が使用する VPC ID を選択します。

  • [サブネット] で、CodeBuild が使用するリソースへのルートを含む NAT 変換を持つプライベートサブネットを選択します。

  • [セキュリティグループ] で、CodeBuild が VPCs のリソースへのアクセスを許可するために使用するセキュリティグループを選択します。

コンソールを使用してビルドプロジェクトを作成する方法については、「ビルドプロジェクトの作成 (コンソール)」を参照してください。CodeBuild プロジェクトを作成または変更する場合、[VPC] で、VPC ID、サブネット、セキュリティグループを選択します。

AWS CLI を使用してビルドプロジェクトを作成する方法については、「ビルドプロジェクトの作成 (AWS CLI)」を参照してください。CodeBuild で AWS CLI を使用している場合は、CodeBuild が IAM ユーザーに代わってサービスを操作するために使用するサービスロールにポリシーをアタッチする必要があります。詳細については、VPC ネットワークインターフェイスを作成するために必要な AWS のサービスへのアクセスを CodeBuild に許可する を参照してください。

- vpcConfig オブジェクトには、 が含まれている必要があります vpcId, securityGroupIds, および subnets.

  • vpcId: 必須。CodeBuild で使用される VPC ID。リージョン内のすべての Amazon VPC IDs を一覧表示するには、次のコマンドを実行します。

    aws ec2 describe-vpcs
  • subnets: 必須。で使用されるリソースを含むサブネット IDs。CodeBuildこの IDs を取得するには、次のコマンドを実行します。

    aws ec2 describe-subnets --filters "Name=vpc-id,Values=<vpc-id>" --region us-east-1
    注記

    us-east-1 は、実際のリージョンに置き換えます。

  • securityGroupIds: 必須。が IDs 内のリソースへのアクセスを許可するために使用するセキュリティグループ CodeBuild。VPCs この IDs を取得するには、次のコマンドを実行します。

    aws ec2 describe-security-groups --filters "Name=vpc-id,Values=<vpc-id>" --region us-east-1
    注記

    us-east-1 は、実際のリージョンに置き換えます。

VPCs のベストプラクティス

CodeBuild を使用するように VPC を設定する場合は、このチェックリストを使用します。

  • パブリックサブネットとプライベートサブネット、および NAT ゲートウェイを使用して VPC を設定します。NAT ゲートウェイはパブリックサブネット内に存在する必要があります。詳細については、Amazon VPC ユーザーガイドの「パブリックサブネットとプライベートサブネットを持つ VPC (NAT)」を参照してください。

    重要

    VPC で CodeBuild を使用するには、NAT ゲートウェイまたは NAT インスタンスが必要です。これにより、CodeBuild がパブリックエンドポイントに到達できるようになります (ビルドの実行時に CLI コマンドを実行するなど)。CodeBuild は、作成したネットワークインターフェイスへの Elastic IP アドレスの割り当てをサポートしていないため、NAT ゲートウェイや NAT インスタンスの代わりにインターネットゲートウェイを使用することはできません。また、Amazon EC2 は、Amazon EC2 インスタンスの起動以外で作成されたネットワークインターフェイスに対しては、パブリック IP アドレスの自動割り当てをサポートしていません。

  • VPC に複数のアベイラビリティーゾーンを含めます。

  • セキュリティグループに、ビルドに許可されたインバウンド (進入) トラフィックがないことを確認します。CodeBuild にはアウトバウンドトラフィックに特定の要件はありませんが、ビルドに必要なすべてのインターネットリソース (GitHub、Amazon S3 など) へのアクセスを許可する必要があります。

    詳細については、Amazon VPC ユーザーガイドの「セキュリティグループルール」を参照してください。

  • ビルド用に別個のサブネットを設定します。

  • VPC にアクセスするように CodeBuild プロジェクトを設定する場合、プライベートサブネットのみを選択します。

Amazon VPC で VPC を設定する方法の詳細については、Amazon VPC ユーザーガイドを参照してください。

AWS CloudFormation を使用して CodeBuild VPC 機能を使用するように VPC を設定する方法の詳細については、「AWS CloudFormation VPC テンプレート」を参照してください。

VPC 設定のトラブルシューティング

エラーメッセージに表示される情報を、問題の特定、診断、対処に役立てます。

一般的な CodeBuild VPC エラーのトラブルシューティングに役立つガイドラインを以下に示します。Build does not have internet connectivity. Please check subnet network configuration

  1. インターネットゲートウェイが VPC にアタッチされていることを確認します

  2. パブリックサブネットのルートテーブルがインターネットゲートウェイを参照していることを確認します

  3. ネットワーク ACLs がトラフィックのフローを許可していることを確認します

  4. セキュリティグループがトラフィックのフローを許可していることを確認します

  5. NAT ゲートウェイのトラブルシューティングを行います

  6. プライベートサブネットのルートテーブルが NAT ゲートウェイを参照していることを確認します

  7. IAM ユーザーに代わってサービスを操作するために CodeBuild が使用するサービスロールに、「このポリシー」のアクセス許可が付与されていることを確認します。詳細については、「CodeBuild サービスロールの作成」を参照してください。

    にアクセス許可がない場合は、「CodeBuild」というエラーが表示されることがあります。Unexpected EC2 error: UnauthorizedOperation このエラーは、VPC での作業に必要な CodeBuild アクセス許可が Amazon EC2 にない場合に発生することがあります。