ECSのアップデート紹介
ECSのサービスロードバランシングの精度向上
2023年2月に、Amazon Elastic Container Service でサービスロードバランシングの精度を向上したというアップデートがアナウンスされました。
まず、ECSの用語と仕組みを簡単に振り返りたいと思います。
ECSは、コンテナのグループをタスクという単位で管理し、それをEC2もしくはFargate上で稼働させます。
また、ELBを利用することで、アクセスをタスク間で負荷分散させることができますが、タスクは定期的に終了されることがあり(注)、終了するタスクに振り分けてしまうと、クライアント側にエラーを返すこととなります。
注
タスクが終了される要因としては、オートスケーリングによるスケールイン、実行基盤の障害やシャットダウンなどがあります。
そのため、終了するタスクには負荷分散させないようにすることが重要で、今回のアップデートでその精度が向上したとアナウンスされています。
また、今回のアップデートでは、Fargateのスポットインスタンスを利用している場合に有用であるとアナウンスされています。
ECSの実行基盤には、キャパシティが予約されたオンデマンドインスタンスと、最大90%程度のコスト低減ができる代わりに常時起動が保証されないスポットインスタンスを選択可能です。
スポットインスタンスを利用している場合、AWS側のリソース空き状況に応じてインスタンスが停止され、タスクも停止されてしまいます。
このような場合にも、私たちとしては可能な限りエラーを低減させ、アクセスを処理し続けることが重要です。
この話については、AWSからブログ記事が公開されておりますので、詳しくはこちらをご参照ください。
これまで、EC2スポットインスタンスを利用している場合は、自動ドレイニングという機能があり、 インスタンスのシャットダウンとともにタスクが停止される前に、ELBの負荷分散先から該当タスクを除外するような動きをすることが可能でした。
一方、2021年5月時点のブログ記事では、Fargateのスポットインスタンスを利用する場合は、上記の保証がなく、エラーを返してしまうことが記載されています。
今回のアップデートで、タスクが停止状態に入る前にELBの負荷分散先からタスクを除外するような動きをするようになったため、Fargateのスポットインスタンスを利用している場合でも、エラー発生の可能性を低減させることができるようになったようです。
上記のような背景で、これまでFargateのスポットインスタンスはあまり商用環境で利用されていなかったか、利用するにしても作り込みが必要だったかもしれません。今回のアップデートで商用環境にも利用しやすくなったのではないでしょうか。
Amazon CloudWatch アラームと統合し、デプロイの安全性が向上
ECSでは、ECSサービスの機能である「ローリングアップデート」により、タスクをデプロイすることが可能です。
ローリングアップデートでは、ECSが稼働させているタスクを停止させる前に、新しいタスクをデプロイし、接続断が生まれないようにデプロイを行うことが可能です。
ローリングアップデートでは、新たにデプロイしたタスクが正常に稼働しなかった場合にロールバックをするサーキットブレイカーという機能がありました。
これにより、タスクのステータスが正常ではなかった場合に、自動でロールバックを行い、失敗したデプロイの影響を抑えることが可能でした。
今回、上記のロールバック機能に加えて、CloudWatchアラームと連携してロールバックを行うことができるアップデートが発表されました。
これにより、サーキットブレイカーの判定としてはタスクが正常にデプロイされていたように見えていても、レイテンシの増加などで期待する性能を下回っている場合などにロールバックすることが可能になりました。
ロールバックに有用なアラーム設定先はAWSの公式ドキュメントに記載されていますので、具体的な内容はこちらをご参照ください。
まとめ
今回は、App Runner、ECSの直近のアップデートを紹介しました。それぞれ、ユーザ側としてはサービスをより利用しやすくなるようなアップデートだったと思います。
コンテナ管理サービスの今後の発展についても引き続きウォッチしたいと思います。