AWS Fargate
# AWS Fargate
https://d1.awsstatic.com/webinars/jp/pdf/services/20190925_AWS-BlackBelt_AWSFargate.pdf
## 概要
サーバー管理なしのコンテナ実行コンピューティングエンジン
- マネージド
- コンテナネイティブ
- 他のAWSサービスとの連携
## メリット
## 基本
- メモリとCPU の割り当て
- タスクレベルにリソース割り当て
- (オプション)コンテナレベルでリソース割り当て
- コンテナ用に予約するCPUユニット
- Memory サイズのハード制限。これ以上になると強制終了
- Memory のソフト制限
- コスト
- Fargate の方が最適化されるケースが多い
- EC2の場合はタスク実行するリソース以外にリソースが食われるので
- ストレージ
- 書き込み可能レイヤーストレージ 10GB
- コンテナ間で独立
- ボリュームストレージ 4GB
- タスクごとに定義されるのでコンテナ間で共有可能
- タスク停止後には揮発
- ネットワークモード
- EC2起動タイプ
- None; 外部接続なし
- Bridge: Docker の組み込み仮想ネットワークを使用
- Host: EC2インスタンスのネットワークインターフェイスにコンテナポートを直接マッピング
- Awsvpc: タスクごとにENIが割り当てられる
- Fargate 起動タイプ
- Awsvpcのみ
- インバウンドアクセス
- LBベースのディスカバリ
- LB経由のアクセス(ALBとNLBが対応)
- DNSベースのディスカバリ
- タスク間のアクセス
- VPC外へのアクセス
- イメージがpull できること(registryに到達可能であること)
- ログ送信
- IGWやVPCエンドポイントを利用することも可能
- アクセスパターン
- パブリックタスク
- インターネットと双方向通信
- プライベートタスク
- アウトバウンドアクセスのみ
- インターネットへのアクセス
- VPCエンドポイントによるプライベートアクセス
- IAM連携
## コンテナのデプロイ
- Task Definition
- Task を構成するコンテナ群の定義
- Uri
- リソース割り当て
- Task のIAMロール
- ネットワークモード
- EC2起動タイプとFargate起動タイプで互換性を持たせる
- Task
- Task Definition に基づき起動されるコンテナ群の実行単位
- Task 内のコンテナは同一ホストで実行
- Service
- Task実行コピー数を定義
- Task の定義された値を保持
- ELBとTask のまとまり
- ロングランニングアプリ用スケジューラ
- Cluster
- 実行環境の境界
- (クラスタに対する操作)IAM権限の境界
- スケジュールされたタスクの実行を設定可能
## ベストプラクティス
- EC2起動タイプとFargate起動タイプでタスク定義パラメータがちょくちょく違う
- 起動タイプはどのような基準で選べばいいか
- ログ記録
- awslogs ログドライバー
- CloudWatch Logsにて確認
- Splunkログドライバー
- FireLens
- Fluentd or Fluent Bitをログルータに設定できる
- CloudWatch Container Insights
- CPU利用率
- メモリ利用率
- ネットワークIO
- タスク数
- サービス数
- サイドカー
- Auto Scaling
- EC2の場合はタスクがスケールする前にWorkerのEC2インスタンスをAuto Scale させる必要がある
- Fargate の方がこちらの点で優位
- Target Tracking との組み合わせ。指定した値に近づくように自動的にAuto Scale
- SLA 99.99%
## 雑感
EC2起動タイプに比べるとFargate 起動タイプの方がオンデマンドで利用するならメリットがありそう。
現在だとsaving plans があるのでFargate の優位性が高まっているし、インスタンス管理がなくなるのでデータプレーンを立てる際のファーストチョイスになりそう。