Amazon Web Services ブログ

Amazon Elastic Container Service が Amazon EFS ファイルシステムをサポート開始

Jeff がこのブログで Amazon Elastic Container Service の開始について書いてから 5 年になります。私はその記事を読んで、エキゾチックで珍しいコンテナがどのように聞こえるかについて考えたことを覚えています。わずか 5 年後まで話を進めると、コンテナはほとんどの開発者にとって日常生活の一部になっていることでしょう。しかし、お客様が ECS などのコンテナオーケストレーターをますます採用している一方で、このコンテナ化された世界への移行が難しいアプリケーションの種類もまだあります。

コンテナは本来一時的なものであるため、データの永続化または共有ストレージを必要とするアプリケーションを構築しているお客様は、課題に直面しています。コンテナは動的にスケールインおよびスケールアウトされるため、ローカルデータはコンテナが終了すると失われます。本日、Amazon Elastic File System (EFS) ファイルシステムのサポートを開始することにより、ECS 用に変更しようと思います。ECS および AWS Fargate で実行されている両方のコンテナ Amazon Elastic File System (EFS) を使用できます。

この新機能は、コンテンツ管理システム、内部 DevOps ツール、機械学習フレームワークなどの共有ストレージを必要とするアプリケーションをコンテナ化するのに役立ちます。真新しい一連のワークロードではコンテナがもたらすメリットを享受できるようになり、お客様はデプロイプロセスの高速化、インフラストラクチャー利用の最適化、および回復力のあるシステムの構築を可能にします。

Amazon Elastic File System (EFS) は、フルマネージド、高可用性、スケーラブルな共有ファイルシステムを提供します。これにより、コンピューティングとは別にデータを保存できます。これはリージョンサービスでもあります。サービスは 3 つのアベイラビリティーゾーン内およびアベイラビリティーゾーン間でデータを格納し、高可用性と耐久性を実現します。

これまでは、EC2 インスタンスのクラスターでコンテナを実行している場合、ECS で EFS を機能させることが可能でした。ただし、AWS Fargate をコンテナデータプレーンとして使用する場合、この発表を行う以前は EFS ファイルシステムをマウントできませんでした。Fargate では、お客様が Fargate フリート内のマネージドインスタンスにアクセスすることを許可していないため、EFS をセットアップするためにインスタンスに必要な変更を加えることができません。

EFS ファイルシステムを ECS に簡単に接続できるようになったことで、多くのお客様に喜んでいただけると思います。個人的には、この新機能を Fargate と組み合わせて使用できることに感動しています。新機能は、私が現在構築している小さなサイドプロジェクトに最適であり、最終的にはサーバーレスコンテナと組み合わせて永続的なストレージを機能させる方法を提供します。

ECS と EFS の両方に名前に [伸縮自在] という単語が含まれているのには十分な理由があります。これらのサービスはどちらも、アプリケーションの必要に応じてスケールアップおよびスケールダウンできるからです。EFS は、中断することなく、オンデマンドでゼロからペタバイトまで拡張します。また、ファイルを追加および削除すると自動的に拡大および縮小を行います。ECS には、クラスターの Auto Scaling または Fargate を使用して、需要に応じて容量を拡大および縮小できるオプションがあります。当社のお客様の場合、実際に使用するストレージとコンピューティングに対してのみ料金をお支払いいただきます。

それでは、十分に話をして、楽しみながら、Amazon Elastic File System (EFS) でコンテナ化されたアプリケーションを動作させる方法を見てみましょう。

簡単な共有ファイルシステムの例
この例では、いくつかの基本的なインフラストラクチャを構築したので、Fargate クラスターに EFS を追加する前と後での効果を示します。最初に、2 つのアベイラビリティーゾーンにまたがる VPC を作成しました。次に、ECS クラスターを作成しました。ECS クラスターでは、Fargate を使用して 2 つのコンテナを実行することを計画しています。これは、AWS が管理する Fargate フリートでコンテナを実行するため、EC2 インスタンスを設定する必要がないことを意味します。

アプリケーションをデプロイするために、単純なドラッグアンドドロップ形式のファイルマネージャーである Cloud Commander で、オープンソースアプリケーションの Docker イメージを使用するタスク定義を作成します。

ECS コンソールで、サービスを作成し、作成したタスク定義を使用してアプリケーションをデプロイします。サービスがデプロイされ、コンテナがプロビジョニングされた後、サービスの一部として作成された Application Load Balancer の URL にアクセスすると、アプリケーションが機能していることがわかります。ファイルをドラッグしてアプリケーションにアップロードできます。

とはいえ、これには問題が存在することも事実で、ページを更新したときに、アップロードするためにドラッグしたファイルが消えてしまう場合があります。アプリケーションを実行しているコンテナが 2 つあり、両方がローカルファイルシステムを使用しているために発生する問題です。ブラウザを更新することにより、ロードバランサーが 2 つのコンテナのうち 1 つに送信し、1 つのコンテナのみがローカルボリュームにイメージを格納しています。

両方のコンテナがマウントでき、ファイルを書き込むことができる共有ファイルシステムが必要です。

次に、EFS コンソール内に新しいファイルシステムを作成します。ウィザードで、ECS クラスターの作成時に使用したのと同じ VPC を選択し、VPC がまたがるすべてのアベイラビリティーゾーンを選択して、それぞれにマウントターゲットを作成するようにサービスに要求します。これらのマウントターゲットは、異なるアベイラビリティーゾーンにあるコンテナがファイルシステムに接続できることを意味します。

ウィザードの他のすべてのオプションでデフォルトを選択します。手順 3 で、[アクセスポイントを追加] ボタンをクリックします。アクセスポイントは、特定のアプリケーションにファイルシステムへのアクセス許可を付与する方法であり、アプリケーションがアクセスできるデータを非常にきめ細かく制御できます。EFS ファイルシステムに複数のアクセスポイントを追加し、同じファイルシステムへの異なるアプリケーション、異なるレベルのアクセスを提供できます。

デプロイしているアプリケーションがウェブサイトのユーザーアップロードを処理するため、このアプリケーションに /uploads ディレクトリへのフルアクセスのみを許可する EFS アクセスポイントを作成します。これを行うには、新しいユーザー ID (1000) とグループ ID (1000)、および /uploads のホームディレクトリでアクセスポイントを作成します。ディレクトリは、このユーザーとグループを所有者に完全なアクセス許可を付与し、他のすべてのユーザーに読み取り権限を付与して作成されます。

AWS でのセキュリティは最優先事項であり、チームは ECS を EFS と統合することで、IAM ロールベースのアクセスコントロール、VPC セキュリティグループ、転送中のデータの暗号化など、EFS ファイルシステムを不正アクセスから保護するための複数のセキュリティ層を提供できるよう懸命に取り組んできました。

ウィザードを実行すると、ファイルシステムが作成され、ファイルシステム ID とアクセスポイント ID が与えられます。Fargate でタスク定義を構成するには、これらの ID が必要です。

ECS クラスター内のタスク定義に戻り、タスク定義の新しいリビジョンを作成します。定義の [ボリューム] セクションまでスクロールし、[ボリュームを追加] をクリックします。

次に、EFS ファイルシステムの詳細を追加し、正しいファイルシステム ID と、以前に作成した正しいアクセスポイント ID を選択します。

[転送中に暗号化を有効にする] を選びましたが、この例では EFS IAM 承認を有効にしていません。この承認は、ファイルシステムのさまざまな部分に対して、さまざまなレベルのアクセスを必要とする多くのクライアントを持つ大規模なアプリケーションで役立ちます。この機能では、IAM 承認を使用して管理を簡素化できます。詳細については、機能がリリースされた今年の初めに作成したブログをご覧ください

タスク定義を更新したので、この新しい定義を使用するように ECS サービスを更新できます。ここで、プラットフォームのバージョンを 1.4.0 に設定していることを確認することも重要です。

このサービスは私の新しいコンテナを 2 つデプロイし、古いコンテナを 2 つ廃止します。新しいコンテナは共有 EFS ファイルシステムを使用するようになるため、アプリケーションが期待通りに動作します。

ファイルをアップロードしてからアプリケーションに再度アクセスしても、ファイルはそのまま残ります。コンテナを交換したり、スケールアップまたはスケールダウンしたりしても、ファイルシステムは保持されます。

未来を見据える
私は最近コンテナチームによるイノベーションを好み、彼らのパブリックロードマップを調べています。彼らは将来に向けてとてもエキサイティングな計画を立てています。アイデアや機能のリクエストについては、すでにロードマップを導いている多くのお客様のようにご意見をお寄せください。

新しい機能は、ECS と EFS が利用可能なすべてのリージョンでご利用いただけます。追加費用はありません。AWS コンソールで確認して、ご意見をお聞かせください。

幸せなコンテナ化

— Martin