

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# の Amazon Elastic File System サンプル AWS CodeBuild
<a name="sample-efs"></a>

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

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

ファイルシステムの転送中のデータは暗号化されます。別のイメージを使用して転送中のデータを暗号化するには、「[転送中のデータの暗号化](https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html)」を参照してください。

**Topics**
+ [Amazon Elastic File System AWS CodeBuild で を使用する](#sample-efs-high-level-steps)
+ [Amazon EFS 統合のトラブルシューティング](sample-efs-troubleshooting.md)

## Amazon Elastic File System AWS CodeBuild で を使用する
<a name="sample-efs-high-level-steps"></a>

このサンプルでは、 で Amazon EFS を使用するために必要な 4 つの大まかなステップについて説明します AWS CodeBuild。具体的には次の 2 つです。

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

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

1. VPC を使用する CodeBuild プロジェクトを作成および構築します。CodeBuild プロジェクトでは、以下を使用してファイルシステムが識別されます。
   +  一意のファイルシステム識別子。ビルドプロジェクトでファイルシステムを指定するときに識別子を選択します。
   + ファイルシステム ID。ID は、Amazon EFS コンソールでファイルシステムを開くと表示されます。
   +  マウントポイント。ファイルシステムをマウントする Docker コンテナ内のディレクトリです。
   + マウントオプション。ファイルシステムのマウント方法に関する詳細が含まれます。

1. ビルドプロジェクトを確認して、正しいプロジェクトファイルと変数が生成されていることを確認します。

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

 

**Topics**
+ [ステップ 1: を使用して VPC を作成する CloudFormation](#sample-efs-create-vpc)
+ [ステップ 2: VPC を使用した Amazon Elastic File System ファイルシステムを作成](#sample-efs-create-efs)
+ [ステップ 3: Amazon EFS で使用する CodeBuild プロジェクトを作成](#sample-efs-create-acb)
+ [ステップ 4: ビルドプロジェクトを確認](#sample-efs-summary)

### ステップ 1: を使用して VPC を作成する CloudFormation
<a name="sample-efs-create-vpc"></a>

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

1.  「」の手順に従って[CloudFormation VPC テンプレート](cloudformation-vpc-template.md)、 CloudFormation を使用して VPC を作成します。
**注記**  
 この CloudFormation テンプレートによって作成された VPC には、2 つのプライベートサブネットと 2 つのパブリックサブネットがあります。プライベートサブネットを使用するのは、Amazon EFS で作成したファイルシステムを、 AWS CodeBuild でマウントする場合のみです。いずれかのパブリックサブネットを使用する場合、ビルドに失敗します。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) で Amazon VPC コンソールを開きます。

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

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

### ステップ 2: VPC を使用した Amazon Elastic File System ファイルシステムを作成
<a name="sample-efs-create-efs"></a>

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

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/) で Amazon EFS コンソールを開きます。

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

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

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

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

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

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

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

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

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

### ステップ 3: Amazon EFS で使用する CodeBuild プロジェクトを作成
<a name="sample-efs-create-acb"></a>

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

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

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

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

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

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

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

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

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

1.  [**イメージ**] で、[**aws/codebuild/amazonlinux-x86\$164-standard:4.0**] を選択します。

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

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

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

1.  [**Enable this flag if you want to build Docker images or want your builds to get elevated privileges (Docker イメージを構築する場合、またはビルドで昇格された権限を取得する場合は、このフラグを有効にする)**] を選択します。
**注記**  
デフォルトでは、Docker デーモンは非 VPC ビルドで有効になっています。VPC ビルドに Docker コンテナを使用する場合は、Docker Docs ウェブサイトの「[Runtime Privilege and Linux Capabilities](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities)」を参照して、特権モードを有効にします。また、Windows は特権モードをサポートしていません。

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

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

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

1.  [**ファイルシステム**] で、以下の情報を入力します。
   + [**識別子**] に、一意のファイルシステム識別子を入力します。識別子の長さは 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 の推奨されるマウントオプション](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs-nfs-mount-settings.html)」を参照してください。

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

1.  エディタに次のビルド仕様コマンドを入力します。`<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>
   ```

1.  他のすべての設定にはデフォルト値を使用し、[**Create build project (ビルドプロジェクトの作成)**] を選択します。ビルドが完了すると、プロジェクトのコンソールページが表示されます。

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

### ステップ 4: ビルドプロジェクトを確認
<a name="sample-efs-summary"></a>



 AWS CodeBuild プロジェクトの構築後: 
+  Java アプリケーションによって作成された .jar ファイルがあります。このファイルは Amazon EFS ファイルシステムのマウントポイントディレクトリにビルドされています。
+  ファイルシステムを識別する環境変数は、プロジェクトの作成時に入力したファイルシステム識別子を使用して作成されます。

 詳細については、*Amazon Elastic File System ユーザーガイド*の「[ファイルシステムのマウント](https://docs.aws.amazon.com/efs/latest/ug/mounting-fs.html)」を参照してください。

# Amazon EFS 統合のトラブルシューティング
<a name="sample-efs-troubleshooting"></a>

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

**Topics**
+ [CLIENT\$1ERROR: mounting '127.0.0.1:/' failed. permission denied (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。パーミッションが拒否されました)](#sample-efs-troubleshooting.permission-denied)
+ [CLIENT\$1ERROR: mounting '127.0.0.1:/' failed. connection reset by peer (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。ピアによって接続がリセットされました)](#sample-efs-troubleshooting.connection-reset)
+ [VPC\$1CLIENT\$1ERROR: Unexpected EC2 error: UnauthorizedOperation (VPC\$1CLIENT\$1ERROR: 予期せぬEC2エラー UnauthorizedOperation)](#sample-efs-troubleshooting.unauthorized-operation)

## CLIENT\$1ERROR: mounting '127.0.0.1:/' failed. permission denied (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。パーミッションが拒否されました)
<a name="sample-efs-troubleshooting.permission-denied"></a>

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

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

## CLIENT\$1ERROR: mounting '127.0.0.1:/' failed. connection reset by peer (クライアントエラー:'127.0.0.1: /' のマウントに失敗しました。ピアによって接続がリセットされました)
<a name="sample-efs-troubleshooting.connection-reset"></a>

この問題の原因は 2 つ考えられます。
+ CodeBuild VPC サブネットが、Amazon EFS マウントターゲットとは異なるアベイラビリティーゾーンにあります。Amazon EFS マウントターゲットと同じアベイラビリティーゾーンに VPC サブネットを追加することで、この問題を解決できます。
+ セキュリティグループには、Amazon EFS と通信する許可がありません。これを解決するには、VPC（VPC のプライマリ CIDR ブロックを追加する）またはセキュリティグループ自体からのすべてのトラフィックを許可するインバウンドルールを追加します。

## VPC\$1CLIENT\$1ERROR: Unexpected EC2 error: UnauthorizedOperation (VPC\$1CLIENT\$1ERROR: 予期せぬEC2エラー UnauthorizedOperation)
<a name="sample-efs-troubleshooting.unauthorized-operation"></a>

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