[アップデート] CloudWatch Synthetics Canary でドライランを使って Canary を安全に更新できるようになりました
いわさです。
先日 CloudWatch Synthetics Canary の API がアップデートされ、ドライランの機能が追加されました。
これまで運用中の既存 Canary を更新する場合、エイヤか複製したものを更新して利用するあったのですが、今回の機能を使うことで、Canary に変更を加えて反映する前に、ドライラン(更新のテスト)できるようになるので、更新後の Canary が期待どおり動作するのか確認した後に運用環境に反映が出来ます。
これによって監視の中断などを行う必要がなくなります。
この記事ではドライランの使い方や、ドライランを使った時の関連する Lambda 関数がどのような挙動をするのか調べてみましたので紹介します。
ドライランの実行方法
従来の Canary 更新方法ですが、スクリプトや各種設定など必要な情報を更新した際に、編集画面下部の「保存」ボタンを押す形でした。例えば更新したスクリプトや環境変数に不具合があった場合でも、保存後に実行されるまで確認が出来ませんでした。
そのため Canary を複製して別バージョンとして作成する方法を取ることもあったのですが、運用環境の場合はアラートの差設定などの考慮なども必要でまぁまぁ面倒でした。
今回のアップデートで、編集画面右上に「Start Dry Run」のボタンが配置されています。
試しにスクリプトの一部を更新してみます。ハートビートのチェック対象エンドポイントを変えてみました。
更新後にこのボタンを押してみると、ドライランがこの画面内ですぐに開始されます。
ドライランの実行が終了した場合、成功/失敗のステータスがバナーに表示されます。
ここで「詳細を表示」ボタンを押すと、通常の Canary の詳細画面に遷移することが出来ます。
ドライランの実行結果が残っている場合、詳細画面では Canary 実行結果上も「Dry run」としてステータスが表示されるようになります。
また、ドライランステータスが成功だった場合はそのまま変更内容を保存することも出来ます。
ドライランステータスが失敗だった場合は次のように表示され、保存が出来ません。
代わりに編集ボタンが表示されるので、ドライランが成功するように再修正する流れとなります。
なお、失敗した場合はバナーにエラー内容が表示されるのでその場ですぐにデバッグが可能です。
複数 Canary の一括更新時にもドライランできる
複数 Canary のランタイムバージョンを一括更新することも出来たのですが、その際にもドライランが可能です。
アクションメニューから「ランタイムを更新」を選択すると次のように確認ダイアログ上でドライランを選択できるようになりました。
一括実行の場合は次のように Canary 一覧からステータスとエラー概要を確認することが出来ます。
上記の「Debug」からドライラン結果を確認してデバッグも可能です。便利だなぁ。
スケジュール変更のドライランは出来ない
本日時点の制限事項ですが、スケジュールフィールドの変更時はドライランが実行出来ません。変更すると次のようにドライランがエラーとなります。
ここについては従来どおりエイヤでいきましょう。
ただ、まぁここについてはドライランいるか?という感じもするのでそんなに悪い制限事項ではない気もします。
サポートされているバージョンである必要がある
現在 Synthetics Canary では複数のランタイムがサポートされており、それぞれバージョンが存在します。
今回のドライランは一定以上のランタイムバージョンである必要があります。[1]
- syn-nodejs-puppeteer-10.0 以上
- syn-nodejs-playwright-2.0 以上
- syn-python-selenium-5.1 以上
試しに私の環境で廃止済みランタイムの syn-nodejs-puppeteer-5.0 でドライランをためそうとしたところ、アクションメニューの押下は出来たのですが、Unable to start dry run
と、実行が出来ませんでした。
ランタイムバージョンがサポートされていないとされていますね。
ドライラン時も Lambda バージョンが作成される
Synthetics Canary ですが実体は Lambda 関数が動作する形になります。
そして Canary を更新した時、Lambda 関数の新しいバージョンが作成され、そのバージョンが使用される仕組みになっています。
Canary ドライラン時の挙動を見てみると、この時にも Lambda 関数の新しいバージョンが作成されていることが確認出来ました。
バージョン内を見ると、Canary へ保存されていないスクリプトの編集結果を確認することが出来ました。
裏側では Lambda のバージョン機能を使って Canary への保存・未保存の編集状態を管理し、Canary 側でバージョンを参照させているみたいですね。
さいごに
本日は CloudWatch Synthetics Canary でドライランを使って Canary を安全に更新できるようになったので使ってみました。
ランタイムバージョンなど、Canary の更新ってたまーに発生しますよね。
今回のアップデートで従来よりも気軽に更新に望めるようになったのではないでしょうか。良いアップデートだ。