チュートリアル: Amazon ECS で Amazon EFS ファイルシステムを使用 - Amazon Elastic Container Service

チュートリアル: Amazon ECS で Amazon EFS ファイルシステムを使用

Amazon Elastic File System (Amazon EFS) では、Amazon ECS タスクで使用するためのシンプルでスケーラブルなファイルストレージを提供します。Amazon EFS を使用すると、ストレージ容量がファイルの追加や削除に応じて自動的に拡大したりし縮小したり伸縮自在になります。アプリケーションでは、必要なときに必要なストレージを確保できます。

Amazon ECS で Amazon EFS ファイルシステムを使用すると、Amazon ECS のタスクのフリート全体のファイルシステムデータにアクセスできます。これにより、タスクの配置先のインフラストラクチャやコンテナインスタンスにかかわらず、すべてのタスクから同じ永続的ストレージにアクセスできます。Amazon ECS タスク定義で Amazon EFS ファイルシステムやコンテナマウントポイントを参照すると、Amazon ECS が自動的にファイルシステムをコンテナにマウントします。以下のセクションは、Amazon ECSでAmazon EFSの使用を開始するのに役立ちます。

この機能は EC2 起動タイプと Fargate 起動タイプの両方を使用するタスクでサポートされますが、このチュートリアルでは EC2 起動タイプを使用する Amazon ECS タスクを使用します。このチュートリアルは、ステップバイステップで従うことを意図していますが、これらのリソースの一部がアカウントで作成済みである場合は、一部のステップをスキップできます。

注記

Amazon EFSはすべてのリージョンで利用可能なわけではありません。リージョンのAmazon EFSのサポートについては、[ AWS全般的なリファレンス]の[「Amazon Elastic File System エンドポイントとクォータ]を参照してください。

ステップ 1: Amazon ECS クラスターを作成する

次の手順に従って Amazon ECS クラスターを作成します。AWS Management Console を使用して空でないクラスターを作成すると、Amazon ECS は Auto Scaling リソースとともに AWS CloudFormation スタックを作成します。

Amazon ECS クラスターを作成するには

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

  2. 画面上部のナビゲーションバーで、US West (Oregon) リージョンを選択します。

  3. ナビゲーションペインで [Clusters] (クラスター) を選択します。

  4. [Clusters] ページで、[Create Cluster] を選択します。

  5. [Select cluster compatibility (クラスターの互換性を選択)] で、[EC2 Linux + Networking (EC2 Linux + ネットワーク)]、[Next Step (次のステップ)] の順に選択します。

  6. [クラスター名] に、クラスター名として EFS-tutorial を入力します。

  7. [Provisioning model] (プロビジョニングモード) で、[On-Demand Instance] (オンデマンド インスタンス) を選択します。

  8. [EC2 instance type] で、[t2.micro] を選択します。

  9. [インスタンス数] に「1」と入力します。

  10. [EC2 AMI ID]にthe Amazon Linux 2 Amazon ECS 最適化 AMI を選択します。

  11. [EBS storage (GiB)] は、デフォルト設定のままにします。

  12. [Key pair (キーペア)] に、コンテナインスタンスで SSH にアクセスに使用する Amazon EC2 キーペアを選択します。これは、後でインスタンスに接続する際に必須です。

  13. [Networking] セクションで、コンテナインスタンスを起動する VPC を設定します。デフォルトでは、クラスター作成ウィザードで作成される新しい VPC には、異なるアベイラビリティーゾーンの 2 つのサブネットと、ポート 80 でインターネットに開かれているセキュリティグループが設定されます。HTTP サービスには、この基本的な設定で十分です。ただし、これらの設定は次の手順に従って変更できます。

    重要

    同じ VPC 内に Amazon EFS ファイルシステムを作成する必要があるため、クラスターで使用する VPC およびセキュリティグループ ID を記録します。

    1. [VPC] で、新しい VPC を作成するか、既存の VPC を選択します。

    2. (オプション) 新しい VPC を作成することを選択した場合は、[CIDR Block] (CIDR ブロック) で VPC の CIDR ブロックを選択します。詳細については、Amazon VPC ユーザーガイドの「VPC とサブネット」を参照してください。

    3. [Subnets] (サブネット) で、VPC に使用するサブネットを選択します。新しい VPC を作成することを選択した場合は、デフォルト設定をそのまま使用するか、ニーズに合わせて変更できます。既存の VPC を使用することを選択した場合は、その VPC 内 1 つ以上のサブネットを選択してクラスターで使用します。

    4. [セキュリティグループ] で、クラスターのコンテナインスタンスにアタッチするセキュリティグループを選択します。新しいセキュリティグループを作成することを選択した場合は、受信トラフィックを許可する CIDR ブロックを指定できます。デフォルトのポート 0.0.0.0/0 はインターネットに開放されています。1 つのポートまたは連続した一連のポートをコンテナインスタンスで開くポートとして選択できます。より複雑なセキュリティグループルールの場合は、作成済みの既存のセキュリティグループを選択できます。

      Amazon EFS ファイルシステムのセキュリティグループを作成する場合にも、このセキュリティグループを使用するため、ID をメモします。

      注記

      新しいセキュリティグループを作成することを選択し、クラスターの作成後にルールを変更することもできます。詳細については、Amazon EC2ユーザーガイドLinux インスタンス用Amazon EC2 セキュリティグループLinux インスタンス用」を参照してください。

    5. [コンテナインスタンスの IAM ロール] セクションで、コンテナインスタンスで使用する IAM ロールを選択します。アカウントにコンソールの初回実行ウィザードで作成されている ecsInstanceRole がある場合は、それがデフォルトで選択されます。このロールがアカウントにない場合は、このロールを作成することを選択できます。または別の IAM; ロールを選択してコンテナインスタンスで使用することもできます。

      重要

      使用する IAM ロールには、AmazonEC2ContainerServiceforEC2Role 管理ポリシーがアタッチされている必要があります。アタッチされていない場合、クラスターの作成時にエラーが発生します。適切な IAM アクセス許可を使用してコンテナインスタンスを起動しないと、Amazon ECS エージェントはクラスターに接続されません。詳細については、「Amazon ECS コンテナインスタンスの IAM ロール」を参照してください。

    6. [CloudWatch Container Insights] で、[Enable Container Insights] を選択解除します。この機能は、このチュートリアルでは必要ありません。

    7. [Create] を選択します。

ステップ 2: Amazon EFS ファイルシステムのセキュリティグループを作成する

このステップでは、コンテナインスタンスからのインバウンドアクセスを許可する、Amazon EFS ファイルシステムのセキュリティグループを作成します。このセキュリティグループには、前のステップでクラスター用に作成または参照したセキュリティグループを参照するインバウンドルールを含めます。

Amazon EFS ファイルシステムのセキュリティグループを作成するには

  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. 左のナビゲーションペインで [Security Groups]、[Create Security Group] の順に選択します。

  3. [セキュリティグループ名] に、セキュリティグループの一意の名前を入力します。例えば、EFS-access-for-sg-dc025fa2 です。

  4. [説明] に、セキュリティグループの説明を入力します。

  5. [VPC] で、クラスター用に前に特定した VPC を選択します。

  6. [Inbound rules] で、[Add rule] を選択します。

  7. [タイプ] で [NFS] を選択します。

  8. [Source] (ソース) に [Custom] (カスタム) を選択したら、クラスター作成時に特定したセキュリティグループ ID を入力します。

  9. [セキュリティグループの作成] を選択します。

ステップ 3:Amazon EFS ファイルシステムを作成する

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

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

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

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

  3. [Configure network access] ページで、コンテナインスタンスをホストする VPC を選択します。デフォルトでは、指定した VPC の各サブネットに、その VPC のデフォルトセキュリティグループを使用するマウントターゲットが割り当てられます。

    重要

    Amazon EFS ファイルシステム、Amazon ECS クラスター、コンテナインスタンス、およびタスクは同じ VPC 内に存在する必要があります。

  4. [Create mount targets] の [Security groups] で、ステップ 2 で作成したセキュリティグループを追加します。[Next Step (次のステップ)] をクリックします。

  5. [Configure file system settings] ページで、オプションの設定を構成し、[Next Step] を選択して続行します。

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

    2. (オプション) ライフサイクル管理を有効にして、アクセス頻度の低いストレージのコストを節約します。詳細については、Amazon Elastic File System User Guide の「EFS のライフサイクル管理」を参照してください。

    3. ファイルシステムのスループットモードを選択します。[Bursting] モードはデフォルトであり、ほとんどのファイルシステムにお勧めします。

    4. ファイルシステムのパフォーマンスモードを選択します。[General Purpose] モードはデフォルトであり、ほとんどのファイルシステムにお勧めします。

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

  6. [Configure client アクセス] ページで、[Next Step(次の ステップ)] を選択します。

  7. ファイルシステムのオプションを確認し、[Create File System] を選択してプロセスを完了します。

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

ステップ 4: Amazon EFS ファイルシステムにコンテンツを追加する

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

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

  1. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

  2. [Launch Instance] (インスタンスの起動) を選択します。

  3. [Amazon マシンイメージ] ページで、最新の [Amazon Linux 2 AM (HVM)] AMI を選択します。

  4. [Choose an Instance Type] ページで、デフォルトのインスタンスタイプ t2.micro を維持し、[Next: Configure Instance Details] を選択します。

  5. [Configure Instance Details] ページで以下の操作を実行します。

    1. [Network(ネットワーク)] で、Amazon EFS ファイルシステムおよび Amazon ECS クラスター用に指定した VPC を選択します。

    2. [Auto-assign Public IP] (パブリック IP の自動割当て) で、[Enable] (有効化) を選択します。それ以外の場合、インスタンスではパブリック IP アドレスまたはパブリック DNS 名を取得しません。

    3. [ファイルシステム] で、Amazon EFS ファイルシステムを選択します。必要に応じて、マウント先を変更したり、デフォルト値をそのまま使用したりできます。

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

  6. [Next: Add Storage]、[Next: Add Tags]、[Next: Configure Security Group] の順に選択して、インスタンスウィザードのステップ 5 に進みます。

  7. [Configure Security Group] ページで、[Select an existing security group] を選択し、ステップ 1 で作成したセキュリティグループを選択します。次に、[Review and Launch] を選択します。

  8. インスタンスの起動の確認ページで、起動を選択します。

  9. [Select an existing key pair or create a new key pair] ダイアログボックスで、[Choose an existing key pair] を選択し、キーペアを選択します。確認のチェックボックスを選択し、[Launch Instances] を選択します。

  10. [起動ステータス] ページで、[インスタンスの表示] を選択して、インスタンスのステータスを表示します。最初、ステータスは pending です。ステータスが running に変わったら、インスタンスは使用できる状態です。

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

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

  1. 作成した Amazon EC2 インスタンスに SSH 接続します。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイドの「Linux インスタンスへの接続」を参照してください。

  2. 各インスタンスのターミナルウィンドウから、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
  3. Amazon EFS ファイルシステムのマウント先のディレクトリに移動します。上の例では /mnt/efs/fs1 に移動します。

  4. 以下の内容で 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: タスク定義を作成する

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

新しいタスク定義を作成するには

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

  2. ナビゲーションペインで [Task Definitions (タスク定義)]、[Create new Task Definition (新しいタスク定義の作成)] の順に選択します。

  3. [Select compatibilities] ページで [EC2] を選択し、[Next step] を選択します。

  4. [Configure via 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": "nginx" } ], "volumes": [ { "name": "efs-html", "efsVolumeConfiguration": { "fileSystemId": "fs-1324abcd", "transitEncryption": "ENABLED" } } ], "family": "efs-tutorial" }
  5. [Save]、[Create] の順に選択します。

ステップ 6: タスクを実行して結果を表示する

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

タスクを実行して結果を表示するには

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

  2. 前のステップ 1 で作成したクラスターを選択します。

  3. [Tasks]、[Run new task] の順に選択します。

  4. [Task Definition] で、先ほど作成した efs-tutorial タスク定義を選択し、[Run Task] を選択します。タスク実行ワークフローの他のオプションの詳細については、「[Run a standalone task] (スタンドアロンタスクを実行)」を参照してください。

  5. [タスク] タブの下で、先ほど実行したタスクを選択します。

  6. ページの下部にあるコンテナ名を展開し、コンテナに関連付けられている IP アドレスを選択します。ブラウザで新しいタブが開いて、以下のメッセージが表示されます。

    注記

    メッセージが表示されない場合は、コンテナインスタンスのセキュリティグループがポート 80 でインバウンドネットワークトラフィックを許可していることを確認してください。