24日目: 承認プロセスと手動承認ステップの追加
はじめに:自動化の中に「人間の目」を入れる
皆さん、こんにちは!👋 昨日は、マルチアカウント・マルチリージョンといった組織規模でのCI/CD戦略について学びました。これで、大規模なシステムにも対応できる、堅牢なパイプラインの設計思想を身につけましたね。
しかし、パイプラインが完全に自動化されている場合、予期せぬバグやセキュリティ問題を含むコードが、開発環境から本番環境まで一気にデプロイされてしまうリスクがあります。特に、本番環境へのデプロイメントは、ビジネスに直接的な影響を与えるため、最終的な品質チェックと承認が不可欠です。
本記事では、AWS CodePipelineの「手動承認」機能を活用して、CI/CDパイプラインに承認プロセスを組み込む方法を解説します。これにより、自動化の恩恵を享受しつつ、重要なデプロイメントの前に「人間の目」による最終確認を挟むことができます。
1. なぜ承認プロセスが必要なのか?
承認プロセスは、以下の目的でCI/CDパイプラインに導入されます。
- 品質保証の最終チェック: ステージング環境でのテストが完了した後、本番環境にデプロイする前に、QAチームやプロダクトオーナーが最終的な品質を確認します。
- リスク管理: 本番環境へのデプロイは、予期せぬ障害やパフォーマンス低下のリスクを伴います。承認プロセスを挟むことで、デプロイメントのタイミングや内容を慎重に検討し、リスクを管理できます。
- コンプライアンス: 金融や医療といった特定の業界では、デプロイメントの変更管理プロセスが厳密に定められています。承認ステップは、これらのコンプライアンス要件を満たすために不可欠です。
2. CodePipelineでの手動承認ステップの設定方法
CodePipelineは、パイプラインの任意のステージに「承認アクション」を追加する機能を提供しています。この承認アクションは、承認されるまで後続のステージの実行を停止させます。
設定手順
-
CodePipelineコンソールを開く:
AWSマネジメントコンソールで、対象のCodePipelineを選択し、「編集」をクリックします。 -
承認ステージの追加:
本番環境へのデプロイステージの直前など、承認を挟みたい場所に新しいステージを追加します。例えば、「Staging
」ステージと「Production
」ステージの間に「Approval
」ステージを追加します。 -
承認アクションの追加:
Approval
ステージ内にカーソルを合わせ、「アクションを追加」を選択します。-
アクション名:
ManualApproval
など、わかりやすい名前を付けます。 - アクションプロバイダー: 「承認」を選択します。
-
通知の詳細:
- SNSトピックARN: 承認リクエストの通知を受け取るAmazon SNSトピックを指定します。これにより、メールやSlack、Teamsなどに通知を送ることができます。
- コメント: 承認者への指示や、承認が必要な理由を記載します。
- URL: 承認者が確認すべきステージング環境のURLや、テストレポートのURLなどを指定できます。
-
アクション名:
これらの設定を保存すると、パイプラインが実行され、このステージに到達した際に、指定したSNSトピックに承認リクエストが送信されます。
3. 承認プロセスの実行と通知
承認ステップに到達すると、CodePipelineは後続のステージの実行を停止し、承認待ちの状態になります。
承認者への通知
承認リクエストの通知は、以下のような形式で届きます。
-
メール: SNSトピックにメールアドレスをサブスクライブしておくと、件名に「
[CodePipeline] Manual approval required for pipeline ...
」と書かれたメールが届きます。 - Slack: SNSとAWS Chatbotを連携させておくと、Slackチャンネルに通知を送信できます。
通知には、パイプラインへのリンクと、承認者が確認すべきURL(URL to review
)が含まれており、承認者はリンクをクリックして、詳細を確認できます。
承認または拒否
承認者は、CodePipelineコンソールの承認ステージで、以下のいずれかを選択します。
-
承認:
Approve
をクリックすると、パイプラインは後続のステージの実行を再開します。 -
拒否:
Reject
をクリックすると、パイプラインは失敗し、実行が停止します。
このプロセスにより、本番環境へのデプロイメントが、関係者の承認を得た後でのみ実行されることが保証されます。
4. 承認プロセスをより効率的にするヒント
- 自動承認の活用: すべてのデプロイに手動承認が必要なわけではありません。例えば、開発環境やフィーチャーブランチへのデプロイは自動で行い、ステージングから本番へのデプロイにのみ承認ステップを追加するといった、柔軟な設計が可能です。
- 複数の承認者: 複数の承認者が必要な場合は、IAMのグループやポリシーを使って、複数のユーザーが承認を行えるように設定します。
-
IaCでの管理:
CloudFormation
やCDK
といったIaCツールを使って、承認ステップを含むパイプライン全体をコードとして管理します。これにより、承認プロセスの構成もバージョン管理とレビューの対象となります。
まとめ:自動化とガバナンスの融合
本日は、CI/CDパイプラインに承認プロセスを組み込む方法について学びました。
- 手動承認の重要性: 本番環境へのデプロイメント前に、リスク管理、品質保証、コンプライアンス遵守のために、手動承認ステップが不可欠であることを確認しました。
- CodePipelineの活用: CodePipelineの「承認アクション」を使うことで、パイプラインの任意の場所に承認プロセスを簡単に組み込めることを習得しました。
- 自動化と手動プロセスの融合: 自動化されたパイプラインに、通知や承認といった手動プロセスを適切に組み合わせることで、開発のスピードとガバナンスの両立を図ることができます。
グローバルなAI企業のような、厳格な変更管理が求められる環境では、この承認プロセスが、サービスの安定稼働と信頼性維持のための重要なガードレールとして機能します。
次回は、CI/CDパイプラインの運用中に発生するであろう「障害対応とトラブルシューティング」について解説します。お楽しみに!