もうすぐリリースするecspresso v2.3に入る新機能紹介

SREチームの藤原です。

この記事は 面白法人グループ Advent Calendar 2023 4日目の記事です。

今日は、自分が開発・メンテナンスしている Amazon ECS デプロイツール ecspresso の次のバージョンでリリースされる予定の新機能を、予告として紹介したいと思います。

github.com

ecspresso v2.3 に入りそうな新機能

Pull Requestで v2.3 ラベルが付いているもの を新機能としてリリースする予定です。

Secrets ManagerのARNを取得する secretsmanager_arn テンプレート関数

add secretsmanager plugin by fujiwara · Pull Request #618 · kayac/ecspresso · GitHub

ECSタスクにSecrets Managerで管理している値を環境変数として読み込む場合、secrets.valueFrom属性にシークレット名ではなく、ARNを指定する必要があります。

Secrets ManagerのシークレットARNは、例えば名前が example/foo だった場合には次のように、作成時に末尾にランダムな値が付与されます。例: arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:example/foo-soBS7X (-soBS7Xがランダムな値)

そのため名前を知っているだけではARNを構築することができず、別途 AWS CLI や ecspresso の CloudFormation / tfstate 参照機能などを利用して ARN を取得する必要がありました。

v2.3 で追加予定の secretsmanager_arn テンプレート関数を使用すると、secretsの名前を指定してARNをテンプレートに展開できるため、この手間を省けます。

  "secrets": [
    {
      "name": "EXAMPLE_FOO",
      "valueFrom": "{{ secretsmanager_arn `example/foo` }}"
    }
  ]

ecspresso run --client-token 引数をサポート

add run --client-token by fujiwara · Pull Request #631 · kayac/ecspresso · GitHub

先日リリースされた、ECSタスク起動の冪等性をサポートする --client-token 引数を追加します。この引数に任意の値を指定することで、同じ値が指定されて実行された RunTask API の呼び出しが冪等になり、複数回実行しても一回の呼び出しとして扱われることが保証されます。

なおSDKの更新により、引数を指定しない場合には内部でランダムな値の token が生成されて RunTask が呼び出されるようになったため、ECS API が503を返すなどして自動でリトライが行われた場合にも意識せずに冪等になるようになっています。

aws.amazon.com

ecspresso diff コマンドで、サービスが存在しない場合にもエラーにならないで差分が表示されるように

diff command works whenever a remote service or a task definition are not found. by fujiwara · Pull Request #632 · kayac/ecspresso · GitHub

これまでは ecspresso diff を実行した場合に比較対象の ECS サービスが存在していない場合には、エラーになっていました。

ecspresso は v2.0 から新規作成とデプロイを区別せず、deploy コマンドで新規作成も更新もできるようになっていましたが、diffコマンドの挙動では区別されていたため、これを変更しました。

v2.3ではECSサービスが存在しない場合、追加のみの差分が表示されるようになります。

設定ファイルの timeout をCLIフラグで上書きできるように、ほか追加の環境変数をサポート

Enables to override timeout in a configuration file by --timeout. by fujiwara · Pull Request #633 · kayac/ecspresso · GitHub

ecspresso の設定ファイルには timeout という項目があり、コマンド実行中に設定したタイムアウト時間を超えた場合にはエラーになります。

しかし設定ファイルによらず、実行時のCLIフラグによりこの値を上書きしたいという要望がありました。Add a CLI flag to support a timeout · Issue #598 · kayac/ecspresso · GitHub

確かに、タイムアウト時間はコマンド実行時に処理によって動的に決めたい性質があるため、設定ファイルの値をフラグで上書きできる方が便利です。

v2.3では --timeout フラグが追加されます。また、同時に次の環境変数によって CLI フラグの値を設定するのと同様の効果を得ることができます。

  • ECSPRESSO_TIMEOUT
  • ECSPRESSO_CONFIG
  • ECSPRESSO_ENVFILE
  • ECSPRESSO_DEBUG
  • ECSPRESSO_EXT_STR
  • ECSPRESSO_EXT_CODE
  • ECSPRESSO_ASSUME_ROLE_ARN

ecspresso v2.3はもうすぐリリース予定です

現在鋭意作業中ですが、このアドベントカレンダーが完結するまでには ecspresso v2.3 をリリースしたいと思っています。

普段から ecspresso をご利用中の皆様、要望を送ってくださった皆様、いつもありがとうございます!

カヤックではECS/ecspressoが好きなエンジニアも募集しています!

hubspot.kayac.com