Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWSコンテナサービスの選び方_ECS・Lambdaのユースケースと設計ポイント

 AWSコンテナサービスの選び方_ECS・Lambdaのユースケースと設計ポイント

Avatar for BrainPad

BrainPad

June 26, 2025
Tweet

More Decks by BrainPad

Other Decks in Technology

Transcript

  1. 2 ©BrainPad Inc. Strictly Confidential 所属 自己紹介 データエンジニアリングユニット ビジネス開発 クラウドサービスグループ

    経歴 • 製造系事業会社を経て、2022年にブレインパッドに入社。 • 機械学習や数理最適化領域のプロジェクトに従事。 分析アプリケーションの開発・機械学習モデルのシステム化など担当 好きなAWSサービス 岩本 全央 (いわもと まさちか) • Amazon ECS、AWS Lambda、AWS CodePipeline その他 • 2024/2025 Japan AWS ALL Certifications Engineers
  2. ©BrainPad Inc. Strictly Confidential 4 1. コンテナの概要とAWSのコンテナサービスの紹介 2. Amazon ECSの特徴

    3. AWS Lambdaの特徴 4. Webアプリケーション用途でのサービスの比較 5. まとめ 目次
  3. 6 ©BrainPad Inc. Strictly Confidential コンテナとは アプリケーションとその実行環境をひとまとめにして、どこでも同じように動かせる仕組み 特徴 • 軽量:仮想マシン(VM)と比較して起動が速い

    • 移植性:コンテナ化すればどこでも(開発者PC・開発環境・本番環境など)同じ動作 • スケーラビリティ:必要なときに同じコンテナを複数起動 コンテナ利用時の主なツール • コンテナランタイム: Docker、containerdなど。コンテナ作成・実行時に利用。 • コンテナイメージレジストリ:Docker Hub、Amazon ECRなど。コンテナイメージの保管・共有に利用。 • コンテナオーケストレーション: Kubernetes、Amazon ECSなど。コンテナ群の運用管理に利用。
  4. 7 ©BrainPad Inc. Strictly Confidential コンテナ利用時の基本的な開発の流れ ①開発環境準備 ローカルPCにDocker Desktopなどを導入 ②アプリケーション開発

    ローカルPCでコンテナを起動して動作確認 ③コンテナイメージの登録 ビルドしたイメージをイメージレジストリ(Docker Hub・ECRな ど)にプッシュ ④デプロイ サーバー上のコンテナ実行環境がイメージをプルして起動 サーバー上で動作確認 ③コンテナイメージの登録 ①開発環境準備 ②アプリケーション開発 Amazon ECR ④デプロイ Amazon ECS Amazon EKS AWS Lambda
  5. 8 ©BrainPad Inc. Strictly Confidential AWSで利用できるコンテナ実行サービスの一覧 様々なユーザーに応じたコンテナサービスがある。今回は青枠のサービスを紹介。 サービス名 特徴 主な用途

    Amazon ECS AWS独自のコンテナオーケストレーションサービス。実行環境としてEC2 or Fargateを選択して利用。 シンプルでAWSサービスと統合しやすい。 • Webアプリ • バッチ Amazon EKS Kubernetesのマネージドサービス。KubernetesのAPI・エコシステムはそのままで、AWSサービスと統合可能。 Kubernetesユーザー向け。 • Webアプリ • バッチ AWS Batch バッチジョブをコンテナベースで実行・スケジュール・管理するサービス。ECS上で動作。 高負荷の並列処理、大量データ処理にも対応。並列・依存関係のあるバッチ処理を行いたいユーザー向け。 • バッチ AWS App Runner コンテナアプリケーションを簡単にデプロイ&スケーリングできるフルマネージドサービス 。 インフラの構築や管理を意識せず、アプリのコードを用意すれば、即 Webアプリ/API として公開できる。 裏ではECSが動作していると思われる。 インフラ知識が少ない場合や迅速にデプロイしたいユーザー向け。 • Webアプリ AWS Lambda サーバーレスコンピューティングサービス。 2020年12月リリースのコンテナイメージ対応により、コンテナイメージを Lambdaで実行できるようになった。 サーバーレス×コンテナのいいとこ取り。 • Webアプリ • バッチ ※制限あり その他にも、SageMaker Processing, Light sail, EC2, Elastic Beanstalkでもコンテナの実行が可能です。
  6. 10 ©BrainPad Inc. Strictly Confidential Amazon ECSとは AWS独自のコンテナオーケストレーションサービス 特徴 •

    コンテナ化されたアプリケーションのデプロイ・管理・スケーリングが簡単 →運用の多くを自動化できる(例:オートスケーリング・サーバー異常時の自動復旧など) • 動作環境はEC2 or Fargateを選択可能 →おすすめはFargate(サーバー管理・パッチ適用などが不要になり、人的コストを削減可能) EC2は特定のインスタンスタイプ(GPU利用など)やカスタムAMIを使いたい場合などに選択。 • Webアプリケーション、バッチ処理など幅広い用途に利用可能
  7. 11 ©BrainPad Inc. Strictly Confidential タスク サービス ECS Amazon ECSの構成要素(起動タイプ:Fargateの場合)

    タスク定義 Elastic Load Balancing (ELB) コンテナ2 コンテナ1 参照 ECR Docker イメージ 参照 Fargate タスク コンテナ2 コンテナ1 Fargate クラスター サービスやタスクを実行するための土台 サービス タスクを実行し続けるための管理単位 ネットワーク・タスク数などを設定 Webアプリとしてタスクを使う場合に必要 バッチ処理としてタスクを使う場合は不要 Fargate サーバーレスなコンテナ実行環境 タスク タスク定義に基づいて起動されるコンテナ群 タスク定義 タスク上でコンテナアプリを実行するため の定義 Dockerイメージ参照場所、CPU・メモリ、 IAMロールなどを設定 クラスター
  8. 12 ©BrainPad Inc. Strictly Confidential AWS Cloud Private subnet アーキテクチャ例と設計時の考慮ポイント

    ECSを使う際の考慮ポイントを3点紹介 Public subnet Private subnet IGW ALB クライ アント RDS VPC Region Fargate フロント エンドApp ALB Fargate バック エンドApp タスク 定義 考慮ポイント③ 環境変数の設定 Secrets Manager DB接続情報 など 考慮ポイント② サービス間通信 考慮ポイント① コンテナ間通信 例:リバースプロキ シ利用、ログ収集
  9. 13 ©BrainPad Inc. Strictly Confidential 設計・運用時のポイント:①同一タスク内のコンテナ間の通信 ECSサービスで設定するネットワークモードによってコンテナ間通信の仕方は変わる。 推奨されるのはawsvpcモード。その場合はlocalhostで通信。 awsvpc bridge

    host none 利用可能な 動作環境 Fargate・EC2 EC2 EC2 EC2 特徴 タスクごとにENI割り当て。 AWSの推奨モード。 Docker標準の仮想ブリッジ。 ポットマッピングで複数コンテナの 同一ポート利用が可能。 ホストのネットワークを直接利用。 ポート競合の問題あり。 AWSの非推奨モード。 ネットワークなし。 外部通信不要なタスク向け。 同一タスク 内のコンテ ナ間通信 localhost(127.0.0.1) localhost通信は不可。 bridgeネットワークのIPアドレス localhost通信は不可。 ホストのIPアドレス+ポート番号 不可 利用シーン 例 本番環境、大規模サービス、 セキュリティ重視 開発環境、小規模サービス パフォーマンス重視だが、単一コン テナのみ バッチ処理やローカル処理 ローカル環境(docker-compose利用時)では、localhostではなくコンテナ名での通信する (ブリッジネットワークが自動生成され、コンテナ名から内部DNSで名前解決される) 各ネットワークモードの特徴と通信方法
  10. 14 ©BrainPad Inc. Strictly Confidential 設計・運用時のポイント:②サービス間の通信 ECSタスクは起動のたびにIPが変わるためIP指定の通信は非推奨。 サービス間通信する場合は以下から選択。本番環境向けは ALB or

    ECS Service Connect。 ALB ECS Service Discovery ECS Service Connect メリット •負荷分散が可能 •Blue/Greenデプロイが可能 •トラフィックのメトリクスあり デメリット •ALBの管理・コストが発生 メリット •追加コストなし デメリット •負荷分散機能に劣る •トラフィックのメトリクスなし →リクエストロスト時など調査が難しい メリット •負荷分散が可能 •トラフィックのメトリクスあり デメリット •ローリングデプロイのみ • ECS Service Connect Proxyのコンテナ用のリ ソースが必要 ALBを介してECSサービスにアクセス Cloud Mapを利用して、ECSタスクのIPアドレス をDNS名前解決。プロキシやエージェントなし。 ECS Service Connect Proxyのコンテナを各タス クに自動追加。Cloud Mapを利用して名前解決。 参考:ECS Service Connectによるサービスの新しいつなぎ方 ECS ECS ECS ECS Cloud Map Route53 ECS ECS Cloud Map Route53 サービス名
  11. 15 ©BrainPad Inc. Strictly Confidential 設計・運用時のポイント:③タスク定義の環境変数設定 タスク定義で環境変数を設定することで、環境間の差分吸収やコード上の特別な考慮が不要になる 環境変数の設定方法は以下から選択。パスワードなど秘匿情報用はParameter Store or

    Secrets Manager タスク定義に直接記述 S3ファイルからインポート タスク定義のコンテナ定義内に名前と値を記述 特徴 •設定が簡単 •パスワードなどの秘匿情報は非推奨 環境変数ファイルをS3に配置し、タスク定義で S3からインポートするよう設定 特徴 •環境変数が多い場合に便利 •パスワードなどの秘匿情報は非推奨 注意点 •タスク実行ロールにS3読み取り権限が必要 •インターネットアクセス不可の場合は、VPC Endpoint経由でのアクセス設定が必要 Parameter Store/ Secrets Managerからインポート Parameter StoreやSecrets Managerに名前と値を 設定。タスク定義でインポートするよう設定。 特徴 •タスク定義内でParameter Store or Secrets ManagerのARNを指定し、環境変数として安全 に取得 •パスワードなどの秘匿情報に最適 注意点 •タスク実行ロールに適切なアクセス権限が必要 •インターネットアクセス不可の場合は、VPC Endpoint経由でのアクセス設定が必要 補足:Parameter Store・Secrets Managerの使い分け ・コストを抑えつつ、シンプルに管理したい→Parameter Store ・大量アクセス(タスク増減が激しい)、自動ローテーションが必要→Secrets Manager
  12. 17 ©BrainPad Inc. Strictly Confidential Lambdaとは AWSのサーバーレスコンピューティングサービス 特徴 • インフラのプロビジョニング不要

    → 運用負荷なし • 処理実行時のみの課金 → コスト効率が良い • 自動でスケール → スパイク(瞬間的なアクセス増加)にも対応可能 ただし上限あり(デフォルトで同時実行数1000) • 各種イベントをトリガーにしてコードを自動実行 • 制限事項あり(次ページ以降で紹介)
  13. 18 ©BrainPad Inc. Strictly Confidential 1. zipパッケージのサイズ制限(基本的には50MB。Lambda Layer利用で250MB) 2. ランタイムの制限(Node.js,

    Python, Javaなどの限られたバージョンのみ) 3. プログラミングの観点でも注意が必要(次ページで一部紹介) 4. 最大実行時間15分 5. コールドスタート 6. ストレージの書き込みは/tmpフォルダのみ(永続化なし) 7. 同時実行数のデフォルト1000(引き上げ申請可能) 8. コンピューティングサイズの指定ができない(メモリ量(128MB〜10,240MB)に応じて増減する) 9. リクエスト/レスポンスのペイロードサイズ:6MB Lambdaの主な制限事項 1, 2はコンテナイメージ対応で対処可能 Lambdaは制限事項があるため、利用の際は注意が必要 制限事項の一部は使い方で対処可能
  14. 19 ©BrainPad Inc. Strictly Confidential Lambdaのプログラミング上の注意点 エントリーポイントはLambdaハンドラー Lambda関数は必ずLambdaハンドラーをエントリーポイントとして実装し、ここに処理の本体を書く。 eventで呼び出し元からの入力を受け取り、contextで実行環境情報を取得。いずれもJSON形式。 def

    lambda_handler(event, context): # 処理内容 return "Hello from Lambda!" ステートレス設計 Lambdaは実行の度に新規 or 既存の実行環境で動作するため、関数内に状態を保持しないようにする。 状態は外部のデータベースやストレージに保存。 その他にも注意点はあります(冪等性の確保・再起呼び出し禁止など) 参考URL:AWS Lambda 関数を使用するためのベストプラクティス
  15. 20 ©BrainPad Inc. Strictly Confidential Lambdaのコンテナイメージ対応 コンテナイメージ利用のメリット • デプロイサイズの拡大(従来:250MB コンテナイメージ:10GB)

    • ランタイムの制限なし(従来はNode.js, Python, Javaなどの限られたバージョンのみ) →Dockerfileを使って好きなOS・ランタイム・ライブラリ・ツールを詰め込める Lambdaランタイムのサポート終了に影響されない コンテナイメージ利用のデメリット • コールドスタートの時間増加(従来:〜1秒程度 コンテナイメージ:〜数秒程度 ※イメージサイズにもよる) • ECR利用の手間が増える 2020年12月に導入された機能。ECRに格納されたコンテナイメージをLambdaで実行する。
  16. 21 ©BrainPad Inc. Strictly Confidential AWS Cloud Lambdaのユースケース例:APIのバックエンド処理 API Gatewayと組み合わせて利用。API

    Gatewayの設定を使える点が便利。 LambdaやAPI Gatewayの制限事項がある点は注意。 クライ アント Region API Gateway DynamoDB Lambda メリット • コスト効率 • スケーラビリティ • セキュリティ(API Gatewayでの認証・認可、 APIキー管理、WAF連携など) • AWSサービスとの連携 デメリット • Lambdaの制限事項(コールドスタートなど) • API Gatewayのデフォルトタイムアウト(29 秒)※上限緩和可能 • LambdaハンドラーのeventにHTTPリクエスト が含まれる →Webフレームワークが使えない →移植性が悪い 補足 ・AWS SAMを使うと各サービスの設定やデプロイ、テストが行いやすい ・コーディング時にLamda Power Toolsを使うとログ・バリデーションなどに対応しやすくなる Lambda Web Adapterで対処可能
  17. 22 ©BrainPad Inc. Strictly Confidential Lambda Web Adapterの紹介 Lambda Web

    AdapterはRust製のLambda拡張機能OSS 非Lambda用のWebアプリ(FastAPI, Flask, Spring Bootなど)をLambda上で動かすためのツール Lambda Web Adapterのやること • 受信したイベントを HTTPリクエスト に変換して Web アプリに送信 • HTTPレスポンスを Lambda イベント レスポンスに変換して返す メリット • 導入が簡単(Dockerfileに一行追加) • 移植性向上(アプリケーションを Lambda用に書き換えなくて良い) • 様々な言語に対応 GitHub awslabs/aws-lambda-web-adapter Lambda Web Adapterに似たツールとしてMangumなどあるが、移植性の観点でLambda Web Adapterがおすすめ (アプリケーションのコードにLambda Web Adapterの要素がないため)
  18. 23 ©BrainPad Inc. Strictly Confidential Lambda Web Adapter利用時のメリット①導入が簡単 Dockerfileに青字部分を追加するだけ FROM

    public.ecr.aws/docker/library/python:3.12-slim # 公開リポジトリから/lambda-adapterにあるファイルを/opt/extensions/以下にコピー(Lambda拡張機能として実行) COPY --from=public.ecr.aws/awsguru/aws-lambda-adapter:0.9.1 /lambda-adapter /opt/extensions/lambda-adapter WORKDIR /var/task COPY requirements.txt ./ RUN python -m pip install -r requirements.txt COPY *.py ./ CMD exec uvicorn --port=8000 main:app 補足 ・/opt/extensions/ディレクトリはLambda拡張機能(2021/6にリリース)の実行ファイルを配置する場所 実行可能ファイルが配置された場合、Lambdaは自動的に検出して実行する ・起動スクリプトや環境変数を工夫することで、zipパッケージでもLambda Web Adapterは利用可能 参考URL:Lambda Web Adapter でウェブアプリを (ほぼ) そのままサーバーレス化する
  19. 24 ©BrainPad Inc. Strictly Confidential Lambda Web Adapter利用時のメリット②移植性 アプリケーションのコードにはLambda特有のコードが不要なため、ECSにもそのまま移植可能 from

    fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): print("in root method") return {"message": "Hello World"} FastAPI利用時のコード例
  20. 25 ©BrainPad Inc. Strictly Confidential Lambda Web Adapter利用時のメリット③様々なWebフレームワークに対応 公式リポジトリでは以下のWebフレームワークの例がある Python

    • FastAPI • Flask • Django JavaScript / TypeScript • Express.js • Next.js • Remix • Sveltekit SSR • Deno Oak Java • SpringBoot PHP • Laravel Rust • Actix Web • axum Go • Gin C# (.NET) • ASP.NET MVC • ASP.NET Web API Webサーバ • Nginx 注意事項 • HTTPリクエスト・レスポンスではない Webフレームワーク(WebSocketやgRPC、 独自プロトコルなど利用)は非対応 例:StreamlitはWebSocketを利用しているため非対応
  21. 27 ©BrainPad Inc. Strictly Confidential Webアプリケーション用途での比較 ECSのユースケース:本番稼働など安定稼働が求められる Lambdaのユースケース:制限事項が許容でき、コスト削減重視(PoC・社内用・個人開発など) ECS +

    ALB API Gateway + Lambda (Docker + Lambda Web Adapter) 運用管理 ・Lambdaに比べるとインフラ管理あり ・ECSより運用負荷少ない スケーラビリティ ・オートスケーリングの管理あり ・自動スケーリング パフォーマンス ・安定した低レイテンシ ・コールドスタートあり コスト ・稼働時間ベース ・利用量ベース(未使用時はほぼ無課金) API管理機能 ・ALBの負荷分散 ・API Gatewayの様々な機能(認証・API使用量管理など)を利用可能 大きな制限事項 ・なし ・Lambdaの制限事項あり ・Lambda Web Adapterの対応フレームワークの制限 Lambda-Web-Adapterを利用していると、ECSへの移行もしやすいため、 PoCではLambda-Web-Adapterを用いて、本番稼働ではECSに移行するといった使い方も考えられます。
  22. 29 ©BrainPad Inc. Strictly Confidential まとめ ・コンテナとはアプリケーションとその実行環境をひとまとめにして、どこでも同じように動かせる仕組み ・AWSでの代表的なコンテナ実行サービスはECS ・Lambda上でもコンテナの実行が可能 ・ECSの特徴

    ・幅広い用途に利用可能 ・Lambdaの特徴 ・運用負荷はECSより少ないが、制限事項・注意事項がある ・コンテナやLambda Web Adapterと組み合わせると、Webアプリにも対応しやすい ・ECSとLambdaのWebアプリ用途での比較 ※個人的な見解です ・ECSは安定稼働重視の場合 ・Lambdaは制限事項が許容でき、コスト削減重視の場合
  23. 31 ©BrainPad Inc. Strictly Confidential Lambda Web Adapterの参考URL • AWS

    Lambda Web Adapterを活用する新しいサーバーレスの実装パターン • AWS Lambda の上でいろんなWEB フレームワークを動かそう!