AWS Fargate

# AWS Fargate

https://d1.awsstatic.com/webinars/jp/pdf/services/20190925_AWS-BlackBelt_AWSFargate.pdf

 

## 概要

サーバー管理なしのコンテナ実行コンピューティングエンジン

  • マネージド
  • コンテナネイティブ
  • 他のAWSサービスとの連携

 

## メリット

  • EC2の管理、スケーリングをAWSにアウトソース可能

 

## 基本

  • メモリとCPU の割り当て
  • タスクレベルにリソース割り当て
  • (オプション)コンテナレベルでリソース割り当て
    • コンテナ用に予約するCPUユニット
    • Memory サイズのハード制限。これ以上になると強制終了
    • Memory のソフト制限
  • コスト
    • Fargate の方が最適化されるケースが多い
    • EC2の場合はタスク実行するリソース以外にリソースが食われるので
  • ストレージ
    • 書き込み可能レイヤーストレージ 10GB
      • コンテナ間で独立
    • ボリュームストレージ 4GB
      • タスクごとに定義されるのでコンテナ間で共有可能
      • タスク停止後には揮発
  • ネットワークモード
    • EC2起動タイプ
    • Fargate 起動タイプ
      • Awsvpcのみ
        • Task ごとにENIを自動割り当て
        • Task 内のコンテナはlocalhost インターフェースを共有
        • VPCないの他のリソースへPrivate IP で通信が可能
        • Fargate ではPublic IP の割り当ても可能
    • インバウンドアクセス
      • LBベースのディスカバリ
        • LB経由のアクセス(ALBNLBが対応)
      • DNSベースのディスカバリ
        • タスク間のアクセス
    • VPC外へのアクセス
      • イメージがpull できること(registryに到達可能であること)
      • ログ送信
        • IGWVPCエンドポイントを利用することも可能
      • アクセスパターン
        • パブリックタスク
          • インターネットと双方向通信
        • プライベートタスク
          • アウトバウンドアクセスのみ
    • インターネットへのアクセス
    • VPCエンドポイントによるプライベートアクセス
      • Private Link(VPC エンドポイント)をサポート
      • ECR S3からイメージをpull, CloudWatch にログを送信(全てVPCエンドポイント)
    • IAM連携
      • クラスタパーミッション
      • アプリケーション(タスクロール)
      • ハウスキーピング
        • タスク実行ロール
          • このロールがユーザに変わってpull & run する
          • プライベートリポジトリのイメージ取得
          • CloudWatch Logs に書き込み
          • (プライベートリポジトリの場合)Scecrets Manager
      • ECSのサービスにリンクされたロール
        • ENIの作成
        • ELBへのターゲット登録

 

## コンテナのデプロイ

  • Task Definition
    • Task を構成するコンテナ群の定義
      • Uri
      • リソース割り当て
      • Task IAMロール
      • ネットワークモード
    • EC2起動タイプとFargate起動タイプで互換性を持たせる
  • Task
    • Task Definition に基づき起動されるコンテナ群の実行単位
    • Task 内のコンテナは同一ホストで実行
  • Service
    • Task実行コピー数を定義
    • Task の定義された値を保持
    • ELBTask のまとまり
    • ロングランニングアプリ用スケジューラ
  • Cluster
    • 実行環境の境界
    • (クラスタに対する操作)IAM権限の境界
    • スケジュールされたタスクの実行を設定可能

 

## ベストプラクティス

  • EC2起動タイプとFargate起動タイプでタスク定義パラメータがちょくちょく違う
  • 起動タイプはどのような基準で選べばいいか
    • EC2
      • Docker exec したいとき
      • GPUサポート
      • Windows コンテナ
      • Spot RIベースの価格モデル
    • Fargate
      • EC2に当てはまらない場合
      • 基本的にこちらの方が最適
  • ログ記録
    • awslogs ログドライバー
      • CloudWatch Logsにて確認
    • Splunkログドライバー
    • FireLens
      • Fluentd or Fluent Bitをログルータに設定できる
  • CloudWatch Container Insights
    • CPU利用率
    • メモリ利用率
    • ネットワークIO
    • タスク数
    • サービス数
  • サイドカー
  • Auto Scaling
    • EC2の場合はタスクがスケールする前にWorkerEC2インスタンスAuto Scale させる必要がある
    • Fargate の方がこちらの点で優位
    • Target Tracking との組み合わせ。指定した値に近づくように自動的にAuto Scale
  • SLA 99.99%

 

## 雑感

EC2起動タイプに比べるとFargate 起動タイプの方がオンデマンドで利用するならメリットがありそう。

現在だとsaving plans があるのでFargate の優位性が高まっているし、インスタンス管理がなくなるのでデータプレーンを立てる際のファーストチョイスになりそう。