🎰

【ECS】故意にスロットリングを発生させる方法

2024/05/10に公開

はじめに

こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。

以下の動作確認のため、AWS ECSでスロットリングを引き起こす方法について共有します。

https://zenn.dev/take_tech/articles/374817f256ec9d

前提

task_definitions/app_task_definitions.json で何を行うか?

Amazon ECS(Elastic Container Service)で使用するタスク定義を記述するファイルです。このファイルには、コンテナの設定情報が含まれます。

具体的には、コンテナの名前、使用するDockerイメージ、必要なメモリやCPUのリソース、環境変数、コマンドなどの情報が記載されています。

これにより、ECSは指定された設定に基づいてコンテナをデプロイし、実行することができます。タスク定義は、インフラストラクチャをコードで管理する際に重要な役割を果たします。

まとめると以下などをtask_definitionsで定義します

  • コンテナの名前
  • 使用するDockerイメージ
  • 必要なメモリやCPU
  • 環境変数
  • コマンド etc...

before

task_definitions/app_task_definitions.json

"containerDefinitions": [
        {
            "name": "sample-stg-app",
            "image": "<APP_IMAGE>",
            "memory": ****,
            "memoryReservation": ****,
            "cpu": ****,
            "command": [
                "bundle",
                "exec",
                "rails",
                "s",
                "-p",
                "80"
            ],

after

"containerDefinitions": [
        {
            "name": "sample-stg-app",
            "image": "<APP_IMAGE>",
            "memory": ****,
            "memoryReservation": ****,
            "cpu": ****,
            "command": [
                "exit",
                "80"
            ],

exit コマンドを追加しました。

以下はその具体的な役割です:

  • プロセスの終了:exitコマンドは、シェルまたはスクリプトの実行を終了させます。
  • 終了コードの指定:exit 80は、プロセスが終了した際に終了コード80を返します。この終了コードは、通常、エラーや異常終了を示します。
  • スロットリングの引き起こし:ECSタスクが終了すると、ECSはタスクを再起動しようとします。これが頻繁に起こると、スロットリング(リソースの制限)が発生し、ECSの動作や設定の確認に利用できます。

https://qiita.com/kooohei/items/0e788a2ce8c30f9dba53

https://registry.terraform.io/providers/hashicorp/awscc/latest/docs/resources/ecs_task_definition#nested-schema-for-container_definitionshealth_check

デプロイメント方法

私の環境では、GitHub Actionsのstg-deployを使って該当ブランチをステージング環境にデプロイします。

デプロイ前にECSで現在正常に実行されているタスクを確認しておくと、スロットリングの発生にすぐ気づけるようになります。

スロットリングが発生しているかの確認方法

  1. ECSを開く
  2. 「タスク」をクリック
  3. 「あらゆる希望するステータス」に変更

すると、「プロビジョニング」や「停止中」などのタスクも表示されます。

以上がバックエンド側でスロットリングを意図的に引き起こす方法とその確認手順です。

最後に

ここまで読んでいただきありがとうございました!
今回の記事が良かったと思ったらぜひ「いいね」を押していただけると嬉しいです 🎉

noteでも記事を執筆していますので、ぜひチェックしてみてください。
https://note.com/take_lifelog/n/n58df7ce7af6f

他にもこのようなことについて記載しているのでお読みいただければ幸いです。

https://zenn.dev/take_tech/articles/275e5f4242973d

https://zenn.dev/take_tech/articles/374817f256ec9d

最後までお読みいただき、誠にありがとうございました!

Discussion