AWS Fargateの概要

今回はFargateについて理解を深めていきたいと思います。
https://qiita.com/Blago518/items/9b1c104a2a71e2535385

## AWS Fargateとは

- ECR
    - コンテナイメージを格納するレジストリ
- ECS
    - コンテナのデプロイ、スケジューリング、スケーリング等を行うオーケストレーションサービス
- Fargate（EC2）
    - コンテナの実行環境

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/309be486-64bf-489a-ac8e-5bd470dbb1e2.png)

## サーバレスのコンテナ実行環境

- ホストのアップグレード、パッチ適用が対応**不要**
- クラスターのキャパシティ管理が**不要**
- 設計による分離とセキュリティの担保
- 前払い料金なし、利用リソースに応じた**従量課金**
- Fargate SpotとFargate Gravitionによるコスト削減

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/f3d124d3-fcfd-41cf-9e54-10feca567d2a.png)

## Amazon EC2との違い

#### FargateとEC2で異なる5つの観点

1. vCPUとメモリ
1. ホスト
1. ネットワークモード
1. データボリューム
1. セキュリティ

#### 1.vCPUとメモリ

＜Fargate＞
ECS → 新しいタスク定義の作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/be217862-0033-4527-ba3f-b5cdbda63aa6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/50ce48a9-1851-4069-8829-0bc32ecdc1dc.png)

- CPU unitsとは
    - より細かくCPUを調整するECS独自の単位
    - 1,024 CPU units = 1 vCPU
    - ECSタスク定義でCPUリソースを精密に制御したいときに使う
（例）256 CPU units → 0.25 vCPU

＜EC2＞
EC2 → インスタンス → インスタンスを起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/8f84a822-853d-4f32-86cf-167bde316409.png)

- ECSタスクがEC2インスタンス上で稼働
- リソース（CPU/メモリ）は、インスタンスタイプ（例：t3.medium）で決まる
- インスタンス上限内でCPUやメモリを柔軟に設定可能

#### 2.ホスト

- GPUなど、ハードウェアアクセラレーターが未サポート
    - Fargate では、GPU や AWS Inferentia などの「特殊なハードウェア（アクセラレーター）」を利用できない。
    - 機械学習、動画処理、3DレンダリングなどでGPUが必要なアプリは Fargate では動かせない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/2bcba6ce-f3fd-4894-bdbc-2e86a5d44319.png)
（ハードウェアアクセラレーターの一例）

- デーモンスケジューリング戦略（ECS）、デーモンセット（EKS）はサポート対象外
    - サイドカーパターンで対応

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/70056b1f-cb99-4ee9-bee6-685c870bcf09.png)

※デーモンスケジューリング戦略（EC2）
　・ECSサービスの起動戦略のひとつ
　・各EC2インスタンス（ノード）に1つの補助タスクを自動配置する方式
※サイドカーパターン
　・コンテナと同じタスク内に補助タスクを配置する方式
　・タスク単位で「ログ収集・プロキシ・モニタリング」などの処理を行う

 - キャッシュを保持できない
     - Fargateはホスト（インスタンス）を都度作り直すため、コンテナイメージをPullする際にローカルキャッシュが使用できない
     - 毎回Pullしなおすため起動時間がかかる
 - コンテナ起動時間の短縮のアイデア
     - イメージサイズの最適化
     - イメージの圧縮
     - 遅延読み込みSeekable OCI(SOCI) ECS on Fargateのみ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/05cd4ed1-c2fc-4858-84f2-969cd45d100a.png)

## 3.利用可能なネットワークモード

ECSの記事でも整理した通り
https://qiita.com/Blago518/items/9b1c104a2a71e2535385

Fargateではawsvpcモードのみ実行可能

## 4.データボリューム

https://qiita.com/Blago518/items/9b1c104a2a71e2535385

- Fargateでは、以下のデータボリュームを利用可能
    - Fargateバインドマウント / エフェメラルストレージ
    - Amazon EBSボリューム（ECS on Fargateのみ）
    - Amazon EFSボリューム

## 5.セキュリティ




#### セキュリティにおけるFargateのメリット
- OSやエージェントのパッチが不要
    - EC2ではOS/Docker/ECS Agentなどを自分で更新する必要がある
    - FargateではこれらをAWSが管理してくれる
    - セキュリティパッチ対応の手間がかからない
- タスク/Podごとに実行環境が分離　（タスク/ECS、Pod/EKS）
    - EC2上では同じVM上で複数のタスクが動く
    - Fargateでがタスクごとに仮想マシンレベルで分離されている
    - 他タスクからの侵害リスクが減る
- 特権モードが使えない（=安全）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/0712bebd-a1f0-4162-b9bf-4ee98b76e387.png)

- awsvpcネットワークモードのためENIやSGが各タスク/Podにある
    - IP ベースの通信制御が正確にできる
    - ELB のターゲットとして使いやすい
    - ポート競合が発生しない
- sshなどによるホストへのアクセスが不可能

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088727/6d53ba24-0831-40e3-8f37-e017382aad7a.png)

## まとめ

ECR, ECS, FargateについてBlackBeltでの復習を行いました。
今後は以下の「AWSコンテナ設計・構築[本格]入門」に入門してより実用的な運用を身に着けていきます。
https://www.sbcr.jp/product/4815607654/