

# コンソールを使用した Amazon ECS での Amazon EFS ファイルシステムの設定
<a name="tutorial-efs-volumes"></a>

Amazon ECS で Amazon Elastic File System (Amazon EFS) ファイルシステムを使用する方法について説明します。

## ステップ 1: Amazon ECS クラスターを作成する
<a name="efs-create-cluster"></a>

次の手順に従って Amazon ECS クラスターを作成します。

**新しいクラスターを作成するには (Amazon ECS コンソール)**

開始する前に、適切な IAM アクセス許可を割り当ててください。詳細については、「[Amazon ECS クラスターの例](security_iam_id-based-policy-examples.md#IAM_cluster_policies)」を参照してください。

1. コンソール ([https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)) を開きます。

1. ナビゲーションバーから、使用するリージョンを選択します。

1. ナビゲーションペインで **[Clusters]** (クラスター) を選択してください。

1. **[Clusters]** (クラスター) ページで、**[Create Cluster]** (クラスターの作成) を選択します。

1. **[クラスター設定]** の **[クラスター名]** に、名前として「`EFS-tutorial`」を入力します。

1. (オプション) タスクとサービスが起動する VPC とサブネットを変更するには、**[Networking]** (ネットワーク) で、次のいずれかのオペレーションを実行します。
   + サブネットを削除するには、**[Subnets]** (サブネット) で、削除するサブネットごとに **[X]** を選択します。
   + **[デフォルト]** VPC 以外の VPC に変更するには、**[VPC]** で既存の **[VPC]** を選択し、**[サブネット]** で各サブネットを選択します。

1.  クラスターに Amazon EC2 インスタンスを追加するには、**[インフラストラクチャー]** を展開して **[Amazon EC2 インスタンス]** を選択します。次に、キャパシティープロバイダーとして機能する Auto Scaling グループを設定します。

   1. Auto Scaling グループを作成するには、**Auto Scaling group(ASG)** (Auto Scaling グループ) から、**[Create new group]** (新しいグループの作成) を選択し、グループに関する以下の詳細情報を入力します。
     + **[オペレーティングシステム/アーキテクチャ]** で、[Amazon Linux 2] を選択します。
     + [**EC2 instance type**] で、[`t2.micro`] を選択します。

        **[SSH key pair]** (SSH キーペア) を使用する場合、インスタンスに接続する際に ID を証明するペアを選択してください。
     + **[キャパシティ]** に、「`1`」と入力します。

1. **[作成]** を選択します。

## ステップ 2: Amazon EC2 インスタンスと Amazon EFS ファイルシステムのセキュリティグループを作成する
<a name="efs-security-group"></a>

このステップでは、ポート 80 でのインバウンドネットワークトラフィックを許可する Amazon EC2 インスタンスと、コンテナインスタンスからのインバウンドアクセスを許可する Amazon EFS ファイルシステムのセキュリティグループを作成します。

以下のオプションを使用して Amazon EC2 インスタンスのセキュリティグループを作成します。
+ **[セキュリティグループ名]** — セキュリティグループの名前を入力します。
+ **[VPC]** - クラスター用に前に特定した VPC を選択します。
+ **インバウンドルール**
  + **タイプ** - **HTTP**
  + **ソース** - **0.0.0.0/0**

以下のオプションを使用して Amazon EFS ファイルシステムのセキュリティグループを作成します。
+ **[セキュリティグループ名]** — セキュリティグループの名前を入力します。例えば、`EFS-access-for-sg-dc025fa2`。
+ **[VPC]** - クラスター用に前に特定した VPC を選択します。
+ **インバウンドルール**
  + **[タイプ]** – **[NFS]**
  + **ソース** - **[カスタム]**で、インスタンス用に作成したセキュリティグループの ID を使用します。

セキュリティグループの作成方法について、詳細は「*Amazon EC2 ユーザーガイド*」の「[Amazon EC2 インスタンス用のセキュリティグループの作成](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/creating-security-group.html)」を参照してください。

## ステップ 3:Amazon EFS ファイルシステムを作成する
<a name="efs-create-filesystem"></a>

このステップでは、Amazon EFS ファイルシステムを作成します。

**Amazon ECS タスク用の Amazon EFS ファイルシステムを作成するには**

1. Amazon Elastic File System コンソール ([https://console.aws.amazon.com/efs/](https://console.aws.amazon.com/efs/)) を開きます。

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

1. ファイルシステムの名前を入力し、コンテナインスタンスをホストする VPC を選択します。デフォルトでは、指定した VPC の各サブネットに、その VPC のデフォルトセキュリティグループを使用するマウントターゲットが割り当てられます。次に **[カスタマイズ]** を選択します。
**注記**  
このチュートリアルでは、Amazon EFS ファイルシステム、Amazon ECS クラスター、コンテナインスタンス、およびタスクが同じ VPC 内に存在することを前提としています。別の VPC からファイルシステムをマウントする方法について、詳細は「*Amazon EFS ユーザーガイド*」の「[Walkthrough: Mount a file system from a different VPC](https://docs.aws.amazon.com/efs/latest/ug/efs-different-vpc.html)」を参照してください。

1. **[ファイルシステムの設定]** ページでオプション設定を行い、**[パフォーマンス設定]** でファイルシステムの**[バースト]** スループットモードを選択します。設定が完了したら、**[次へ]** を選択します。

   1. (オプション) ファイルシステムのタグを追加します。例えば、ファイルシステムの一意の名前を指定するには、[**名前**] キーの横にある [**値**] 列にその名前を入力します。

   1. (オプション) ライフサイクル管理を有効にして、アクセス頻度の低いストレージのコストを節約します。詳細については、[Amazon Elastic File System User Guide](https://docs.aws.amazon.com/efs/latest/ug/lifecycle-management-efs.html) の「*EFS のライフサイクル管理*」を参照してください。

   1. (オプション) 暗号化を有効にします。保管時の Amazon EFS ファイルシステムの暗号化を有効にするチェックボックスを選択します。

1. **[ネットワークアクセス]**ページの **[マウントターゲット]** で、各アベイラビリティーゾーンの既存のセキュリティグループ設定を、[ステップ 2: Amazon EC2 インスタンスと Amazon EFS ファイルシステムのセキュリティグループを作成する](#efs-security-group) でファイルシステム用に作成したセキュリティグループに置き換え、**[次へ]** を選択します。

1.  このチュートリアルでは**[ファイルシステムポリシー]**を設定する必要はないので、**[次へ]** を選択すればセクションをスキップできます。

1. ファイルシステムのオプションを確認し、**[作成]** を選択してプロセスを完了します。

1. **[ファイルシステム]** 画面から、**ファイルシステム ID** を書き留めます。次のステップで、Amazon ECS タスク定義で、この値をリファレンスします。

## ステップ 4: Amazon EFS ファイルシステムにコンテンツを追加する
<a name="efs-add-content"></a>

このステップでは、Amazon EFS ファイルシステムを Amazon EC2 インスタンスにマウントし、コンテンツを追加します。これは、このチュートリアルでデータの永続的な性質を示すことを目的としたテストです。この機能を使用する場合は、通常、Amazon EFS ファイルシステムにデータを書き込むためのアプリケーションや別の方法があります。

**Amazon EC2 インスタンスを作成し、Amazon EFS ファイルシステムをマウントします。**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. [**インスタンスの作成**] を選択してください。

1. **[アプリケーションおよび OS イメージ (Amazon マシンイメージ)]** で、**[Amazon Linux 2 AMI (HVM)]** を選択します。

1. **[インスタンス タイプ]** で、デフォルトのインスタンスタイプ `t2.micro` をそのまま使用します。

1.  **[キーペア (ログイン)]** で、インスタンスへの SSH アクセス用のキーペアを選択します。

1. **[ネットワーク設定]** で、Amazon EFS ファイルシステムおよび Amazon ECS クラスター用に指定した VPC を選択します。サブネットと、[ステップ 2: Amazon EC2 インスタンスと Amazon EFS ファイルシステムのセキュリティグループを作成する](#efs-security-group) で作成したインスタンスセキュリティグループを選択します。インスタンスのセキュリティグループを設定します。**[パブリック IP の自動割り当て]** が有効になっていることを確認します。

1. **[ストレージの設定]** で、ファイルシステムの **[編集]** ボタンを選択し、**[EFS]** を選択します。[ステップ 3:Amazon EFS ファイルシステムを作成する](#efs-create-filesystem) で作成したファイルシステムを選択します。必要に応じて、マウントポイントを変更したり、デフォルト値をそのまま使用したりできます。
**重要**  
インスタンスにファイルシステムを追加する前に、サブネットを選択する必要があります。

1. **[セキュリティグループを自動的に作成してアタッチする]** をオフにします。もう 1 つのチェックボックスはオンのままにしておきます。**[Add shared file system]** (共有ファイルシステムの追加) を選択します。

1. [**Advanced Details**] で、Amazon EFS ファイルシステムのマウント ステップを使用してユーザー データスクリプトが自動的に入力されていることを確認します。

1.  **[概要]** で、**[インスタンス数]** が **1** であることを確認します。**[インスタンスを起動]** を選択してください。

1. **[インスタンスを起動]** ページで、**[すべてのインスタンスを表示]** を選択して、インスタンスのステータスを表示します。最初、**[インスタンスの状態]** ステータスは `PENDING` です。状態が `RUNNING` に変わり、インスタンスがすべてのステータスチェックに合格すると、インスタンスは使用可能になります。

次に、Amazon EC2 インスタンスに接続し、コンテンツを Amazon EFS ファイルシステムに追加します。

**Amazon EC2 インスタンスに接続し、コンテンツを Amazon EFS ファイルシステムに追加するには**

1. 作成した Amazon EC2 インスタンスに SSH 接続します。詳細については、「Amazon EC2 ユーザーガイド」の「[SSH を使用した Linux インスタンスへの接続](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-to-linux-instance.html)」を参照してください。

1. ターミナルウィンドウから、**df -T** コマンドを実行して、Amazon EFS ファイルシステムがマウントされていることを確認します。次の出力では、Amazon EFS ファイルシステムのマウントを強調表示しています。

   ```
   $ df -T
   Filesystem     Type            1K-blocks    Used        Available Use% Mounted on
   devtmpfs       devtmpfs           485468       0           485468   0% /dev
   tmpfs          tmpfs              503480       0           503480   0% /dev/shm
   tmpfs          tmpfs              503480     424           503056   1% /run
   tmpfs          tmpfs              503480       0           503480   0% /sys/fs/cgroup
   /dev/xvda1     xfs               8376300 1310952          7065348  16% /
   127.0.0.1:/    nfs4     9007199254739968       0 9007199254739968   0% /mnt/efs/fs1
   tmpfs          tmpfs              100700       0           100700   0% /run/user/1000
   ```

1. Amazon EFS ファイルシステムのマウント先のディレクトリに移動します。上の例では `/mnt/efs/fs1` に移動します。

1. 以下の内容で `index.html` という名前のファイルを作成します。

   ```
   <html>
       <body>
           <h1>It Works!</h1>
           <p>You are using an Amazon EFS file system for persistent container storage.</p>
       </body>
   </html>
   ```

## ステップ 5: タスク定義を作成する
<a name="efs-task-def"></a>

次のタスク定義は、`efs-html` というデータボリュームを作成します。`nginx` コンテナは、ホストデータボリュームを NGINX ルート `/usr/share/nginx/html` にマウントします。

**Amazon ECS コンソールを使用して新しいタスク定義を作成するには**

1. コンソール ([https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)) を開きます。

1. ナビゲーションペインで、**タスクの定義** を選択します。

1. **[Create new task definition]** (新しいタスク定義の作成)、**[Create new task definition with JSON]** (JSON で新しいタスク定義を作成) の順に選択します。

1. JSON エディターボックスには、次の JSON テキストをコピーして貼り付けます。`fileSystemId` は、実際の Amazon EFS ファイルシステムの ID に置き換えます。

   ```
   {
       "containerDefinitions": [
           {
               "memory": 128,
               "portMappings": [
                   {
                       "hostPort": 80,
                       "containerPort": 80,
                       "protocol": "tcp"
                   }
               ],
               "essential": true,
               "mountPoints": [
                   {
                       "containerPath": "/usr/share/nginx/html",
                       "sourceVolume": "efs-html"
                   }
               ],
               "name": "nginx",
               "image": "public.ecr.aws/docker/library/nginx:latest"
           }
       ],
       "volumes": [
           {
               "name": "efs-html",
               "efsVolumeConfiguration": {
                   "fileSystemId": "fs-1324abcd",
                   "transitEncryption": "ENABLED"
               }
           }
       ],
       "family": "efs-tutorial",
       "executionRoleArn":"arn:aws:iam::111122223333:role/ecsTaskExecutionRole"
   }
   ```
**注記**  
Amazon ECS タスク実行 IAM ロールでは、Amazon EFS ファイルシステムをマウントするにあたり、特定の Amazon EFS 関連のアクセス許可は必要ありません。Amazon EFS のリソースベースのポリシーが存在しない場合、デフォルトで、ファイルシステム作成時にすべてのプリンシパル (\$1) にアクセス許可が付与されます。  
Amazon ECS タスクロールは、Amazon ECS タスク定義で「EFS IAM 認可」が有効になっている場合にのみ必要です。有効な場合、Amazon EFS のリソースベースのポリシーで タスクロール ID に対して Amazon EFS ファイルシステムへのアクセスを許可する必要があり、匿名アクセスは無効にする必要があります。

1. **[作成]** を選択します。

## ステップ 6: タスクを実行して結果を表示する
<a name="efs-run-task"></a>

さて、Amazon EFS ファイルシステムが作成され、NGINX コンテナのウェブコンテンツが用意されたので、作成したタスク定義を使用してタスクを実行できます。NGINX ウェブサーバーは、シンプルな HTML ページを提供します。Amazon EFS ファイルシステムのコンテンツを更新した場合、それらの変更は、そのファイルシステムがマウントされているすべてのコンテナにも伝達されます。

タスクは、クラスターのために定義したサブネットで実行されます。

**コンソールを使用してタスクを実行し結果を表示するには**

1. コンソール ([https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)) を開きます。

1. **[Clusters]** (クラスター) ページで、スタンドアロンタスクを実行するクラスターを選択します。

   サービスを起動するリソースを決定します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/tutorial-efs-volumes.html)

1. (オプション) スケジュールされたタスクをクラスターのインフラストラクチャ全体に分散する方法を選択します。**[Compute configuration]** (コンピュート設定) を展開し、以下の操作を実行します。    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/tutorial-efs-volumes.html)

1. **Application type(アプリケーションの種類)**で、**Task(タスク)**を選択します。

1. **[タスク定義]** で、先に作成した `efs-tutorial` タスク定義を選択します。

1. **[必要なタスク]** に、「`1`」と入力します。

1. **[作成]** を選択します。

1. **[クラスター]** ページで、**[インフラストラクチャ]** を選択します。

1. **[コンテナインスタンス]** で、接続先となるコンテナインスタンスを選択します。

1. **[コンテナインスタンス]** ページの インスタンスの **[ネットワーキング]** で、インスタンスの **[パブリック IP]** を書き留めます。

1. ブラウザを開き、パブリック IP アドレスを入力します。次のメッセージが表示されます。

   ```
   It works!
   You are using an Amazon EFS file system for persistent container storage.
   ```
**注記**  
メッセージが表示されない場合は、コンテナインスタンスのセキュリティグループがポート 80 でインバウンドネットワークトラフィックを許可しており、ファイルシステムのセキュリティグループがコンテナインスタンスからのインバウンドアクセスを許可していることを確認してください。