☕️

ecspresso advent calendar 2020 day 8 - refresh

2020/12/08に公開

Amazon ECS のデプロイツールである ecspresso の利用法をまとめていく ecspresso Advent calendar 8日目です。

ECS サービスのタスクをすべて入れ替える

現在動作しているサービス内のタスクを、設定は変更せずに全て新しく起動したタスクに入れ替えたいことがあります。

起動時に外部から何らかのリソースを読み込む処理があってそれを再読込したい場合であったり、運用上どうしてもメモリーリークが発生してしまうタスクを定期的に再起動する必要があったり、Fargate タスクの退役が予告されたので事前に入れ替えておきたい場合など、理由は様々です。

ecspresso refresh コマンドは、サービス内のタスクをすべて入れ替えます。

実は refresh コマンドは deploy --skip-task-definition --force-new-deployment --no-update-service のショートカットです。

  • タスク定義を新しく登録しない (--skip-task-definition)
  • タスクを新しくデプロイし直す (--force-new-deployment)
  • サービス定義に変更があっても更新しない (--no-update-service)

これらのオプションを指定して、デプロイと同じ操作を実行します。前述の通り、様々な理由で設定変更をせずにタスクを入れ替えたいことが多いため、簡単に使えるようにコマンドとして独立させています。

ソースコード上でも、オプションを決め打ちにした ecspresso.DeployOption を作成して

	refresh := kingpin.Command("refresh", "refresh service. equivalent to deploy --skip-task-definition --force-new-deployment --no-update-service")
	refreshOption := ecspresso.DeployOption{
		DryRun:               refresh.Flag("dry-run", "dry-run").Bool(),
		DesiredCount:         nil,
		SkipTaskDefinition:   boolp(true),
		ForceNewDeployment:   boolp(true),
		NoWait:               refresh.Flag("no-wait", "exit ecspresso immediately after just deployed without waiting for service stable").Bool(),
		UpdateService:        boolp(false),
		LatestTaskDefinition: boolp(false),
  }

ecspresso.Deploy() を呼び出している

	case "refresh":
		err = app.Deploy(refreshOption)

のが分かります。

refresh コマンドのオプション

$ ecspresso --config config.yaml refresh --help
usage: ecspresso refresh [<flags>]

refresh service. equivalent to deploy --skip-task-definition --force-new-deployment --no-update-service

Flags:
  --help           Show context-sensitive help (also try --help-long and --help-man).
  --config=CONFIG  config file
  --debug          enable debug log
  --dry-run        dry-run
  --no-wait        exit ecspresso immediately after just deployed without waiting for service stable

--no-wait

deploy --no-wait と同様、タスクの入れ替えを指示した後に完了を待たず、即終了します。


9日目は各種操作を --no-wait で実行した場合に、サービスが安定状態になるまで待機する方法を説明します。

https://zenn.dev/fujiwara/articles/ecspresso-20201209

Discussion