aws
tldr
ecsのログはここに出てるよ
このイベントをみよう
例えばこのエラーはメモリが不足している。
service sample-service was unable to place a task because no container instance met all of its requirements. The closest matching container-instance 0f2484b70f80a9d46db24f1 has insufficient memory available. For more information, see the Troubleshooting section.
例えばこのエラーはポートが使用中
service sample-service was unable to place a task because no container instance met all of its requirements. The closest matching container-instance 0f2484b70f80a9d46db24f1 is already using a port required by your task. For more information, see the Troubleshooting section.
変化なし
今日は一旦諦めてたcloudwatchにcodedeployのログ出力をやってみよう
あれ、nginxって80だっけ8080だとおもてた
ん?試しにnginxやったらblue/greenできてるんじゃない?
進んでるよねこれ?
やりました
ていうかなんか、なんか違ったぞ挙動が
task定義したあたりでcontainerが勝手にできたんだよな
あの挙動が欲しかったんだよ
全部一旦消したらうまくいった
sg, loadbalancer, target group, task definition, service, cluster
mysql, instance
そしてportbinding直したので、nginxも表示成功
満足です
これでdocker imageとport bindingをやりたかったやつに直せばいけるんじゃないですかね
変えてみた。動くかな
なんかのログが出てた。昨日は見たことない
上のはcloudwatchに出てた
私のimageなんか壊れてるんですかね?
保留中にならないですね
そういえばurlの指定なんか縛りがあったような
いやなさそう
ちゃんと起動するdocker imageならいけることがわかった
単体で起動してみよう
taskに停止理由が書いてあることに気づいた
どうやらs3にアクセスできてない
そしてroleにs3アクセスがない
readonlyでいいやろ
ok起動した
試しにさっき起動したリビジョンを再デプロイしてみたが以前のように止まる
これは流石に失敗しないと思ったのだが
何かを見つけた。私が再デプロイを要請すると、メモリ不足で落ちて
service sample-service は、要件をすべて満たすコンテナインスタンスがなかったため、タスクを配置できませんでした。最も近い条件のコンテナインスタンスaaa では、利用可能なメモリが不足しています。詳細については、「トラブルシューティング」セクションを参照してください。
みづらいな
service sample-service は、要件をすべて満たすコンテナインスタンスがなかったため、タスクを配置できませんでした。最も近い条件のコンテナインスタンスaaa では、利用可能なメモリが不足しています。詳細については、「トラブルシューティング」セクションを参照してください。
確かに私はハードリミットをかけているので限界が来れば落ちる
2021-08-09 14:08:36 +0900
ヘルスチェックを見るに落ちてはいないが
まて、落ちてない、配置できてないんだ
つまりメモリさえ足りていれば配置できそう。
またしても同じエラー
なんかおかしくないですかね
マシンとしては1024だけど、使えるのは768だよって言いたいんだろうきっと
あー、半分にしてもダメか。すでに1タスク起動しているわけで
サービス作り直そう
これでいけるでしょう
なんか別なの出たな
service sample-service-34234 was unable to place a task because no container instance met all of its requirements. The closest matching container-instance-dfasdaf is already using a port required by your task. For more information, see the Troubleshooting section.
port
いや流石にそれはどうにもならなくない?
それでいいの?
え、hostのポート指定しないのはさ、そしたらloadbalancerがtarget groupに繋いでtarget groupで80portに飛ばすって指定してるから。host指定しなかったら、??hostのport指定しないとport何になるの?
やべえ飯食わないと
バナナ1本はだめでしょ。毎日普通の量食べないと。
二つ起動してる。いけそうだな
いやでもポートがな
インスタンスは増えず。インスタンスの中で切り替えてる
ecsログを出力しませんねとか私言ってましたけど、イベントを見ればよかったんですね
やはりというか、コンテナにトラフィックがうつらない
ポート指定してないので変なポートで開いてる
これどうすればいいんだ
loadbalancer→target group 80に接続しようとする→instanceが80:3000
今これ。だけど、instanceのhost port 80に複数バインドしようとしてさっきのエラーが出てるはず。
dynamicにport mappingできるならできそう
Amazon ECS コンソールを開いて、作成または更新するタスク定義のホストポートを 0 に設定します。アプリケーションのコンテナポートマッピングを必ず設定してください。
重要:host および awsvpc ネットワークモードは、動的ホストポートマッピングをサポートしていません。
どこかのサイトでいつぞやに0を指定してたけど、あんまりよくみてなくて、なんやねんこれ?って思ってたけど、これでどう的にできるのか
そして、albも設定か
If you are using containers in a task with the bridge network mode, you can specify a non-reserved host port for your container port mapping, or you can omit the hostPort (or set it to 0) while specifying a containerPort and your container automatically receives a port in the ephemeral port range for your container instance operating system and Docker version.
allってこうやるのか
loadbalancerからinstanceへのトラフィックを上記を参考に全てのportで許可する。
security groupを修正
そして、task definitionでhostを0, containerのポートをcontainer内部のapplicationのポートに設定
きてますねー
できたー
もういっかいやってみよう
完璧だ
ecsのec2はほぼ完璧になったと思われる。自分のサーバーをアップしてみよう
やりましたーデプロイできましたー
もうawsできますわー
ecs, ec2, sg, loadbalancer, tg
あたりがわかった。
この画像がとてもわかりやすかったです。ありがとうございます
数値としてはコンテナインスタンスを見れば書いてあるんだけど、画像になってた方がわかりやすい
あとはgithub連携
route53も使いたいな
そこからトラフィック分けたい。
使い捨てstgを作りたい
243j23423jl.example.comとかを毎回作りたい。1時間くらいで破棄したい。
まだ、値段の予測がつかないからやめとこ
とりあえず、DNS使っとこ
でもstgは欲しいな
$6+リクエスト数でwaf使えるのか
あ、helth checkやべえ
これこれ
あとでにしよう
loadbalancerは同じにして、portでトラフィックを分離して
stgとproductionに分けよう。。
あれ、loadbalancer高くない?
数で課金されるのか
2個にしたら倍になった
基本料金みたいなもんかな
$17.74
2000円くらいするのか〜
もろもろ計算すると5000円くらいになるのかな
たけえな
まあblue/greenしなくてもいいんですけどね。
かっこいいから使いたいっていうくらいで。
あとは、ecsのfargateの方がいいんかなこれだと。
blue/greenするときに、instance内でtaskを一時的に2個立ち上げるために、task1個分を常にあけてるんだよね今。
これ勿体ない。
fargateも一緒か?
750時間までだから1個限定
あーでもうまくやれば1年はほぼ無料でいけるわけか
試しだと十分な気がするな
マシンパワー使い切って、大体いつも予想通りに動かせるならec2が良い
そもそもそんなに動かさないからな今は。
トラフィックが大量になったら考えよう
ただ、本来は時間あたりで請求が来るものではなさそう。
ec2とかloadbalancerとかaclとか。なんで、一年後にはアラート入れとこカレンダーに
残りの時間じゃgithub actionsとの連携までは終わらないな。