github actionsとaws ecsの連携
tldr
次回やること
- stgを更新したいときはstgのサービスを作り直すこと
- prodを更新したいときはstgのサービスを削除し、prodのcodedeployを実行すること
今日の感想
rolling updateはcodedeployだと思っていたが、codedeployではなかった。
healthのエンドポイントを作成して、helth checkのエンドポイントに設定した。
やりたいこと
- codedeployの再実行
- serviceの終了
stg
- stg用codedeployの再実行
prod
- stg用サービスがあれば削除
- prod用codedeployの再実行
優先順
- stgはrolling updateが実行されればよい。これはcodedeployだと思っているが確信がない、調査
- prodはblue/green deployを実行するのだが、その際にinstanceのメモリ容量の上限により、stgのタスクが実行されている場合は終了し、その後にprodのdeployを実行する必要がある
そうだったのね。必要数は1にしてある。てことは1個すでに存在していれば無視しそう。
1455045343504242959のインスタンスが現在実行されている。
rolling updateのserviceを更新して、強制デプロイを実行する
デフォルトでは、ローリング更新プログラムのデプロイタイプを使用するサービスが新しいデプロイを開始すると、必要な数に達するまで、サービススケジューラは新しいタスクを起動します。
primaryとactive2つのデプロイがある
3725306918409588244のデプロイidのインスタンスが実行されている。
さっきと違うのでデプロイは行われたようだ
サービスの設定で必要なタスクの数を0にしていたのを忘れていた。
1に変更した。
rolling updateでタスク必要数が1なら、0になって1が新しく作成されるのかと思ってた。
違うようだ。動きを見てると、1→2→1。
イメージ
1(old)→0→1(new)
実際
1(old)→2(old & new)→1(new)
多分こう
これはk8sだが、大枠は一緒だろう
localでk8sで遊んでみるのもよさそうだな
おうちk8sもやってみたいんだよな
用途としてはあっていたけど、認識が間違っていた。
ec2インスタンスを2分割にして使っている関係上、2コンテナ実行できる。
blue/green deployは2コンテナ立ち上がり、1コンテナ残る想定だった。
rolling updateは1コンテナが消え、新しい1コンテナが立ち上がる、つまり1コンテナ立ち上がる余裕があればいけると思っていた。
しかし、blue/green deployはblueを消さずに残しておく、greenへのテスト接続ができる、blueとgreenへのトラフィックの分散を徐々に行うというような機能がメイン。
そして、rolling updateは2コンテナ一瞬立ち上がるが、両方が立ち上がった時点でトラフィックを切り替えるだけ。
という認識になった。
つまり、どちらにしろ2コンテナ立ち上げる必要がある。これが認識間違い。
用途としての正しさはblue/greenでは、blueが最初に起動している必要がある。これ最初に詰まった。
rolling updateは初期コンテナを必要としないので例えば、productionとstagingの両方を起動している状態でstagingのみ一旦削除して、もう一度立ち上げ直すことができる。
あれ?コンテナを停止したら、もう一回勝手に立ち上がるのか?と思ったけど、auto scalingしてないので起動しなかった。サービスごと毎回作り直したほうが簡単そうだな。
おうちk8sやりたいな。もう少ししたらだな。今月中には買えるだろう。ただ机の上が悲惨だな