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

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

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

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

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

注記

Amazon EFS は、一部のリージョンで利用できない場合があります。Amazon EFS をサポートしているリージョンの詳細については、AWS General Referenceの「Amazon Elastic File System のエンドポイントとクォータ」を参照してください。

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

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

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

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

  2. 画面上部のナビゲーションバーで、米国西部 (オレゴン) リージョンを選択します。

  3. ナビゲーションペインで [Clusters] を選択します。

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

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

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

  7. [Provisioning model] で、[On-Demand Instance] を選択します。

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

  9. [Number of instances] に「1」と入力します。

  10. [EC2 AMI ID] で、[Amazon Linux 2 Amazon ECS-optimized 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 ブロック] で VPC の CIDR ブロックを選択します。詳細については、Amazon VPC ユーザーガイド の「VPC とサブネット」を参照してください。

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

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

      注記

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

    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. https://console.aws.amazon.com/ec2/ で Amazon 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 ユーザーガイドの「EFS のライフサイクル管理」を参照してください。

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

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

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

  6. [Configure client access] ページで、[Nest Step] を選択します。

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

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

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

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

Amazon EC2 インスタンスを作成して Amazon EFS ファイルシステムをマウントするには

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

  2. [インスタンスの作成] を選択します。

  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] で、[Enable] を選択します。それ以外の場合、インスタンスではパブリック IP アドレスまたはパブリック DNS 名を取得しません。

    3. [File systems] で、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. [Review Instance Launch] ページで、[Launch] を選択します。

  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] で、先ほど作成した nginx-efs タスク定義を選択し、[Run Task] を選択します。タスク実行ワークフローの他のオプションの詳細については、「タスクの実行」を参照してください。

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

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

    注記

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