以下の講演メモをつらつらとまとめました。
https://www.youtube.com/watch?v=VDPI91bHN-Q&feature=youtu.be
コンテナの利点
- portability
- 再現可能な環境を自由度高く容易に定義できる
- 特定イメージはいつどこで実行しても同じ環境
- Fast&Rapid
- 起動が早い
- CI/CDパイプライン構築が可能
- トライ&エラーしやすい
- Efficient
- リソースの有効活用
- 弾力性の高いシステムが構築できる
コントロールプレーン/データプレーン
- コントロールプレーン・・・コンテナを管理する場所
- どこでコンテナを動かす?いつ止める?
- デプロイ時にどういうふうに配置?
- ECS, EKS
- サーバが増えるとコンテナ管理が大変なので便利。
- データプレーン・・・コンテナが稼働する場所
- 各種状態をコントロールプレーンにフィードバック
- AWS Fargete/EC2
Amazon ECS
本番環境用の機能を充実させている。
- VPCネットワークモード
- オートスケーリングなど
- EC2へのTask配置が柔軟に設定可能
- データプレーンとしては当初EC2しか利用できなかった。
- EC2の管理をしたくないという要望があった。→Fargateの登場へ
Fargate
フルマネージドなデータプレーン→コンテナに集中できる
- インスタンス管理不要
- タスクネイティブAPI
- リソースベースの価格
- 実行時間の秒単位で課金
- タスクリソースに関する課金
- CPUとメモリの組み合わせ
構成
- Task Definition
- Cluster
- 同一クラスタ内でFargateとEC2の移行が用意
- Task
- コンテナの実行単位
- Service
- ロングランニングアプリ用スケジューラ
- 例. Taskの数を希望した数で維持
- ELBとの連携
- ロングランニングアプリ用スケジューラ
VPC統合
VPC ネットワーキングMode
- FargateのタスクはVPC内で実行される
- セキュリティグループ
- Public IPのサポート
- Elastic IPはサポートされないのかな?
インターネットアクセス
- TaskとやりとりするすべてのネットワークトラフィックにはTask ENIを利用
LB
ELBとの統合はServiceでサポート
ALBとNLBをサポート
パーミッションのタイプ
- Cluster Permission
- 誰がタスクを実行できるか
- Application Permission
- アプリがアクセス可能なAWSリソースはどれか?
- HOusekeeping Permissions
- ECSに操作を許可したいパーミッションは何か?
Fargeteモード、EC2モードどちらを選べば良い?
Fargateでは難しいもの
- Windows
- Fargate 起動タイプは、現在 Windows コンテナではサポートされていません。起動タイプの詳細については、「Amazon ECS 起動タイプ」を参照してください。
- https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ECS_Windows.html
- GPU Support
- CPUとメモリの組み合わせがFargateにない。
- docker execのようなインタラクティブなデバッグ
- docker execを使うとコンテナ内でプロセス実行できる
- https://qiita.com/yosisa/items/a5670e4da3ff22e9411a
- スポットインスタンスやRIの価格モデル
Lambdaを使うほうがいい場合
- イベントドリブン
- ミリ秒単位のコンピュート
- ランタイム管理をしたくない
- ラムダはランタイムも管理してくれる。
- 分散バッチコンピューティング
- ラムダは実行時間に5分という制限があるのでバッチはFargateやEC2
ユースケース メトリクスに応じてコンテナの数を自動スケールさせたい
Target Trackingとの連携
- Fargateの場合
- サービスのスケールに応じて自然にコンテナが起動・終了
- EC2
- インスタンスのリソースもうまくスケールさせる必要があり煩雑
EKS
EKSを立ち上げることでK8Sのコントロールプレーンを作るのがかんたんになった。