AWS CodeBuild の Amazon Elastic File System サンプル - AWS CodeBuild

AWS CodeBuild の Amazon Elastic File System サンプル

Amazon EC2 インスタンスのスケーラブルな共有ファイルサービスである Amazon Elastic File System で AWS CodeBuild ビルドを作成できます。Amazon EFS のストレージ容量は伸縮自在なため、ファイルの追加および削除に合わせて拡大または縮小されます。また、ファイルシステムを作成、設定するために使用できるシンプルなウェブサービスインターフェイスを提供します。さらに、ファイルストレージインフラストラクチャも自動的に管理されるため、ファイルシステム設定のデプロイ、パッチ適用、保守について心配する必要がありません。詳細については、Amazon Elastic File System ユーザーガイドの「Amazon Elastic File System とは」を参照してください。

このサンプルでは、Java アプリケーションが Amazon EFS ファイルシステムにマウントされて構築されるように CodeBuild プロジェクトを設定する方法を示します。開始する前に、S3 入力バケットまたは AWS CodeCommit、GitHub、GitHub Enterprise Server、Bitbucket リポジトリにアップロードされる Java アプリケーションをビルドする準備ができている必要があります。

ファイルシステムの転送中のデータは暗号化されます。別のイメージを使用して転送中のデータを暗号化するには、「転送中のデータの暗号化」を参照してください。

概要ステップ

このサンプルでは、Amazon EFS で AWS CodeBuild を使用するために必要な 3 つの概要ステップについて説明します。

  1. AWS アカウントに Virtual Private Cloud (VPC) を作成します。

  2. この VPC を使用するファイルシステムを作成します。

  3. VPC を使用する CodeBuild プロジェクトを作成および構築します。CodeBuild プロジェクトでは、以下を使用してファイルシステムが識別されます。

    • 一意のファイルシステム識別子。ビルドプロジェクトでファイルシステムを指定するときに識別子を選択します。

    • ファイルシステム ID。ID は、Amazon EFS コンソールでファイルシステムを開くと表示されます。

    • マウントポイント。ファイルシステムをマウントする Docker コンテナ内のディレクトリです。

    • マウントオプション。ファイルシステムのマウント方法に関する詳細が含まれます。

注記

Amazon EFS で作成されたファイルシステムは Linux プラットフォームでのみサポートされます。

AWS CloudFormation を使用した VPC の作成

AWS CloudFormation テンプレートを使用して VPC を作成します。

  1. AWS CloudFormation VPC テンプレート」の手順に従って、AWS CloudFormation で VPC を作成します。

    注記

    この AWS CloudFormation テンプレートによって作成される VPC には、2 つのプライベートサブネットと 2 つのパブリックサブネットがあります。プライベートサブネットを使用するのは、Amazon EFS で作成したファイルシステムを、AWS CodeBuild でマウントする場合のみです。いずれかのパブリックサブネットを使用する場合、ビルドに失敗します。

  2. AWS Management Console にサインインして、Amazon VPC コンソール (https://console.aws.amazon.com/vpc/) を開きます。

  3. AWS CloudFormation で作成した VPC を選択します。

  4. [説明] タブに表示される VPC の名前と ID を書き留めます。どちらも、このサンプルの後半で AWS CodeBuild プロジェクトを作成するときに必要になります。

VPC を使用した Amazon Elastic File System ファイルシステムを作成する

先ほど作成した VPC を使用して、このサンプルのシンプルな Amazon EFS ファイルシステムを作成します。

  1. AWS Management Console にサインインして Amazon EFS コンソール ( https://console.aws.amazon.com/efs/) を開きます。

  2. [Create file system] を選択します。

  3. [VPC] で、このサンプルの前のステップで書き留めた VPC 名を選択します。

  4. サブネットに関連付けられているアベイラビリティーゾーンの選択したままにしておきます。

  5. [Next Step] (次のステップ) をクリックします。

  6. [Add tags] (タグの追加) のデフォルトの [Name] (名前) キーにある [Value] (値) に、Amazon EFS ファイルシステムの名前を入力します。

  7. デフォルトのパフォーマンスモードおよびスループットモードとして [General Purpose (汎用)] および [Bursting (バースト)] を選択したまま [Next Step (次のステップ)] を選択します。

  8. [Configure client access (クライアントアクセスの設定)] で、[Next Step (次のステップ)] を選択します。

  9. [Create File System (ファイルシステムの作成)] を選択します。

  10. (オプション) 転送時のデータ暗号化を適用するポリシーを、Amazon EFS ファイルシステムに追加することをお勧めします。Amazon EFS コンソールで、[ファイルシステムポリシー]、[編集]、[すべてのクライアントに転送中の暗号化を適用する] ボックス、[保存] の順に選択します。

Amazon EFS で使用する CodeBuild プロジェクトを作成する

このサンプルで先ほど作成した VPC を使用する AWS CodeBuild プロジェクトを作成します。ビルドを実行すると、先ほど作成した Amazon EFS ファイルシステムがマウントされます。次に、Java アプリケーションによって作成された .jar ファイルがファイルシステムのマウントポイントディレクトリに保存されます。

  1. AWS CodeBuild コンソール (https://console.aws.amazon.com/codesuite/codebuild/home) を開きます。

  2. ナビゲーションペインで [ビルドプロジェクト] を選択し、次に [ビルドプロジェクトの作成] を選択します。

  3. [Project name (プロジェクト名)] にプロジェクトの名前を入力します。

  4. [ソースプロバイダー] で、構築する Java アプリケーションが含まれているリポジトリを選択します。

  5. CodeBuild がアプリケーションを見つけるために使用するリポジトリ URL などの情報を入力します。オプションはソースプロバイダーごとに異なります。詳細については、「Choose source provider」を参照してください。

  6. [環境イメージ] で、[Managed image (マネージド型イメージ)] を選択します。

  7. [オペレーティングシステム] で、[Amazon Linux 2] を選択します。

  8. [ランタイム] で、[Standard (標準)] を選択します。

  9. [イメージ] で、[aws/codebuild/amazonlinux2-x86_64-standard:4.0] を選択します。

  10. [環境タイプ] で、[Linux] を選択します。

  11. [特権付与] を選択します。

    注記

    デフォルトでは、Docker コンテナはどのデバイスにもアクセスできません。権限モードは、ビルドプロジェクトの Docker コンテナにすべてのデバイスへのアクセスを許可します。詳細については、Docker Docs Web サイトの「Runtime Privilege and Linux Capabilities」を参照してください。また、Windows は特権モードをサポートしていません。

  12. [Service role (サービスロール)] で、[New service role (新しいサービスロール)] を選択します。[Role name] (ロール名) に、CodeBuild により作成されたロールの名前を入力します。

  13. [Additional configuration (追加設定)] を展開します。

  14. [VPC (VPC)] で、VPC ID を選択します。

  15. [サブネット] で、VPC に関連付けられているプライベートサブネットのうち 1 つ以上を選択します。Amazon EFS ファイルシステムをマウントするビルドでプライベートサブネットを使用する必要があります。パブリックサブネットを使用している場合、ビルドに失敗します。

  16. [Security groups (セキュリティグループ)] で、デフォルトのセキュリティグループを選択します。

  17. [ファイルシステム] で、以下の情報を入力します。

    • [識別子] に、一意のファイルシステム識別子を入力します。識別子の長さは 129 文字未満である必要があります。英数字とアンダースコアのみを使用できます。一意のファイルシステム識別子。CodeBuild によって使用されて、伸縮自在なファイルシステムを識別する環境変数が作成されます。環境変数の形式は大文字の CODEBUILD_<file_system_identifier> です。たとえば、my_efs と入力すると、環境変数は CODEBUILD_MY_EFS になります。

    • [ID] で、ファイルシステム ID を選択します。

    • (オプション) ファイルシステムのディレクトリを入力します。CodeBuild はこのディレクトリをマウントします。[ディレクトリパス] を空白のままにすると、CodeBuild はファイルシステム全体をマウントします。パスはファイルシステムのルートからの相対です。

    • [マウントポイント] に、ファイルシステムをマウントするディレクトリの絶対パスを入力します。このディレクトリが存在しない場合は、CodeBuild によってビルド中に作成されます。

    • (オプション) マウントオプションを入力します。[マウントオプション] を空白のままにすると、CodeBuild はデフォルトのマウントオプションを使用します。

      nfsvers=4.1 rsize=1048576 wsize=1048576 hard timeo=600 retrans=2

      詳細については、Amazon Elastic File System ユーザーガイドの「NFS の推奨されるマウントオプション」を参照してください。

  18. [ビルド仕様] で、[ビルドコマンドの挿入]、[Switch to editor (エディタに切り替え)] の順に選択します。

  19. エディタに次のビルド仕様コマンドを入力します。<file_system_identifier> をステップ 17 で入力した識別子に置き換えます。大文字を使用します (CODEBUILD_MY_EFS など)。

    version: 0.2 phases: install: runtime-versions: java: corretto11 build: commands: - mvn compile -Dgpg.skip=true -Dmaven.repo.local=$CODEBUILD_<file_system_identifier>
  20. 他のすべての設定にはデフォルト値を使用し、[Create build project (ビルドプロジェクトの作成)] を選択します。ビルドが完了すると、プロジェクトのコンソールページが表示されます。

  21. [Start build] を選択します。

CodeBuild と Amazon EFS のサンプルサマリー

AWS CodeBuild プロジェクトがビルドされた後:

  • Java アプリケーションによって作成された .jar ファイルがあります。このファイルは Amazon EFS ファイルシステムのマウントポイントディレクトリにビルドされています。

  • ファイルシステムを識別する環境変数は、プロジェクトの作成時に入力したファイルシステム識別子を使用して作成されます。

詳細については、Amazon Elastic File System ユーザーガイドの「ファイルシステムのマウント」を参照してください。

トラブルシューティング

CodeBuild で Amazon EFS を設定するときに発生する可能性のあるエラーは次のとおりです。

CLIENT_ERROR: mounting '127.0.0.1:/' failed. permission denied (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。パーミッションが拒否されました)

IAM 認証は、CodeBuild を使用した Amazon EFS のマウントではサポートされていません。カスタム Amazon EFS ファイルシステムポリシーを使用している場合は、すべての IAM プリンシパルへの読み取りおよび書き込みアクセスを許可する必要があります。例:

"Principal": { "AWS": "*" }

CLIENT_ERROR: mounting '127.0.0.1:/' failed. connection reset by peer (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。ピアによって接続がリセットされました)

この問題の原因は 2 つ考えられます。

  • CodeBuild VPC サブネットが、Amazon EFS マウントターゲットとは異なるアベイラビリティーゾーンにあります。Amazon EFS マウントターゲットと同じアベイラビリティーゾーンに VPC サブネットを追加することで、この問題を解決できます。

  • セキュリティグループには、Amazon EFS と通信する許可がありません。これを解決するには、VPC(VPC のプライマリ CIDR ブロックを追加する)またはセキュリティグループ自体からのすべてのトラフィックを許可するインバウンドルールを追加します。

VPC_CLIENT_ERROR: Unexpected EC2 error: UnauthorizedOperation (VPC_CLIENT_ERROR: 予期せぬEC2エラー UnauthorizedOperation)

このエラーは、CodeBuild プロジェクトの VPC 設定内のすべてのサブネットがパブリックサブネットである場合に発生します。ネットワーク接続を確保するには、VPC 内に少なくとも 1 つのプライベートサブネットが必要です。