ECS
主にECS Fargate起動モードについてのまとめ
公式
ECSについて
リージョナルサービス
複数のアベイラビリティゾーンにデプロイされる
コンテナイメージは先に作って、Docker HubやECRに上げとくと、そこから引き出される
起動方法については、Amazon ECSとFargate起動モードの2つがある
どっちでも良いけど、FargateだとEC2の管理が不要になるから、今からやるなら基本こっちで問題ないと思われる
タスク定義
アプリの実行環境をコンテナで用意するのは、まずはこれを書く
WEBサーバ + APサーバ + DBサーバとかそんなん
Apache + PHPなら1コンテナだと思われる
コンテナ数は10個まで指定可能
k8sでいうところのPod相当
タスク定義をECSクラスタ内でインスタンス化することで、アプリを実行する
以下にテンプレートがある
パラメータの説明については以下にあるから、まぁ頑張って設定するしかない
サービス定義
ECSクラスタのタスク定義をインスタンス化して実行する
指定したタスク定義で起動する、タスクの数を指定して実行させられる(タスクの実行多重度を指定する)
ECSクラスタ
タスクまたはサービスの論理グループ
リージョン固有(リージョンは跨がない)
オートスケーリング
Fargate起動モードは以下見とけばOK
ECSクラスタの構成
ECSエージェントが複数存在していて、各ECSエージェントの中にタスクが複数デプロイされる構成
https://gyazo.com/c5d257547bc6ac2b0ba1fc5519f88e5f
スケジューリング
サービススケジューラ
REPLICA
クラスタ全体で必要数のタスクを配置して維持
デフォルトでタスクはアベイラビリティゾーン間で分散される
タスク配置の決定はカスタマイズ可能
DEMON
Fargateがサポートしてないから無視
Fargate起動タイプ
Amazon ECSと一緒に使用するけど、EC2インスタンスの管理が不要
仮想マシンのクラスターをプロビジョニング、設定、スケールする必要がないので、お任せ運用できる
サポートされないパラメータがあったり、動作が異なるパラメータがある。詳しくは上記URLを参照
ネットワークモードはawsvpcのみ。各タスクに独自のElastic Network Interfaceを割り当てる
CPUとメモリはタスクレベルで指定する
ログドライバはfirelensとか使えるようになっているので、日本語ドキュメントは古い
タスクストレージとして以下を受け取れる
10GBのDocker Layerストレージ
ボリュームマウント用の追加4GB
タスクのリタイア時は、殆んどの場合何もする必要はないが、再起動を要するものが出てくる場合がある。その場合はタスクが時間になると停止され、スケジューラにより新しいタスクが開始される。
詳細は以下を参照
リタイアするとき、リタイア予定が発生したときはEメールくれるらしい
Fargateプラットフォームのバージョンは指定可能。LATESTは利用可能な最近のプラットフォームを使用するのであって、最新のプラットフォームバージョンではない場合がある。
ここ見て選ぶ
ECSの制限
機密データの挿入
AWS Secrets ManagerかAWS Systems Managerパラメータストアに保存しておいて、コンテナの定義で参照するようにしておくと、機密データをコンテナに挿入できる
コンテナの環境変数に挿入する場合は、secretsを使用する
コンテナのログ設定内で機密情報を参照する場合は、secretOptionsを使用する
コンテナが最初に起動するときのみに上記は行われる
前提条件
Dockerizeされた開発環境が必要
本番環境で動かすときだけDocker使うは、端的に言って良さを打ち消してるので、そんなことする人居ないと思うけど
使用状況レポート
モニタリング
試すこと
Fargateボリュームを使用してソースコードの共有が出来るのか
何を言っているのかというと、ソース用のデータボリュームを1つデプロイして、コンテナ間で共有できれば、余計な容量喰わなくて済むし、オートスケーリングも上に乗っかるコンテナの起動だけで済むようになるので、迅速に行えるようになる
タスク実行の多重度が混ざってるような気がしなくもない。
Laravelのイベント起動 -> AWSバッチ処理
間隔的なはなし
フロント側は雑魚コンテナを量並べれば良いんじゃね
バッチワークロードをAWSバッチ + チョット良いスペックにして実行