社内で使うアプリケーションのデプロイに、aws-cdkを書いてECSで動かすのをやっている。運用する工数をあまり取れないので、コンテナをよしなに扱ってくれるソリューションによって、止まってもいい感じに勝手に直ってくれると嬉しい。
手でポチポチして作るよりは圧倒的にマシで、簡単にもとに戻せるし、リソースが壊れたら消してやり直せて便利。TypeScriptを書いたら構成が出来上がるのはインターフェイスとして快適で、社内で使うグッズを切り出して再利用もできる。
しかし、レイヤがいろいろあって、cdkの知識、CloudFormationのライフサイクルの知識、CloudFormationで作るリソースの一般的な知識、社内のインフラ構成の事情、のどこで失敗しているか、切り分けが難しい。周りの人に聞いたら助けてもらえるので、単に慣れの問題、とも言えるし、学習曲線がいまいちなカーブなのかもしれない。
ステートレスなアプリケーションのデプロイに使うにはよいけど、データベースもECSに置こうとすると、そういうプロセスは起動時にロックファイルを取ろうとするので、デプロイ時に二重起動できず敗退し、ロールバックしようと古いプロセスを立てようとするもそれも失敗、ということになっていて難しかった。いまのところ、デプロイのタイミングに合わせてコンソールに入って古いタスクを手で止める、という滋味深い操作をしている。
MySQLとかならRDSで建てればいいけど、MongoDBを使いたくて、AWSの日本リージョンにはDocumentDBがまだ来ていない。
こういうのを触ってて思うのは、必要にならないと知識は増えないということで、AWS入門、みたいな本は読んだりしていたけど、お前がそう思うんならそうなんだろう的な距離の置き方をしてしまっていた。困ったらドキュメントを端から端まで読むけど、困ってないときは興味もないので調べもしない、というのが実情。
追記
fujiwaraさんに教えていただいた。ありがとうございます!!!
ECSでMongoDB動かしてる人いませんか、MongoDBは二重起動を防ぐためにロックファイルを取る仕組みなのでデプロイすると新しいタスクが起動失敗、ロールバック私用として立てようとするタスクも起動失敗して手で古いタスクを止める、みたいな形になっていて困っています
— 趣味はマリンスポーツです (@hitode909) 2019年4月26日
mongoはサービスとして動かして、diskはホスト側に永続化しているということでしょうか。ダウンタイムは出てしまいますが、サービスの定義でmaximumPercent 100, minimumHealthyPercent 0 とすると古いのが落ちてから新しいのが上がるので、回避できそうな気がします。
— fujiwara (@fujiwara) 2019年4月26日