0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon ECS が AWS Fargate および ECS マネージドインスタンス上での tmpfs マウントをサポート

Posted at

はじめに

2026 年 1 月 6 日、AWS は Amazon Elastic Container Service(ECS)向けの新機能を発表しました。
AWS Fargate と ECS Managed Instances で Linux タスクに対する tmpfs マウントをサポートする機能です。
これまで EC2 起動タイプでのみ利用可能だった機能が、サーバーレスコンテナ環境である Fargate にも拡張されました。
この機能は全 AWS 商用リージョンで即座に利用可能となっています。
本記事では、新機能の詳細、従来との違い、実際の使い方、コストや制限事項についてまとめています。

新機能の概要

今回発表された新機能により、Fargate でもメモリベースの高速一時ストレージが利用できるようになりました。

主な特徴

主な特徴としては以下の 3 つです。

  • メモリベースの高速ストレージ
  • セキュアなコンテナ環境の実現
  • EC2 起動タイプとの機能等価性

メモリベースの高速ストレージ

tmpfs は物理ディスクではなく RAM 上にデータを保存するメモリベースのファイルシステムです。
ディスク I/O を回避できるため、キャッシュやスクラッチファイルへの高速アクセスが可能になります。
タスク停止後にデータは自動的に消去されます。

セキュアなコンテナ環境の実現

readonlyRootFilesystem 設定と組み合わせることで、コンテナのルートファイルシステムを読み取り専用に保ちながら、必要な箇所だけメモリ上で書き込み可能にできます。
これにより攻撃対象領域を最小化し、セキュアなコンテナ環境を構築できます。

EC2 起動タイプとの機能等価性

これまで EC2 起動タイプでのみ利用可能だった機能が、サーバーレスコンテナ環境である Fargate にも拡張されました。
インフラ管理の負担を軽減しながら、パフォーマンス要件の高いアプリケーションを Fargate で実行できるようになります。

何が変わったのか

今回発表された新機能により、Fargate でのコンテナセキュリティと運用が大きく改善されました。
従来の課題と新機能による変化を見ていきましょう。

従来の課題

主な課題としては以下の 2 つがありました。

  • Fargate での tmpfs 未対応
  • readonlyRootFilesystem との併用困難

Fargate での tmpfs 未対応

tmpfs マウントは EC2 起動タイプの ECS タスクでのみ利用可能でした。
Fargate や ECS Managed Instances を使用する場合、一時データもタスクストレージに書き込む必要があり、パフォーマンスとセキュリティの面で制約がありました。
メモリベースの高速ストレージが必要なワークロード(機械学習の推論処理、ビルドキャッシュ、データベースの一時作業領域など)では、ディスク I/O がボトルネックとなり、Fargate の採用を見送らざるを得ないケースがありました。

readonlyRootFilesystem との併用困難

AWS Security Hub の ECS.5 推奨事項では、コンテナのルートファイルシステムを読み取り専用にすることが推奨されています。
これはコンテナへの不正な書き込みを防ぎ、攻撃対象領域を最小化するためのセキュリティベストプラクティスです。
しかし、readonlyRootFilesystem を有効にすると、/tmp を含むすべてのディレクトリが書き込み不可になります。
多くのアプリケーションは一時ファイルの書き込みに /tmp を使用するため、この設定だけではアプリケーションが正常に動作しませんでした。

新機能による変化

新機能により、従来の課題がすべて解決されました。

Fargate での tmpfs マウント

Fargate と ECS Managed Instances で tmpfs マウントが利用できるようになりました。
タスク定義の linuxParameters ブロックに tmpfs エントリを追加することで、メモリベースの高速ストレージを使用できます。
ディスク I/O を回避できるため、キャッシュやスクラッチファイルへの高速アクセスが実現し、パフォーマンス重視のワークロードで顕著な効果が得られます。
インフラ管理の負担を軽減しながら、パフォーマンス要件の高いアプリケーションを Fargate で実行できるようになりました。

readonlyRootFilesystem と tmpfs の組み合わせ

readonlyRootFilesystem 設定と tmpfs を組み合わせることで、コンテナのルートファイルシステムを読み取り専用にしながら、必要な箇所だけメモリ上で書き込めるようになりました。
タスク終了時にデータが自動的に消去されるため、短命なシークレットや一時的な機密データの処理に適しています。
攻撃対象領域を最小化し、AWS Security Hub の ECS.5 推奨事項を満たすセキュアなコンテナ環境を構築できるようになりました。

使い方

タスク定義の設定から、実際の動作確認まで説明します。

タスク定義の設定

タスク定義の containerDefinitions 内の linuxParameters セクションに tmpfs エントリを追加します。

基本的な設定例

以下は、/tmp ディレクトリを tmpfs マウントする基本的な例です。

タスク定義
{
  "family": "sample-task",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "512",
  "memory": "1024",
  "containerDefinitions": [
    {
      "name": "app-container",
      "image": "your-app:latest",
      "essential": true,
      "readonlyRootFilesystem": true,
      "linuxParameters": {
        "tmpfs": [
          {
            "containerPath": "/tmp",
            "size": 200,
            "mountOptions": ["noexec", "nosuid", "nodev"]
          }
        ]
      }
    }
  ]
}

設定パラメータ

  • containerPath: コンテナ内のマウントポイント
  • size: MiB 単位のサイズ上限。タスクメモリの 20 ~ 30 % 以内を推奨
  • mountOptions: セキュリティオプション
    • noexec: 実行ファイルの実行を禁止
    • nosuid: setuid ビットを無効化
    • nodev: デバイスファイルを無効化

動作確認用サンプル

readonlyRootFilesystem を有効にしつつ、tmpfs で /tmp を書き込み可能にするタスク定義を作成します。

タスク定義
{
  "family": "tmpfs-test",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "256",
  "memory": "512",
  "executionRoleArn": "arn:aws:iam::<account-id>:role/ecsTaskExecutionRole",
  "containerDefinitions": [
    {
      "name": "test-container",
      "image": "busybox:latest",
      "essential": true,
      "readonlyRootFilesystem": true,
      "command": [
        "sh",
        "-c",
        "echo 'Testing tmpfs...'; echo 'test data' > /tmp/test.txt && cat /tmp/test.txt && echo 'Success!' && sleep 30"
      ],
      "linuxParameters": {
        "tmpfs": [
          {
            "containerPath": "/tmp",
            "size": 100,
            "mountOptions": ["noexec", "nosuid"]
          }
        ]
      },
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/tmpfs-test",
          "awslogs-region": "ap-northeast-1",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ]
}

タスクの実行

作成したタスク定義を使用してタスクを実行します。

  1. ECS コンソールのタスク定義画面ページより「デプロイ」>「タスクの実行」を選択
  2. CloudWatch Logsで出力を確認

動作確認

CloudWatch Logs コンソールで「/ecs/tmpfs-test」ログループを開き、以下のようなログが出力されていることを確認します。

実行ログ
Testing tmpfs...
test data
Success!

コストと制限事項

新機能を利用する前に知っておくべきコストと制限事項について説明します。

料金体系

tmpfs 機能自体に追加の課金は発生しません。

Fargate でのメモリ使用

tmpfs はタスクに割り当てられたメモリの一部を使用します。
タスクメモリサイズの設定により、間接的にコストに影響する可能性があります。

  • tmpfs に 200 MiB 割り当てる場合、アプリケーション用にその分のメモリを確保できない
  • 必要に応じてタスクメモリサイズを増やす必要がある場合、コストが増加

例えば、タスクメモリを 512 MiB から 1024 MiB に増やした場合、Fargate の料金は約 2 倍になります。
ただし、多くの場合は既存のメモリ範囲内で tmpfs を割り当てられるため、追加コストは発生しません。

コスト最適化のポイント

  • tmpfs サイズはタスクメモリの 20 ~ 30 % 以内に抑える
  • CloudWatch Container Insights でメモリ使用率を監視
  • 本番適用前に検証環境でサイジングを最適化

制限事項

機能面の制限

  • Windows コンテナでは未対応
  • tmpfs サイズの上限はタスクメモリに依存
  • 複数コンテナ間で tmpfs を共有することは不可

運用上の注意点

  • タスク停止時にデータは完全に消失
  • tmpfs サイズを過大に設定するとアプリケーションメモリを圧迫
  • メモリ不足による OOMKill のリスクに注意

まとめ

今回発表された新機能により、Fargate でも EC2 起動タイプと同等の tmpfs 機能が利用できるようになりました。
readonlyRootFilesystem と組み合わせることで、セキュリティとパフォーマンスを両立したコンテナ環境を構築できます。
タスクメモリの一部を使用するため追加課金は発生せず、タスク定義に数行追加するだけで利用開始できます。
まずは非本番環境で実際に試してみることをお勧めします。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?