コンソールを使用した Amazon ECS での Amazon EFS ファイルシステムの設定 - Amazon Elastic Container Service

コンソールを使用した Amazon ECS での Amazon EFS ファイルシステムの設定

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

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

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

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

開始する前に、適切な IAM アクセス許可を割り当ててください。詳細については、「Amazon ECS クラスターの例」を参照してください。

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

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

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

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

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

  6. (オプション) タスクとサービスが起動する VPC とサブネットを変更するには、[Networking] (ネットワーク) で、次のいずれかのオペレーションを実行します。

    • サブネットを削除するには、[Subnets] (サブネット) で、削除するサブネットごとに [X] を選択します。

    • [default] (デフォルト) VPC 以外の VPC に変更するには、[VPC] で既存の [VPC] を選択し、[Subnets] (サブネット) で各サブネットを選択します。

  7. クラスターに 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」と入力します。

  8. [Create] (作成) を選択します。

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

このステップでは、ポート 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 ユーザーガイド」の「Creating a security group」を参照してください。

ステップ 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. ファイルシステムの名前を入力し、コンテナインスタンスをホストする VPC を選択します。デフォルトでは、指定した VPC の各サブネットに、その VPC のデフォルトセキュリティグループを使用するマウントターゲットが割り当てられます。次に [カスタマイズ] を選択します。

    注記

    このチュートリアルでは、Amazon EFS ファイルシステム、Amazon ECS クラスター、コンテナインスタンス、およびタスクが同じ VPC 内に存在することを前提としています。別の VPC からファイルシステムをマウントする方法の詳細については、Amazon EFS ユーザーガイドの「チュートリアル: 別の VPC からファイルシステムをマウントする」を参照してください。

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

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

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

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

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

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

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

  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. [アプリケーションおよび OS イメージ (Amazon マシンイメージ)] で、[Amazon Linux 2 AMI (HVM)] を選択します。

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

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

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

  7. [ストレージの設定] で、ファイルシステムの [編集] ボタンを選択し、[EFS] を選択します。ステップ 3:Amazon EFS ファイルシステムを作成する で作成したファイルシステムを選択します。必要に応じて、マウントポイントを変更したり、デフォルト値をそのまま使用したりできます。

    重要

    インスタンスにファイルシステムを追加する前に、サブネットを選択する必要があります。

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

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

  10. [概要] で、[インスタンス数]1 であることを確認します。[インスタンスを起動] を選択します。

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

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

Amazon EC2 インスタンスに接続し、コンテンツを Amazon EFS ファイルシステムに追加するには
  1. 作成した Amazon EC2 インスタンスに SSH 接続します。詳細については、「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 にマウントします。

Amazon ECS コンソールを使用して新しいタスク定義を作成するには
  1. コンソール (https://console.aws.amazon.com/ecs/v2) を開きます。

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

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

  4. 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", "executionRoleArn":"arn:aws::iam::111122223333:role/ecsTaskExecutionRole" }
    注記

    Amazon ECS タスク実行 IAM ロールに次のアクセス許可を追加すると、スタートアップ時に Amazon ECS エージェントが Amazon EFS ファイルシステムを検索してタスクにマウントできるようになります。

    • elasticfilesystem:ClientMount

    • elasticfilesystem:ClientWrite

    • elasticfilesystem:DescribeMountTargets

    • elasticfilesystem:DescribeFileSystems

  5. [Create] (作成) を選択します。

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

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

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

コンソールを使用してタスクを実行し結果を表示するには
  1. コンソール (https://console.aws.amazon.com/ecs/v2) を開きます。

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

    サービスを起動するリソースを決定します。

    サービスの起動元 ステップ

    クラスター

    1. [Clusters] ページで、サービスを作成するクラスターを選択します。

    2. Tasksタブで、Run new taskを選択します。

    起動タイプ
    1. [Task] (タスク) ページで、タスク定義を選択します。

    2. リビジョンが複数ある場合は、リビジョンを選択します。

    3. [Create] (作成)、[Run task] (タスクの実行) の順に選択します。

  3. (オプション) スケジュールされたタスクをクラスターのインフラストラクチャ全体に分散する方法を選択します。[Compute configuration] (コンピュート設定) を展開し、以下の操作を実行します。

    ディストリビューションの方法 ステップ
    起動タイプ
    1. [Compute options] (コンピューティングオプション) セクションで、[Launch type] (起動タイプ) を選択します。

    2. [起動タイプ] で、[EC2] を選択します。

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

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

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

  7. [Create] (作成) を選択します。

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

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

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

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

    It works! You are using an Amazon EFS file system for persistent container storage.
    注記

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