ECS
https://gyazo.com/cb1f260f25d51113cc1956ebc4081a4e
コンテナ管理(オーケストレーション)サービス
バックエンドにEC2かFargateかを選択できる
ベストプラクティスはFagateを検討
hiroki.iconamazonオレオレのコンテナオーケストラレーションってことなら、k8sの方が一般的でいい気もするけど
IAMロールを付与したり権限管理とかも一元化できたりするメリットはあるね
タスク定義は削除できない
table:比較
ECS EKS
AWSサービスとの連携 高い 微妙
自由度 普通 高い・高性能
https://gyazo.com/847b55e91b849fb711bfb17b2ac13603
https://gyazo.com/03b3bb585e0b373f22296170fb03e02e
ecs anywhere
https://youtu.be/2D0Sw-2e5UY
Fargateとは
サーバーやクラスターを一切管理する必要がない
https://youtu.be/tmMLLjQrrRA
https://gyazo.com/d432d28740cbd546f17e5fc1f7f58dad
agentかコンテナランタイムを実際に操作。オーケストラレータがエージェントに指示
https://gyazo.com/e537c58ba2585265d0aba02f3c09d8df
https://gyazo.com/6af64b1c841418994c7814de719dc96c
主要4概念
クラスター
dockerコンテナを実行するホストサーバーを論理的に束ねるリソース
Capacity provider
ECSのタスクを実行するインフラを決定する
Capacity provider strategy
複数のCapacity providerの組み合わせ方(最小タスク数、タスク数比率)を決定する
タスク定義
イミュータブル→変更の場合は新しいリビジョンを作成する
更新してもサービスの参照するタスク定義は更新されないのでサービスの設定も更新する必要がある
ログの定義もここ
タスク
タスク実行ロール
ECSコンテナエージェント(Fargateエージェント)で使用されるロール
エージェントがコンテナを実行するまでに必要な権限の範囲
ほとんどのケースでAmazonECSTaskExecutionRolePolicyを付与したロールで事足りる
ecrからイメージをpullできる権限
cloudwatch logへログを流せる権限
/icons/point.iconSSM読んだりする場合はSSMReadポリシーみたいな付与が必要
タスクロール
タスク(コンテナ)に割り当てるロールの作成
コンテナが他のAWSサービスと連携する時に必要
一番重要なやつ
コンテナインスタンスロール
EC2がホストの時にEC2に適用されるロール
ECSのAPIを呼び出すために権限が必要である
サービス
ネットワーク
dockerのネットワーキングモードのこと
awsvpc
タスクにENIが割り当てられる
→ECSインスタンス(EC2)のENI上限には注意が必要
hiroki.iconこれはeksでのネットワークモードでも同様の注意が必要だね
/icons/point.iconfargateではawsvpcしか選択できない
bridge
ポートマッピングできる
hiroki.iconローカルでdockerする時によく使うやつだね
Container Insight
ECSとEC2でのロールの保管場所の違い
使用感としてはどちらもほぼ同じ
code:text
Task Role を使おうとすると EC2 の時と同様にインスタンスメタデータにアクセスすればいいかというと、それではダメです。
アクセスしても何もありません。
ECS では Fargate モードにしろ、EC2 モードにしろ, 1 つのタスク(コンテナ)が 1 つの EC2 を占有するわけではないので単一のインスタンスメタデータに IAM 権限を管理できないのかなと思います。
ではどうするかというと、コンテナごとに専用の保管場所が作成されていて、そこにアクセスすることで取得できます。
Tast 定義で TaskRole を設定し、Task を起動すると立ち上がったコンテナに環境変数でAWS_CONTAINER_CREDENTIALS_RELATIVE_URIという値が注入されます。
この環境変数を使って、以下にアクセスすると、IAM の情報が取得できます
/icons/hr.icon
ECSのEC2インスタンスにログインしてみてメタデータを見てみた
コンテナインスタンスロールに指定したロール(ecsInstanceRole)がプロファイルで渡されていることが確認できる
hiroki.iconこのインスタンス上で実行されるコンテナはインスタンスメタデータを通じてecsInstanceRoleを使用できる→ecsInstanceRoleに不要な権限が入っているとそれもコンテナから実行できてしまうんだね
https://gyazo.com/647ad0a3dc6af4476d4df5464201263a