ecs
tldr;
ecs内部でコンテナがいい感じに動かせる
ecsから外部に直接接続もできる
networkmodeがわかりやすい図
eniが各インスタンス内部でいい感じにコンテナに振り分ける
こんな感じで接続できると思っている。
external ip→ecs→eni→contaienr
loadbalancer→ecs→eni→container
の3つの起動タイプがある。
ec2の場合はec2の利用料がかかる
ecsの場合はfargateの利用料がかかる
aws outpostsは??ちょっとよくわからないが、ec2インスタンスの利用料がかかるっぽい
そもそも、aws outpostsがよくわからないが、組み合わせが特徴のなんだろう?組み合わせたやつ。
EC2 インスタンスタイプ、EBS gp2 ボリューム、および S3 on Outposts の組み合わせを特徴とするさまざまな AWS Outposts 構成を購入できます。
今回はec2とfargateを試す
memoryとmemoryReservationがわからんけど、雰囲気で思ってた通りだった。
- memoryは超えるとマシン強制終了
- memoryReservationは超えないように努めるが、超えることもあり、memory OR マシンの上限まで使うことができる。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/task_definition_parameters.html
コマンドを設定する箇所があるんだけど、docker imageをrunしてくれるんならcmdに指定してあるやつが勝手に実行されるよね?からにしてみよう
作業ディレクトリ?docker image をrunしてくれるなら??あれ、docker-composeを使う感じで設定すればいいのか?
elbが各コンテナインスタンスにトラフィックを分散
サービスはタスク定義から作成されたタスクの集合
サービスはクラスタ内部で起動できる
タスク定義でコンテナインスタンスを起動できる
だと理解した
elbが必須なのか?elbがなくてもクラスタに直接トラフィックを割り当てることができるのか?
Application Load Balancer は、HTTP/HTTPS (またはレイヤー 7) トラフィックをルーティングするために使用されます。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/service-load-balancing.html
Network Load Balancer は、TCP または UDP (またはレイヤー 4) トラフィックをルーティングするために使用されます。
Classic Load Balancer は、TCP トラフィックをルーティングするために使用されます。
パスベースルーティングってなんだ
これでいいのか?パスってそのままか。
あってるっぽいな。あとは動かしてみてだけど。
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.
elbにルールを指定して、パスごとにトラフィックを切り分けるんだな
ターゲットグループがよくわからないな
elbにトラフィックが来たら、ルールによってターゲットグループにトラフィックを転送
この中でもターゲットグループを指定しているな。必要なものなんだろう。調べてみよう
トラフィックがどのターゲットグループに届くかって感じだな。ターゲットグループの中身は?
各ターゲットグループは、1 つ以上の登録されているターゲットにリクエストをルーティングするために使用されます。各リスナーのルールを作成するときに、ターゲットグループと条件を指定します。ルールの条件が満たされると、トラフィックが該当するターゲットグループに転送されます。さまざまなタイプのリクエストに応じて別のターゲットグループを作成できます。たとえば、一般的なリクエスト用に 1 つのターゲットグループを作成し、アプリケーションのマイクロサービスへのリクエスト用に別のターゲットグループを作成できます。詳細については、「」を参照してくださいApplication Load Balancer のコンポーネント
ロードバランサーのヘルスチェック設定は、ターゲットグループ単位で定義します。各ターゲットグループはデフォルトのヘルスチェック設定を使用します。ただし、ターゲットグループを作成したときや、後で変更したときに上書きした場合を除きます。リスナーのルールでターゲットグループを指定すると、ロードバランサーは、ロードバランサーで有効なアベイラビリティーゾーンにある、ターゲットグループに登録されたすべてのターゲットの状態を継続的にモニタリングします。ロードバランサーは、正常な登録済みターゲットにリクエストをルーティングします。
したがって、自己署名証明書または期限切れの証明書を使用できます。ロードバランサーは仮想プライベートクラウド (VPC) 内にあるため、ロードバランサーとターゲット間のトラフィックはパケットレベルで認証されるため、ターゲットの証明書が有効でない場合でも、中間者攻撃やスプーフィングのリスクはありません。
ロードバランサーはリクエストを受信すると、優先度順にリスナールールを評価して適用するルールを決定し、ルールアクションのターゲットグループからターゲットを選択します。
client→alb→listener→target group→target
→listener まではわかった。listenerがどうやってtarget groupに振り分けるのかがいまいち。
container idとポートだったかな?
関数、ip, インスタンスidのいづれか
もう一回ecsに戻るか
初めて Amazon ECS を使用する場合、Amazon ECS の AWS Management Console は、手順を追ってウェブサーバーのタスク定義を定義し、サービスを設定して最初の Fargate タスクを起動する初回実行ウィザードを提供します。Amazon ECS の使用経験がほとんどまたはまったくない場合は、初回実行ウィザードを使用することを強くお勧めします。詳細については、Amazon ECS の開始方法 を参照してください。
--networkなんて設定したことないから、defaultのbridgeを使っていたと思われる。
bridgeを見ると、vethインターフェースと書いてある。
vethインターフェースはホストとコンテナでvethインターフェースを第2レイヤーで構築。ホストとコンテナ感の通信を行うことができるようになる。レイヤー2のトンネリング。
ここまでの想定が正しければ、
noneを指定した場合は、外部に接続しない。
hostを指定した場合、containerのポートがそのままhostにマッピングされるため複数の同じコンテナを起動できない。ポートがかぶる。
あれ、それならbridgeも一緒では?
タスクネットワーきんぐ
さらに、同じタスクに属するコンテナが、localhost インターフェイス経由で通信できるようになります。
んーー??んんんんー!?本番でもlocalみたいにできるのか?
画像だとわかりやすいね
なんとなく思ってたけど、eniがわからん
vpc
サブネットは、VPC の IP アドレスの範囲です。AWS リソースは、指定したサブネット内に起動できます。インターネットに接続する必要があるリソースにはパブリックサブネットを、インターネットに接続しないリソースにはプライベートサブネットを使用してください。
トラフィックがゲートウェイより入り、ルートテーブルが紐づいたサブネットへルーターがトラフィックを振り分ける
んだと思ったルートテーブルはメインルートテーブルとカスタムルートテーブルがあり、メインルートテーブルとカスタムルートテーブルで同じip?(ipだけなのか?)が指定されている場合はメインルートテーブルが優先される。
vpcがawsのidに紐付けられる。
別のvpcも取得できるって書いてあったと思う。がまあいい。
vpcから内部にトラフィックが入るにはゲートウェイを経由する
プライベートとパブリックのゲートウェイがある。
ゲートウェイを経由してルーターに届く。ルーターがルートテーブルを見て、トラフィックを振り分ける。
振り分けられれたトラフィックはサブネットへ到達する。
サブネットにはブライベートとパブリックがある。
??プライベートゲートウェイを通過したから、プライベートサブネットという表記にしただけかもしれない。
次はロードバランサーかな
先程の画像で現されていたものはサブネットと外部の接続を書いていたということはルートテーブルとゲートウェイが絡んでくるのか?
albもう一回見よう
albはサブネットを指定する必要がある?ゲートウェイどこいった?
直で繋ぐっぽいな
ゲートウェイは直訳で入口や出口、門口か。なるほど。
blue/green deployment 後の旧インスタンスの扱い
すごい、簡単に立ち上がった
ていうか、あれ?ネットワーク周り勉強したのいらない?
インバウンドトラフィックを例えばの通りにしちゃったよ!そしたら通らなかったよ!0.0.0.0/0にしたら通った。ok。これはexternalipに揃えればトラフィックが同じになるはずだな。試してみよう
[セキュリティグループ] フィールドで、許可するインバウンドトラフィックの IPv4 アドレスの範囲を、CIDR ブロック表記で指定します。たとえば、203.0.113.0/24 と指定します。