前提
- SAA-C03合格済み!
- 合格までの道のりはこちらを参照してみてください
- 普段の業務ではLambdaを使ってサーバーレスアプリケーションを開発
- SAA合格はしたけど、知識定着のために定期的に記事を書くことにしました
- ECSについて勉強したのでまとめてみる
ECSとは
- AWSが提供するコンテナオーケストレーションサービス
- コンテナを管理する
- コンテナ化されたアプリケーションを簡単にデプロイ、管理、スケールするのに役立つ
そもそもコンテナとは?
- 業務ではサーバーレスアプリケーションを開発しているので、コンテナに馴染みがない...
- まずはそこから調べてみる
コンテナとは
- アプリケーションを実行するための環境をパッケージにしたものです
- アプリケーションを実行するための設定ファイル
- ライブラリ
- ランタイム
- などをパッケージとしてひとまとめにしているもの
コンテナの特徴・メリット
①環境の一貫性
- 「どの環境でも同じように動く」
- アプリケーションに必要なものがパッケージにまとまっているので、「開発環境で実現できた→同じパッケージを使って本番環境も動かせる!」ということが可能
②負荷分散
- 複数のコンテナを追加することで、アプリケーションを拡張できる
- アクセスが増加して負荷がかかった時、コンテナを追加するとその分パフォーマンスを担保できる
③開発効率が上がる
- コンテナ化することで、特定の環境へのデプロイを素早く行うことができる
再確認すると、ECSとはAWSが提供しているコンテナを構築・管理するためのサービス
複数のコンテナがあるということはその分、管理対象のコンテナが増えるということ。それを管理してくれるのが「ECS」
ECSの関連機能
クラスター
- サービスとタスクを実行する基盤
- 利用するインフラを決める(EC2,Fargate,オンプレミスサーバー)
サービス
- クラスター内で実行されているタスクを管理する
- タスクの実行数や起動タイプ(EC2,Fargate)を決める
タスク
- 起動するコンテナの集まり
- アプリケーションを実行する単位
- タスク定義に基づいて起動する
タスク定義
- タスクを構成するコンテナの定義・テンプレート
- アプリケーションを実行する1つ以上のコンテナを定義している
- JSON形式で定義される
設定項目 | 内容 |
---|---|
ファミリー名 | タスク定義の名前 |
コンテナ定義 | 起動するコンテナに関する定義 |
起動タイプ | Fargate、EC2、オンプレミスなどの外部 |
タスクサイズ | タスクが使用するCPU、メモリサイズを指定 |
ネットワークモード | default、bridge、Host、awsvpc、None |
タスク実行ロール | タスクを起動する際に必要となる権限を設定したロール |
タスクロール | アプリケーションから実行するのに必要な権限を設定したロール |
- 詳細なタスク定義項目はこちらを確認してください
FargateとECS on EC2
- ECS起動タイプでは、タスクを実行できる容量を定義します
- FargateとEC2、外部サービスを指定できます
Fargate
- サーバーレス
- サーバーの管理をする必要がなく、アプリケーションの構築に集中できる
- 容量のスケールアウトもやってくれるため、トラフィックの急増を心配する必要がない
- 運用が楽で大規模なワークロード、時折バーストが発生する小さなワークロード、バッチワークロードなどに向いている
EC2
- EC2インスタンスを使用してコンテナを実行する
- インスタンスを管理する必要がある
- アプリケーションのニーズに合わせて、CPUやメモリ設定を自由に設定できる
- 高度なカスタマイズが必要なワークロード、長期間の利用が前提で料金を最適化する必要がある大規模なワークロードに向いている
外部
- ECSでコンテナ化したアプリケーションを、オンプレミスサーバー、仮想マシンで実行するために使用される