前提
本日学んだことを書いていきます。
本題
AmazonECS
AWSが提供するコンテナ管理サービス。
Dockerのコンセプトが所狭しと散りばめられている。
コンテナ管理、コンテナオーケストレーションとも呼ばれる。
複数のコンテナ管理を行う場合、各コンテナの設定を変更したり処理量によってコンテナの数を増加させたり、コンテナの数が多くなるにつれて複雑さを増す。
コンテナオーケストレーションは他にもDockerSwarmやGoogleが提供しているkubernetesが有名。
AWSではkubernetesを扱うサービスAmazonEKSがある。
AWSのコンテナオーケストレーションといえば代表的サービスがECS。
ECSはロードバランサーやオートスケーリングと組み合わさったサービス。このサービスを動かすためのEC2インスタンスも自動で追加・削除される。
AWSでマイクロサービスを展開するには、まず選択肢となる代表的なサービス。
マイクロサービスとは
コンテナと相性のいいソフトウェアの設計思考。
Microsoft Architectureとも呼ばれる。
ECSクラスター
複数のEC2コンテナインスタンスで構成される。
このEC2はECSインスタンスとも呼ばれ、通常のEC2にECSコンテナエージェントがインストールされている。
ECS用に作成されたAMIがあり、これを使って起動したEC2でECSを動かすためのインスタンス。
物理的なリソース、クラスターを土台にしてその上にサービスやタスクといった単位が存在する。
タスク定義
コンテナの定義情報を作成。
Dockerfileのようなもの。
コンテナで使用するイメージやCPU、メモリといったリソース情報、ネットワークの情報や、IAMの権限などといったコンテナ全般に渡る設定を行う。
このタスク定義を元に作られるコンテナをタスクという。
サービスはタスクをいくつ起動するか、最小値や最大値をオートスケーリングのように定義することができる。
例えば、CPU使用率が設定より高まった場合、タスクを追加して処理を手伝わせるという形でタスクを管理する。
サービスは複数設定することができる。
2台のEC2コンテナインスタンスが一つのクラスターという土台を形成し、この土台の上で3つのサービスがあり、それぞれサービスはタスクの数などを管理している。
各タスクではタスク定義で指定したDockerコンテナが起動している。
ECRとは
プライベート版のAWS提供のDockerHubのようなもの。
ECRへのアクセス権限をIAMロール・ポリシーで制御もできる。
DockerHub同様、docker pullコマンドやdocker pushコマンドで同じようにコンテナを出し入れできる。
ECRを開く
↓
リポジトリの作成
↓
URIに対してイメージをプッシュすることが可能
↓
EC2にログイン
↓
手元にあるDockerイメージをECRにプッシュ
↓
ECRにプッシュする場合はAWSCLIコマンドを使用する
↓
認証コードを取得する
↓
EC2インスタンス、ECRへログインするための適切な権限が必要
↓
操作可能なロールを作成
↓
EC2を選択
↓
ロールにアタッチするポリシーは
AmazonECSfullaccess
AmazonEC2containerregistryfullaccess
を付与する
↓
タグは必要に応じてつける
↓
ロールの作成
↓
aws ecr get-loginでログイン
↓
pull、pushが利用できるようになる