AWS Batch の Fargate 起動タイプで S3 Files をマウントして動作確認してみた
はじめに
2026 年 4 月の Amazon S3 Files GA に合わせ、AWS Batch の Fargate ジョブからも S3 Files volume をマウントできるようになりました。
AWS Batch の Fargate ジョブから S3 Files volume をマウントし、NFS 経由でファイルの読み書きができることを最小構成で確認しました。AWS Batch 構成に S3 Files マウントのために何の設定が必要なのか を整理しました。
確認結果
- Fargate 起動タイプのジョブから
/mnt/dataにマウントした S3 Files への読み書きが成功した - ジョブ定義は
ecsProperties.taskProperties[].volumes[]にs3filesVolumeConfigurationを指定する形式で一言でまとめられないので本文を確認してもらいたい - ジョブロールは
s3files:ClientMountとs3files:ClientWriteの 2 つの許可と、S3 バケットに対する読み取り権限が必要
検証構成
AWS Batch の Fargate 起動の実行環境を用意します。
| 項目 | 値 |
|---|---|
| リージョン | ap-northeast-1 |
| AZ | ap-northeast-1a(単一 AZ) |
| 起動タイプ | Fargate |
| コンテナイメージ | public.ecr.aws/amazonlinux/amazonlinux:2023 |
S3 Files を AWS Batch から使うために必要な要素
Fargate ジョブで S3 Files volume を有効化するために、AWS Batch の構成に必要な要素は以下のとおりでした。
| 要素 | 設定先 | S3 Files マウントのために必要なこと |
|---|---|---|
| 起動タイプ | platformCapabilities |
FARGATE 必須(EC2 未対応) |
| ジョブ定義のストレージ指定 | ecsProperties.taskProperties[] の volumes と mountPoints |
volumes 配下に s3filesVolumeConfiguration を 1 つ追加 |
| ジョブロール(taskRoleArn) | インラインポリシー | s3files:ClientMount + s3files:ClientWrite を追加 |
| マウントターゲット | S3 Files ファイルシステム | コンピュート環境のサブネットと同一 VPC・同一 AZ に作成 |
| セキュリティグループ | タスク SG / マウントターゲット SG | タスク SG に Egress 2049、マウントターゲット SG に Ingress 2049 を設定 |
実行ロール(executionRoleArn)と AWS Batch サービスロールには S3 Files 固有の追加権限は不要です。AWS マネージドポリシー(AmazonECSTaskExecutionRolePolicy と AWSBatchServiceRole)のままで動きます。
検証環境の AWS リソースを見ていく
S3 バケットは バージョニング有効と暗号化(SSE-S3 か SSE-KMS) が必須です。詳細は以下の記事を参照ください。
IAM ロール
AWS Batch の IAM ロール体系については以下の記事を参照してください。サンプルとして今回作成したリソース名を併記します。
S3 Files を AWS Batch から使う構成では、3 つのロールが登場します。
| ロール | この記事のロール名(サンプル) | S3 Files 用に追加で必要な権限 |
|---|---|---|
| AWS Batch サービスロール | s3files-batch-demo-batch-service | なし(AWSBatchServiceRole のみ) |
| 実行ロール(executionRoleArn) | s3files-batch-demo-ecs-exec | なし(AmazonECSTaskExecutionRolePolicy のみ) |
| ジョブロール(taskRoleArn) | s3files-batch-demo-batch-job | s3files:ClientMount、s3files:ClientWrite + S3 のリード権限 |
ジョブロール(taskRoleArn)
コンテナ内のアプリが S3 Files をマウント・操作するためのロールです。最小権限の組み合わせは次の 3 ステートメントです。
S3FilesMount: NFS マウントとファイルシステムへの書き込み許可。S3 Files volume を使う場合の必須権限- 読み取り専用ジョブは
s3files:ClientWriteも省略可
- 読み取り専用ジョブは
S3BucketRead: S3 から対象オブジェクトを直接読み取るために必要CloudWatchLogs: コンテナの stdout/stderr を CloudWatch Logs に出力するための書き込み権限- S3 Files の設定とは無関係だけどログ出力には必要
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3FilesMount",
"Effect": "Allow",
"Action": ["s3files:ClientMount", "s3files:ClientWrite"],
"Resource": "arn:aws:s3files:ap-northeast-1:123456789012:file-system/fs-037a637e702d75854"
},
{
"Sid": "S3BucketRead",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:GetObjectVersion", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::s3files-batch-demo-123456789012",
"arn:aws:s3:::s3files-batch-demo-123456789012/*"
]
},
{
"Sid": "CloudWatchLogs",
"Effect": "Allow",
"Action": ["logs:PutLogEvents", "logs:CreateLogStream", "logs:CreateLogGroup"],
"Resource": "arn:aws:logs:ap-northeast-1:123456789012:*"
}
]
}
セキュリティグループ
2049 ポート受発信さえ間違えなければ特に問題ないです。
| セキュリティグループ | ルールタイプ | プロトコル | ポート | 出発地/目的地 |
|---|---|---|---|---|
| sg-01b87d6ce68206464(Batch タスク用) | Egress | TCP | 2049 | sg-070cb57e3d955e7ec(マウントターゲット用 SG) |
| sg-070cb57e3d955e7ec(マウントターゲット用) | Ingress | TCP | 2049 | sg-01b87d6ce68206464(Batch タスク用 SG) |
| sg-01b87d6ce68206464(Batch タスク用) | Egress | TCP | 443 | 0.0.0.0/0(ECR pull, S3 API, CloudWatch Logs 用) |
参考: Prerequisites for S3 Files - Security groups
Batch ジョブ定義
describe-job-definitions の出力から S3 Files 関連部分のみ抜粋します。
{
"ecsProperties": {
"taskProperties": [{
"executionRoleArn": "arn:aws:iam::123456789012:role/s3files-batch-demo-ecs-exec",
"taskRoleArn": "arn:aws:iam::123456789012:role/s3files-batch-demo-batch-job",
"platformVersion": "LATEST",
"networkConfiguration": {"assignPublicIp": "ENABLED"},
"containers": [{
"name": "main",
"image": "public.ecr.aws/amazonlinux/amazonlinux:2023",
+ "mountPoints": [{
+ "sourceVolume": "s3data",
+ "containerPath": "/mnt/data",
+ "readOnly": false
}]
}],
"volumes": [{
+ "name": "s3data",
+ "s3filesVolumeConfiguration": {
+ "fileSystemArn": "arn:aws:s3files:ap-northeast-1:123456789012:file-system/fs-037a637e702d75854"
}
}]
}]
}
}
ジョブ定義に 2 箇所設定を追加すれば S3 Files マウントが有効になります。今回一番のポイントは、volumes[].name と mountPoints[].sourceVolume の文字列一致が紐付けのキーとなります。
- タスクレベルの
volumes[]にマウントするファイルシステムを宣言するname: ボリューム識別子(任意の文字列)s3filesVolumeConfiguration.fileSystemArn: マウント対象の S3 Files ファイルシステム ARN(必須)
- コンテナレベルの
mountPoints[]にコンテナ内のマウント先を指定するsourceVolume: 上で宣言したvolumes[].nameと一致させるcontainerPath: コンテナ内のマウントパス(例:/mnt/data)readOnly: 読み取り専用にするか(true / false)

ジョブの動作確認
S3 Files を使って読み書きできるか動作確認します。
ジョブのサブミット
読み書きテストジョブをサブミットしました。
JOB_QUEUE=arn:aws:batch:ap-northeast-1:123456789012:job-queue/s3files-batch-demo-queue
JOB_DEFINITION=arn:aws:batch:ap-northeast-1:123456789012:job-definition/s3files-batch-demo-job:1
aws batch submit-job \
--job-name s3files-test-1 \
--job-queue "$JOB_QUEUE" \
--job-definition "$JOB_DEFINITION"
{
"jobArn": "arn:aws:batch:ap-northeast-1:123456789012:job/341cfdf4-7f42-474e-a9a3-e1f57e8bdfa3",
"jobName": "s3files-test-1",
"jobId": "341cfdf4-7f42-474e-a9a3-e1f57e8bdfa3"
}
コンテナ実行時間は 27 秒でした。Fargate のコールドスタート分を含めても 1 分程度で完了しています。

コンテナの出力(CloudWatch Logs)
aws logs get-log-events \
--log-group-name /aws/batch/s3files-batch-demo \
--log-stream-name "s3files-demo/main/49fe71a555034164beefd2e2908cdcf8" \
--start-from-head \
--query 'events[*].message' --output text
=== mount status ===
Filesystem Size Used Avail Use% Mounted on
127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/data
=== existing files ===
total 16
drwxr-xr-x. 3 root root 10240 May 4 02:19 .
drwxr-xr-x. 1 root root 4096 May 4 02:25 ..
drwx------. 2 root root 10240 May 4 02:19 .s3files-lost+found-fs-037a637e702d75854
=== write test ===
hello from batch 20260504T022524Z
=== list again ===
total 20
drwxr-xr-x. 3 root root 10240 May 4 02:25 .
drwxr-xr-x. 1 root root 4096 May 4 02:25 ..
drwx------. 2 root root 10240 May 4 02:19 .s3files-lost+found-fs-037a637e702d75854
-rw-r--r--. 1 root root 34 May 4 02:25 from-batch-20260504T022524Z.txt
出力から確認できる点を補足します。
.s3files-lost+found-fs-037a637e702d75854/ ディレクトリ
S3 Files が同期競合時の退避領域として自動生成されるディレクトリです。ファイルシステム側の未同期データと S3 側の更新が衝突した場合、ファイルシステム側の変更がここに移されます。S3 を source of truth として扱う設計となっています。
書き込み直後の ls -la 表示
書き込んだ from-batch-20260504T022524Z.txt(34 bytes)がすぐに読み取れていますが、S3 へ保存されるのは 60 秒間隔です。
S3 バケットを確認
aws s3 ls s3://s3files-batch-demo-123456789012/
2026-05-04 11:26:30 34 from-batch-20260504T022524Z.txt
ファイルシステム上の書き込み時刻 02:25:24 UTC に対し、S3 バケット側の LastModified は 02:26:30 UTC。約 66 秒後に反映されました。最大 60 秒の集約ウィンドウ + 数秒は転送にかかった時間でしょうか。はっきりとはしませんが 60 秒遅れは想定どおりの動きです。

まとめ
AWS Batch の Fargate ジョブから S3 Files volume をマウントし、NFS 経由で読み書きできることを確認しました。
AWS Batch 側で追加が必要な設定は、ジョブ定義の volumes と mountPoints の 2 箇所、そしてジョブロールへの s3files:ClientMount と s3files:ClientWrite の付与がポイントでした。実行ロールと AWS Batch サービスロールはマネージドポリシーのままで動作しました。
一方で AWS Batch 以外の S3 バケットのバージョニング有効化と暗号化、コンピュート環境と同一 AZ のマウントターゲット作成、タスクのセキュリティグループと、マウントターゲットグループの 2049 ポートの許可いった前提条件が並びます。初回構築時の手間はむしろこちらの方が多かったです。あと、大事なことは現時点では Fargate 起動タイプのみ対応 で、EC2 コンピュート環境では起動できない点も押さえておいてください。
さいごに
地味に準備が大変で VPC レスの AWS Batch の様な HPC マネージドサービスが欲しくなりました。
参考
- AWS Batch で登場する IAM ロールの種類を絵に描いて整理してみた
- Amazon S3 Files volumes - AWS Batch User Guide
- Working with Amazon S3 Files - Amazon S3 User Guide
- Prerequisites for S3 Files - Amazon S3 User Guide
- Customizing synchronization for S3 Files - Amazon S3 User Guide
- S3FilesVolumeConfiguration - AWS Batch API Reference
- Job definitions on Fargate - AWS Batch User Guide
- Announcing Amazon S3 Files









