hakoへのプルリク その2
前回に引き続きcontainer health checkの対応をプルリクしました。
設定追加するだけだし、簡単だーと思ってましたが、何箇所か指摘頂いたので、備忘録。 簡単かなーと思ってましたが、危うく変な挙動を仕込むところでした。
設定値はオプションのものがある
まず、container health checkは以下の設定項目があります。 HealthCheck - Amazon EC2 Container Service
- command
- interval
- retries
- timeout
- start period
これらのうち必須なのは、commandだけで、あとはなければデフォルト値が使われます。ですが、hako上必須扱いになってしまっていて、記述を忘れるとエラーになってしまう状態でした。
これに対しては、記述なしに対処する修正をしました。
TaskDefinition更新の差分確認があり、デフォルト値が必要
前述のオプションを対処して、動作確認していました。 すると実はhakoがTaskDefinitionを更新するか確認している部分で、AWSからはデフォルト値、hakoからは値なしで差分確認してしまい、差分がないのにTaskDefinitionを更新ありと判断して、更新、デプロイされる状態になっていました。
自分で同じ設定の時にデプロイし直さないので、気づかず見落とし。 オプションでデフォルト値があるものは、デフォルト値をhako側にも入れるように修正しました。
とりあえずこれでcontainer health checkの追加自体は完了。
exampleをどうするかで少し悩む
最初一番のexampleのhello.jsonnetに追加してましたが、container health checkはオプションだし、他のsidecarとかあるとわかりにくいかもだし、分けるかなーと夜中プルリク書きながら考えてました。(その日は眠くてexampleの書き直しは未実施)
翌日、実際分離してみると、HTTPサーバなのに外からのアクセス設定がなく、container health checkだけあるという奇妙なexampleになってしまったので、hello.jsonnetに残すままにしました。
所感など
設定値の必須/任意のところは単純なミスでしたが、TaskDefinitionの差分のところは運用面で影響がありえる*1ものだったので、見つけてもらってよかったです。
v3の話もissueに載っていてうちで少し変更を要するのはyamlの廃止予定。と言ってもCodeBuildでテンプレートから生成しているので、そこ変えればいいかなというぐらいですが。あんまりjsonnetで何かするような設定がないので、まだyamlのまま移行はしてないです。
あと未プルリクなのは、既存のALB/NLBに別ポートでぶら下げる機能。複数サービスを同一のALB/NLBで扱えるようにするもの。今は単にあったらそれにattachしていて、ALB/NLBの設定を反映させてなかったりするので、その辺りどういう感じにするべきかもう一度考えてみようと思います。
参考など
- Amazon ECS Supports Container Health Checks and Task Health Management
- Task Definition Parameters - Amazon Elastic Container Service
- HealthCheck - Amazon EC2 Container Service
- Feature/container healthcheck by reiki4040 · Pull Request #56 · eagletmt/hako · GitHub
*1:厳密にはデプロイされても平気な構成であるべきですが、全く必要なくコンテナの入れ替えが走るのは良くないので防ぐべきです。