Fargate で実行されている Amazon ECS コンテナまたはタスクに Amazon EFS ファイルシステムをマウントする方法を教えてください。
最終更新日: 2020 年 12 月 17 日
Amazon Elastic File System (Amazon EFS) ファイルシステムを、AWS Fargate で実行している Amazon Elastic Container Service (Amazon ECS) コンテナまたはタスクにマウントしたいと考えています。
簡単な説明
Amazon EFS ファイルシステムを Fargate タスクまたはコンテナにマウントするには、最初にタスク定義を作成する必要があります。その後、そのタスク定義を、AWS リージョンのすべてのアベイラビリティゾーンのタスク内のコンテナで使用できるようにします。その後、Fargate タスクは Amazon EFS を利用して、タスク定義で指定したタスクにファイルシステムを自動的にマウントします。
重要: 次の解決方法は Fargate プラットフォームバージョン 1.4.0 以降で利用できます。このバージョンには、Amazon ECS のタスクおよびコンテナレベルで定義できる永続的ストレージがあります。Fargate プラットフォームバージョン 1.3.0 以前では、Amazon EFS を利用した永続的ストレージはサポートされていません。
解決方法セクションの手順を実行する前に、以下を用意する必要があります。
解決方法
Amazon EFS ファイルシステムを作成して設定する
1. Amazon EFS ファイルシステムを作成し、EFS ID とセキュリティグループ ID を書き留めます。
注: Amazon EFS ファイルシステム、Amazon ECS クラスター、および Fargate タスクはすべて同じ VPC 内に存在する必要があります。
2. ポート 2049 (ネットワークファイルシステム、または NFS) で Fargate タスクまたはサービスに関連付けられたセキュリティグループからのインバウンド接続を許可するには、EFS ファイルシステムのセキュリティグループルールを編集します。
3. Amazon ECS サービスのセキュリティグループを更新して、ポート 2049 で Amazon EFS ファイルシステムのセキュリティグループへのアウトバウンド接続を許可します。
タスク定義を作成します。
1. Amazon ECS コンソールを開きます。
2. ナビゲーションペインで [タスク定義] を選択し、次に [新規タスク定義の作成] を選択します。
3. [起動タイプの互換性の選択] セクションで、[ FARGATE ] を選択してから、[次のステップ] をクリックします。
4. [タスクとコンテナ定義の設定] セクションで、 [タスク定義名] にタスク定義の名前を入力します。
5. [ボリューム] セクションで、[ ボリュームの追加 ] を選択します。
6. [名前] にはポリシーの名前を入力します。
7. [ボリュームタイプ] に「EFS」と入力します。
8. [ファイルシステム ID] に、Amazon EFS ファイルシステムの ID を入力します。
注: ルートディレクトリ、転送中の暗号化、 および EFS IAM 認証のオプションをカスタムで指定できます。 または、デフォルトを受け入れることもできます (「/」はルートディレクトリです)。
9. [追加] を選択します。
10. [コンテナの定義] セクションで、[コンテナの追加] を選択します。
11. [ストレージとログ] セクションの [マウントポイント] サブセクションで、手順 5 でソースボリューム用に作成したボリュームを選択します。
12. [コンテナパス] で、お客様のコンテナパスを選択します。
13. (オプション) [環境] セクションの [エントリポイント] に、お客様のエントリポイントを入力します。
14. [コマンド] で [df ,-h] コマンドを入力して、マウントされたファイルシステムを表示します。
注: エントリポイントとコマンドを使用して、Amazon EFS ファイルシステムが正常にマウントされているかどうかをテストできます。デフォルトでは、df-h コマンドが正常に実行された後、コンテナは終了します。ステップ 16 の JSON タスク定義の例では、無限の while ループを使用してタスクを実行したままにします。
15. [追加] を選択します。
16. タスク定義ウィザードの残りのフィールドに入力してから、[作成] を選択します。
次の例では、タスク定義で efs-test という名前のデータボリュームが作成されます。nginx コンテナは、Any_Container_Path パスにホストデータボリュームをマウントします。
{
"family": "sample-fargate-test",
"networkMode": "awsvpc",
"executionRoleArn": "arn:aws:iam::1234567890:role/ecsTaskExecutionRole",
"containerDefinitions": [
{
"name": "fargate-app",
"image": "nginx",
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
],
"essential": true,
"entryPoint": [
"sh",
"-c"
],
"command": [
"df -h && while true; do echo \"RUNNING\"; done"
],
"mountPoints": [
{
"sourceVolume": "efs-test",
"containerPath": "Any_Container_Path"
}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "AWS_LOG_GROUP_PATH",
"awslogs-region": "AWS_REGION",
"awslogs-stream-prefix": "AWS_STREAM_PREFIX"
}
}
}
],
"volumes": [
{
"name": "efs-test",
"efsVolumeConfiguration": {
"fileSystemId": "fs-123xx4x5"
}
}
],
"requiresCompatibilities": [
"FARGATE"
],
"cpu": "256",
"memory": "512"
}
Fargate タスクを実行し、タスクログをチェックする
1. 上記で作成したタスク定義を使用して Fargate タスクを実行します。
重要: Fargate プラットフォームバージョン 1.4.0 でタスクを実行してください。
2. Amazon EFS ファイルシステムが Fargate コンテナに正常にマウントされたことを確認するには、タスクログを確認します。
df-h の出力は次のようになります。
2020-10-27 15:15:35
Filesystem 1K-blocks Used Available Use% Mounted on
2020-10-27 15:15:35
overlay 30832548 9859324 19383976 34% /
2020-10-27 15:15:35
tmpfs 65536 0 65536 0% /dev
2020-10-27 15:15:35
shm 2018788 0 2018788 0% /dev/shm
2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /sys/fs/cgroup
2020-10-27 15:15:35
fs-xxxxxxxx.efs.us-east-1.amazonaws.com:/ 9007199254739968 0 9007199254739968 0% /Any_Container_Path
2020-10-27 15:15:35
/dev/xvdcz 30832548 9859324 19383976 34% /etc/hosts
2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /proc/acpi
2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /sys/firmware
2020-10-27 15:15:35
tmpfs 2018788 0 2018788 0% /proc/scsi
RUNNING
関連情報
Security in Amazon EFS (Amazon EFS のセキュリティ)
チュートリアル: クラシックコンソールを使用した Amazon ECS での Amazon EFS ファイルシステムの使用