2024 年 12 月 20 日に、「ECS リソースを一括で迅速に停止する」ecstop という CLI ツールを開発してリリースしました。
https://github.com/t-kikuc/ecstop
ecstop という名前は、ECS Stop を組み合わせたものです。私は「イーシーストップ」と発音します。
この記事では、ecstopの概要、理念、今後の展望について紹介します。
ECS 自体をテストしたり、PipeCD を開発/テストしたりするときに、ECS リソースを作成することがよくありました。
ECS はタスクとコンテナ インスタンスの実行に料金を請求するため、未使用のものを停止したいと思いました。
テスト用なので、クラスターやサービスは削除したくありませんでした。無料です。
しかし、大量のリソースを作成したため、AWS コンソールから 1 つずつ停止するのは面倒でした。
コンソールからサービスを停止するには、ECS コンソールに移動し、サービスを選択して「更新」し、タスクの数を 0 に設定して、各サービスの「更新を確認」する必要があります。
IaC およびデプロイメント ツールは運用環境での使用を目的として設計されており、構成ファイルの慎重な変更が必要です。これは「複数のリソースを迅速に停止する」には適していません。
シェルスクリプト/Go を使って一括停止していたのですが、よく呼び出し方を忘れてしまいました。
そこで、適切な CLI ツールを作成することにしました。
次のコマンド (Homebrew) を使用して ecstop をインストールできます:
$ brew install t-kikuc/tap/ecstop
オートコンプリートを有効にするには、ここを参照してください。
オプションの詳細については、READMEを参照してください。
$ ecstop services --cluster xxx
これにより、xxx クラスター内のすべてのサービスのdesiredCount が 0 に設定されます。これにより、サービスにリンクされているタスクも自動的に停止します。
$ ecstop tasks --cluster xxx --standalone
--standalone フラグは、サービスにリンクされていないタスクを停止します。
これは、グループ プレフィックスが service: ではないタスクに適用されます。
サービスにリンクされたタスクを停止するには、代わりに ecstop サービスを使用します。これは、サービスは ecstop タスクで停止した後でも新しいタスクを開始できるためです。
$ ecstop instances --cluster xxx
これにより、xxx クラスターにリンクされているすべてのコンテナー インスタンスが停止 (≠ 終了) されます。
$ ecstop all --cluster xxx
このコマンドは以下と同等です:
$ brew install t-kikuc/tap/ecstop
ecstop 不要な ECR イメージやタスク定義は削除しません。
タスクとコンテナ インスタンス (EC2) は運用コストが高くなりますが、ECR イメージは比較的安価で、タスク定義は無料なので無視しました。サービスとクラスター自体も無料であるため、削除されません。
このため、ツール名には「clean」または「delete」を含めませんでした。
「使われていないので目障りなので削除したい」という場合は、AWS コンソールから複数の項目を選択し、人間の判断で削除する方が簡単です。
また、ECR 画像をクリーンアップするには、Fujiwara さんが作成した ecrm というツールを使用すると良いです。
https://github.com/Fujiwara/ecrm
「どのリソースを停止するか」のセレクター オプションを最小限に抑えました。
個々のリソースを停止するには AWS コンソールで十分であり、テスト環境 (ステージングなどではない) では、「絶対に停止してはいけない」リソースは存在しないはずです。特に夜はやめましょう
ecstop は、典型的な Go CLI 開発スタックに基づいています。
CLI ツールを公開するのは初めてで、哲学の定義方法など、多くのことを学びました。
フィードバックやリクエストがございましたら、https://github.com/t-kikuc/ecstop までお知らせください。
実は、ECS の外部展開に関連する別の CLI ツールを開発中で、近々リリースする予定です。
以上がecstop: ECS リソースを簡単に停止するための CLI ツールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。