デプロイ戦略:バージョン、エイリアス、トラフィックシフティング
AWS Lambda によるサーバーレスアプリケーション
Claudio Canales
Senior DevOps Engineer
デプロイ戦略が重要な理由
バグを素早く検出する。
影響範囲を限定する。
迅速に復旧する。
$LATEST と公開バージョンの比較
$LATEST
コードを更新するたびに移動します。
バージョン
変更不可能なスナップショットです。
ロールバックやトラフィック分割に固定しやすいです。
バージョンは変更不可能なスナップショット
バージョンをリリース成果物として扱います。
コードと設定の両方を記録します。
公開後は変更されません。
いつでも正常な状態に戻れます。
エイリアスは安定したポインター
安定したポインターです。
バージョンの代わりにエイリアスを呼び出します。
呼び出し元を変えずに向き先を更新できます。
dev と prod のエイリアス
環境の管理に適しています。
dev
は頻繁に移動します。
エイリアスを移動して
prod
へ昇格します。
重み付きエイリアスによるトラフィックシフティング
本番環境でも安全にテストできます。
トラフィックの大部分は現行バージョンに流れます。
一部のトラフィックが候補バージョンに流れます。
カナリアステップ 1:90/10
90% は現行バージョンに流れます。
10% は実際の負荷で候補バージョンをテストします。
エラーとレイテンシーを監視します。
カナリアステップ 2:50/50
10% のスライスが問題なければ、重みを増やします。
現行 50%、候補 50%。
50/50 では問題がすぐに現れます。
モニタリングが重要です。
カナリアステップ 3:100% 新バージョン
すべてのトラフィックを新バージョンに流します。
旧バージョンはそのまま残ります。
ロールバックは簡単です。
ブルー/グリーンのメンタルモデル
Blue = 現行の安定バージョン。
Green = 新しい候補バージョン。
エイリアスを移動して切り替えます。
重み付きルーティングで段階的に切り替えます。
ロールバック = エイリアスを元に戻す
再デプロイは不要です。
エイリアスを最後に正常だったバージョンへ移動します。
数時間ではなく、数秒で復旧できます。
変更不可能なバージョンと安定したエイリアスが連携します。
シフト中の監視
エラーとタイムアウト。
実行時間とテールレイテンシー。
上限を設定している場合はスロットル。
問題があれば素早く一時停止またはロールバック。
よくある落とし穴:$LATEST を本番として扱う
$LATEST に頼ると予測可能性が失われます。
バージョンとエイリアスで実行中の状態が明確になります。
ロールバックが安全に行えます。
Ignore
安全なデプロイチェックリスト
バージョンを公開する。
エイリアスでトラフィックを段階的にシフトする。
結果を監視する。
各ステップでロールバックできる状態を維持する。
重要なポイント
バージョンで予測可能性が得られます。
エイリアスで安定性が得られます。
重み付きルーティングで安全性が高まります。
ロールバック = エイリアスを移動する。
練習しましょう!
AWS Lambda によるサーバーレスアプリケーション
Preparing Video For Download...