Open45

ecs

kajirikajirikajirikajiri

tldr;

ecs内部でコンテナがいい感じに動かせる
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html

ecsから外部に直接接続もできる
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/getting-started-ecs-ec2.html
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/getting-started-fargate.html

networkmodeがわかりやすい図
eniが各インスタンス内部でいい感じにコンテナに振り分ける
https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/networking-networkmode.html

こんな感じで接続できると思っている。
external ip→ecs→eni→contaienr
loadbalancer→ecs→eni→container

kajirikajirikajirikajiri

https://aws.amazon.com/jp/ecs/pricing/
ecsにはfargate, ec2, Amazon ECS on AWS Outposts
の3つの起動タイプがある。
ec2の場合はec2の利用料がかかる
ecsの場合はfargateの利用料がかかる
aws outpostsは??ちょっとよくわからないが、ec2インスタンスの利用料がかかるっぽい

そもそも、aws outpostsがよくわからないが、組み合わせが特徴のなんだろう?組み合わせたやつ。

https://aws.amazon.com/jp/outposts/pricing/

EC2 インスタンスタイプ、EBS gp2 ボリューム、および S3 on Outposts の組み合わせを特徴とするさまざまな AWS Outposts 構成を購入できます。

kajirikajirikajirikajiri

コマンドを設定する箇所があるんだけど、docker imageをrunしてくれるんならcmdに指定してあるやつが勝手に実行されるよね?からにしてみよう

kajirikajirikajirikajiri

作業ディレクトリ?docker image をrunしてくれるなら??あれ、docker-composeを使う感じで設定すればいいのか?

kajirikajirikajirikajiri

elbが各コンテナインスタンスにトラフィックを分散
サービスはタスク定義から作成されたタスクの集合
サービスはクラスタ内部で起動できる
タスク定義でコンテナインスタンスを起動できる
だと理解した

elbが必須なのか?elbがなくてもクラスタに直接トラフィックを割り当てることができるのか?

kajirikajirikajirikajiri

https://qiita.com/leomaro7/items/f9b7f1579983d8c8bbc1
これでいいのか?パスってそのままか。

あってるっぽいな。あとは動かしてみてだけど。

https://docs.aws.amazon.com/elasticloadbalancing/latest/application/tutorial-application-load-balancer-cli.html#path-based-routing-aws-cli

If you have a listener with a default rule that forwards requests to one target group, you can add a rule that forwards requests to another target group based on URL. For example, you can route general requests to one target group and requests to display images to another target group.

kajirikajirikajirikajiri

elbにルールを指定して、パスごとにトラフィックを切り分けるんだな

kajirikajirikajirikajiri

ターゲットグループがよくわからないな

elbにトラフィックが来たら、ルールによってターゲットグループにトラフィックを転送

kajirikajirikajirikajiri

トラフィックがどのターゲットグループに届くかって感じだな。ターゲットグループの中身は?

各ターゲットグループは、1 つ以上の登録されているターゲットにリクエストをルーティングするために使用されます。各リスナーのルールを作成するときに、ターゲットグループと条件を指定します。ルールの条件が満たされると、トラフィックが該当するターゲットグループに転送されます。さまざまなタイプのリクエストに応じて別のターゲットグループを作成できます。たとえば、一般的なリクエスト用に 1 つのターゲットグループを作成し、アプリケーションのマイクロサービスへのリクエスト用に別のターゲットグループを作成できます。詳細については、「」を参照してくださいApplication Load Balancer のコンポーネント
ロードバランサーのヘルスチェック設定は、ターゲットグループ単位で定義します。各ターゲットグループはデフォルトのヘルスチェック設定を使用します。ただし、ターゲットグループを作成したときや、後で変更したときに上書きした場合を除きます。リスナーのルールでターゲットグループを指定すると、ロードバランサーは、ロードバランサーで有効なアベイラビリティーゾーンにある、ターゲットグループに登録されたすべてのターゲットの状態を継続的にモニタリングします。ロードバランサーは、正常な登録済みターゲットにリクエストをルーティングします。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html

kajirikajirikajirikajiri

したがって、自己署名証明書または期限切れの証明書を使用できます。ロードバランサーは仮想プライベートクラウド (VPC) 内にあるため、ロードバランサーとターゲット間のトラフィックはパケットレベルで認証されるため、ターゲットの証明書が有効でない場合でも、中間者攻撃やスプーフィングのリスクはありません。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-routing-configuration

kajirikajirikajirikajiri

client→alb→listener→target group→target

→listener まではわかった。listenerがどうやってtarget groupに振り分けるのかがいまいち。
container idとポートだったかな?

kajirikajirikajirikajiri

初めて Amazon ECS を使用する場合、Amazon ECS の AWS Management Console は、手順を追ってウェブサーバーのタスク定義を定義し、サービスを設定して最初の Fargate タスクを起動する初回実行ウィザードを提供します。Amazon ECS の使用経験がほとんどまたはまったくない場合は、初回実行ウィザードを使用することを強くお勧めします。詳細については、Amazon ECS の開始方法 を参照してください。

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/Welcome.html

kajirikajirikajirikajiri

--networkなんて設定したことないから、defaultのbridgeを使っていたと思われる。

bridgeを見ると、vethインターフェースと書いてある。

https://docs.docker.com/engine/reference/run/#network-settings

vethインターフェースはホストとコンテナでvethインターフェースを第2レイヤーで構築。ホストとコンテナ感の通信を行うことができるようになる。レイヤー2のトンネリング。

https://gihyo.jp/admin/serial/01/linux_containers/0006

kajirikajirikajirikajiri

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Route_Tables.html

トラフィックがゲートウェイより入り、ルートテーブルが紐づいたサブネットへルーターがトラフィックを振り分ける

んだと思ったルートテーブルはメインルートテーブルとカスタムルートテーブルがあり、メインルートテーブルとカスタムルートテーブルで同じip?(ipだけなのか?)が指定されている場合はメインルートテーブルが優先される。

kajirikajirikajirikajiri

vpcがawsのidに紐付けられる。
別のvpcも取得できるって書いてあったと思う。がまあいい。
vpcから内部にトラフィックが入るにはゲートウェイを経由する
プライベートとパブリックのゲートウェイがある。
ゲートウェイを経由してルーターに届く。ルーターがルートテーブルを見て、トラフィックを振り分ける。
振り分けられれたトラフィックはサブネットへ到達する。

kajirikajirikajirikajiri

??プライベートゲートウェイを通過したから、プライベートサブネットという表記にしただけかもしれない。

kajirikajirikajirikajiri

インバウンドトラフィックを例えばの通りにしちゃったよ!そしたら通らなかったよ!0.0.0.0/0にしたら通った。ok。これはexternalipに揃えればトラフィックが同じになるはずだな。試してみよう

[セキュリティグループ] フィールドで、許可するインバウンドトラフィックの IPv4 アドレスの範囲を、CIDR ブロック表記で指定します。たとえば、203.0.113.0/24 と指定します。

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/getting-started-fargate.html