CloudWatch Synthetics Canary を運用していると、
「ランタイム(Node.js / Puppeteer)のバージョンを上げたいけど、
本番 Canary をいきなり更新するのは怖い」
という場面に遭遇します。
そんなときに使えるのが DryRun 機能です。
この記事では、
DryRun を使って Canary のランタイムバージョンを安全に更新してみた記録をまとめます。
前提
- CloudWatch Synthetics Canary を利用中
- ランタイムを旧バージョン → 新バージョンに上げたい
- 本番 Canary を壊さず事前検証したい
Canary の「DryRun」とは?
DryRun は一言でいうと、
「設定変更を保存せずに、その設定で Canary を一度だけ実行できる機能」
です。
特徴:
- Canary 本体の設定は変更されない
- 実行結果(成功 / 失敗・ログ)は確認できる
- ランタイムやコード変更の事前検証に最適
今回やりたいこと
- 既存 Canary のランタイムをアップグレード
- 本番反映前に DryRun で動作確認
例:
syn-nodejs-puppeteer-3.9 → syn-nodejs-puppeteer-6.0
実施手順
1. Canary の編集画面を開く
AWS コンソールから以下へ遷移:
CloudWatch → Synthetics → Canaries
Canary 一覧画面から、
対象 Canary の「Edit」をクリックする。
2. ランタイムバージョンを変更
- Runtime version を新しいものに変更
- Canary スクリプト自体は変更しない
この時点では まだ Update は押さない。
3. DryRun を実行する
ランタイムを変更した状態で、
画面 右上 にある
Start dry run
ボタンをクリックする。
すると:
- 変更後の設定(新ランタイム)を使って Canary が1回だけ実行される
- Canary の設定は一切保存されない
DryRun 実行結果の確認
DryRun 完了後、以下を確認する。
成功した場合
- Canary run status が Succeeded
- スクリーンショット / HAR / ログが正常
- 例外やエラーが出ていない
→ このランタイムバージョンで問題なし
失敗した場合
よくあるエラー例:
- Node.js バージョン差分による例外
- Puppeteer API の変更
- 非同期処理の挙動差分
例:
TypeError: page.waitForTimeout is not a function
→ DryRun なので本番 Canary への影響はゼロ
DryRun 成功後にやること(重要)
DryRun が成功しても、
この時点では Canary のランタイムはまだ更新されていない。
次に行うのは以下:
-
Canary 一覧画面に戻る
-
対象 Canary の設定変更内容を確認
Update
ボタンをクリックする
これにより、
実際に Canary のランタイムバージョンが更新される。
DryRun が便利な理由
1. 本番 Canary を壊さない
- 設定は一切保存されない
- 失敗してもアラームや定期実行に影響しない
2. ランタイム差分検証に最適
- Node.js / Puppeteer の互換性チェック
- deprecated API の事前検出が可能
3. Canary を複製せずに検証できる
- 同一 Canary / 同一環境で検証可能
- 管理対象が増えない
注意点
- DryRun の実行結果は履歴としては残らない
- 定期実行や CloudWatch Alarm とは連動しない
- あくまで一時的な検証用
検証が終わったら、
必ず Update を押して反映する必要がある。
実際に使ってみた所感
- いきなりランタイム更新する怖さがなくなった
- Puppeteer の破壊的変更にすぐ気づけた
- Canary を複製する必要がなく、運用が楽
Canary のランタイムアップデート前には、
必ず DryRun を挟むべきだと感じました。
まとめ
- CloudWatch Synthetics Canary の DryRun は
- 設定変更を保存せずに
- 実行だけを試せる安全装置
- Start dry run は編集状態で実行
- DryRun 成功後、一覧画面の Update で初めて反映される
CloudWatch Synthetics を運用しているなら、
DryRun を使わない理由はない、というのが結論です。