翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Service Catalog と を使用して、Gitflow 環境にホットフィックスソリューションをデプロイするための動的パイプライン管理を自動化する AWS CodePipeline
Amazon Web Services、Balaji Vedagiri、Faisal Shahdad、Shanmugam Shanker、Vivek Thangamuthu
概要
注記
AWS CodeCommit は新規顧客には利用できなくなりました。の既存のお客様は、通常どおりサービスを AWS CodeCommit 引き続き使用できます。詳細はこちら
このパターンは、ホットフィックスソリューションの本番環境への安全なデプロイ専用の動的ホットフィックスパイプラインを管理するシナリオに対応します。このソリューションは、 AWS Service Catalog ポートフォリオと製品を使用して実装および管理されます。Amazon EventBridge ルールがイベントの自動化に使用されます。制限は、Service Catalog ポートフォリオの制約と開発者向けの AWS Identity and Access Management (IAM) ロールを使用して適用されます。EventBridge ルールによってトリガーされる Service Catalog 製品を起動できるのは、 AWS Lambda 関数のみです。このパターンは、「追加情報」で説明されている特定の Gitflow セットアップを使用する環境向けに設計されています。
通常、修正プログラムは、本番稼働環境などのライブ環境で報告された重大な問題やセキュリティ問題に対応するためにデプロイされます。ホットフィックスはステージング環境と本番環境にのみ直接デプロイする必要があります。ステージングパイプラインと本番パイプラインは、定期的な開発リクエストに広く使用されています。これらのパイプラインは、品質検証中の機能があり、本番環境に移行できないため、ホットフィックスのデプロイには使用できません。このパターンでは、ホットフィックスのリリース用として、次のセキュリティ機能を備えた、存続期間の短い動的パイプラインについて説明します。
自動作成 — ホットフィックスブランチが AWS CodeCommit リポジトリに作成されるたびに、ホットフィックスパイプラインが自動的に作成されます。
アクセス制限 – 開発者は、ホットフィックスプロセスの外でこのパイプラインを作成するためのアクセス権限がありません。
制御されたステージ – パイプラインには特別なアクセストークンを持つ制御されたステージがあり、プルリクエスト (PR) は 1 回しか作成できません。
承認ステージ – 関連するステークホルダーから必要な承認を得るため、承認ステージがパイプラインに含まれます。
自動削除 – ホットフィックスパイプラインは、
hotfixブランチが PR とマージされた後、CodeCommit リポジトリから削除されるたびに自動的に削除されます。
前提条件と制限
前提条件
次のように 3 つのアクティブな AWS アカウント が必要です。
ツールアカウント – 継続的インテグレーションと継続的デリバリー (CI/CD)
ステージアカウント – ユーザー承認テスト用。
本番環境用アカウント – ビジネスエンドユーザー向け。
(オプション) QA アカウント AWS アカウント として機能する を追加します。このアカウントは、QA を含むメインパイプライン設定とテスト用のホットフィックスパイプラインソリューションの両方を希望する場合に必要です。
必要に応じて、メインパイプラインを使用して QA アカウントにデプロイするオプションの条件を持つ AWS CloudFormation スタック。パターンは、
hotfixブランチを作成および削除することで、メインパイプラインのセットアップなしでテストできます。Service Catalog 製品の作成に使用される CloudFormation テンプレートを保存する Amazon Simple Storage Service (Amazon S3) バケット。
コンプライアンス要件に従って CodeCommit リポジトリの PR 承認ルールを作成します (リポジトリの作成の後)。
開発者とチームの IAM アクセス許可を制限して、prcreation-lambda
Lambda 関数の実行を拒否します (この関数の呼び出しはパイプラインからのみとする必要があるため)。
制限事項
CloudFormation プロバイダーはデプロイステージで使用され、アプリケーションは CloudFormation 変更セットを使用してデプロイされます。別のデプロイオプションを使用する場合、必要に応じて CodePipeline スタックを変更します。
このパターンでは AWS CodeBuild 、 およびその他の設定ファイルを使用してサンプルマイクロサービスをデプロイします。別のワークロードタイプ (サーバーレスワークロードなど) を使用している場合は、関連する設定をすべて更新する必要があります。
このパターンでは、アプリケーションを単一の AWS リージョン (たとえば、米国東部 (バージニア北部) us-east-1) にデプロイします AWS アカウント。複数のリージョンにデプロイするには、コマンドとスタックでリージョンリファレンスを変更します。
一部の AWS のサービス は では使用できません AWS リージョン。利用可能なリージョンについては「AWS サービス (リージョン別)
」を参照してください。特定のエンドポイントについて確認するには、「サービスエンドポイントとクォータ」を参照し、サービスのリンクを選択してください。
アーキテクチャ
このセクションの図は、ライフサイクルイベント作成とライフサイクルイベント削除のワークフローを示しています。

ライフサイクルイベント作成の前述の図は、以下を示しています。
開発者は CodeCommit リポジトリに
hotfix-*ブランチを作成して、ホットフィックス関連のソリューションを開発します。hotfix-*ブランチ作成イベントは、EventBridge ルールを通じてキャプチャされます。イベントの詳細には、リポジトリ名およびブランチ名が含まれます。EventBridge ルールは AWS Lambda 関数 を呼び出します
hotfix-lambda-function。EventBridge ルールは、入力としてイベント情報を Lambda 関数に渡します。Lambda 関数は入力を処理してリポジトリ名とブランチ名を取得します。処理された入力から取得した値を使用して Service Catalog 製品を起動します。
Service Catalog 製品には、ソリューションをステージ環境と本番環境にデプロイするパイプライン設定が含まれています。パイプラインブロックには、ソース、ビルド、デプロイの各ステージが含まれます。また、本番環境のデプロイを昇格させる手動承認ステージもあります。
ソースステージは、最初のステップで作成されたリポジトリと
hotfix-*ブランチからコードを取得します。コードは、アーティファクト用の Amazon S3 バケットを介してビルドステージに渡されます。ビルドステージでは、hotfix-*ブランチで開発され、Amazon Elastic Container Registry (Amazon ECR) にプッシュされるホットフィックスを含むコンテナイメージが作成されます。ステージ環境へのデプロイステージでは、ホットフィックスを含む最新のコンテナイメージで Amazon Elastic Container Service (Amazon ECS) が更新されます。ホットフィックスは、CloudFormation 変更セットを作成して実行することでデプロイされます。
prcreation-lambdaLambda 関数は、ステージ環境で正常にデプロイされた後に呼び出されます。この Lambda 関数は、hotfix-*ブランチからリポジトリのdevelopおよびmainブランチに PR を作成します。Lambda 関数は、hotfix-*ブランチで開発された修正がバックマージされ、後続のデプロイに含まれるようにします。手動承認ステージは、必要なステークホルダーが修正を確認し、本番環境にデプロイするための承認を与えるのに役立ちます。
本番環境へのデプロイステージでは、ホットフィックスを含む最新のコンテナイメージで Amazon ECS が更新されます。ホットフィックスは、CloudFormation 変更セットを作成して実行することでデプロイされます。

ライフサイクルイベント削除の前述の図は、以下を示しています。
開発者は、ホットフィックスを本番環境に正常にデプロイした後、
hotfix-*ブランチを削除します。hotfix-*ブランチ削除イベントは、EventBridge ルールを通じてキャプチャされます。イベントの詳細には、リポジトリ名およびブランチ名が含まれます。EventBridge ルールは、Lambda 関数を呼び出します。EventBridge ルールは、入力としてイベント情報を Lambda 関数に渡します。
Lambda 関数は入力を処理してリポジトリ名とブランチ名を取得します。Lambda 関数は、渡された入力からそれぞれの Service Catalog 製品を決定し、製品を終了します。
Service Catalog でプロビジョニングされた製品が終了すると、その製品で以前に作成されたパイプラインおよび関連リソースが削除されます。
自動化とスケール
このパターンには、EventBridge ルールと Lambda 関数が含まれており、複数の修正ブランチの作成リクエストに並行して対応できます。Lambda 関数は、一致するイベントルール向けの Service Catalog 製品をプロビジョニングします。
パイプラインのセットアップは、バージョン管理機能を提供する Service Catalog 製品を使用して対応されます。また、このソリューションは、同じアプリケーションの複数の修正プログラム開発に並行して対応するように自動的にスケーリングされます。
prcreation-lambda
関数を使用すると、これらのホットフィックスの変更も自動プルリクエストの作成を通じて mainとdevelopブランチにマージされます。このアプローチは、mainとdevelopブランチをすべての修正で最新の状態に保ち、潜在的なコードリグレッションを回避するために不可欠です。このプロセスは、存続期間の長いすべてのブランチに最新の修正を適用することで、ブランチ間の一貫性を維持し、コードのリグレッションを防ぐのに役立ちます。
ツール
AWS のサービス
AWS CloudFormation は、 AWS リソースの設定、迅速かつ一貫したプロビジョニング、および AWS アカウント 全体にわたるライフサイクル全体の管理に役立ちます AWS リージョン。
AWS CodeBuild は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。
AWS CodeCommit は、独自のソースコントロールシステムを管理しなくても、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。新規のお客様への AWS CodeCommit の提供は終了しました。の既存のお客様は、通常どおりサービスを AWS CodeCommit 引き続き使用できます。詳細については、AWS CodeCommit 「リポジトリを別の Git プロバイダーに移行する方法
」を参照してください。 AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
「Amazon Elastic Container Registry (Amazon ECR)」 は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
「Amazon Elastic Container Service (Amazon ECS)」 は、クラスターでのコンテナの実行、停止、管理を支援する、高速でスケーラブルなコンテナ管理サービスです。
AWS Key Management Service (AWS KMS) は、データの保護に役立つ暗号化キーの作成と制御に役立ちます。
AWS Service Catalog では、承認された IT サービスのカタログを一元管理できます AWS。エンドユーザーは、組織によって設定された制約に従って、必要な承認済みの IT サービスのみをすばやくデプロイできます。
Amazon Simple Storage Service (Amazon S3) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。
その他のツール
CloudFormation Linter (cfn-lint)
は、CloudFormation YAML または JSON テンプレートを CloudFormation リソース仕様と照合する linter です。また、リソースプロパティの有効な値の確認やベストプラクティスの遵守などの他のチェックも実行します。 cfn_nag
は、CloudFormation テンプレートのパターンを探して潜在的なセキュリティ問題を特定するオープンソースツールです。 「Docker
」は、オペレーティングシステムレベルの仮想化を使用してソフトウェアをコンテナで配信するPlatform as a Service (PaaS) 製品のセットです。このパターンでは、Docker でコンテナイメージをローカルでビルドしてテストします。 Git
はオープンソースの分散バージョンの管理システムです。
コードリポジトリ
このパターンのコードは、GitHub dynamic_hotfix_codepipeline
ベストプラクティス
環境内の IAM ロールとサービスコントロールポリシー (SCP) を確認および調整し、アクセスが適切に制限されていることを確認します。これは、このパターンに含まれるセキュリティ対策を上書きする可能性のあるアクションを防ぐために重要です。最小特権の原則に従い、タスクの実行に必要な最小限の権限を付与します。詳細については、IAM ドキュメントの「最小限の特権を認める。」と「IAM でのセキュリティのベストプラクティス」を参照してください。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
リポジトリのクローン作成 | サンプルリポジトリ
| AWS DevOps |
CloudFormation スタックデプロイ用の環境変数を出力します。 | このパターンの後半で CloudFormation スタックへの入力として使用する次の環境変数を定義します。
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
ツールアカウントで CI/CD に必要なリソースを作成します。 | ツールアカウントに CloudFormation スタックをデプロイするには、次のコマンドを使用します。(セットアップに QA アカウントを使用していない場合は、
CodeCommit リポジトリと Amazon ECR が前のスタックから作成したリソースを書き留めておきます。これらのパラメータは、次のステップでパイプラインの | AWS DevOps |
ワークロードアカウントで CI/CD に必要なリソースを作成します。 |
| AWS DevOps |
S3 アーティファクトバケットポリシーを更新して、ワークロードアカウントへのアクセスを許可します。 | ツールアカウント内の CloudFormation スタックの前提条件を更新するには、次のコマンドを使用して、ステージおよび本番ワークロードアカウントに必要なすべてのアクセス許可を追加します。(セットアップに使用していない場合は、
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
Service Catalog ポートフォリオと製品をセットアップします。 | Service Catalog ポートフォリオと製品をセットアップするには、以下を実行します。
| AWS DevOps |
Lambda 関数をセットアップします。 | このソリューションでは、次の Lambda 関数を使用してホットフィックスワークフローを管理します。
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
| メインブランチのパイプラインを設定するには、ツールアカウントで次のコマンドを実行します。
| AWS DevOps |
|
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
|
| AWS DevOps |
| 前に作成した
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
デプロイされたリソースをクリーンアップします。 | 以前にデプロイされたリソースをクリーンアップするには、次の手順を実行します。
詳細については、Service Catalog ドキュメントの「Deleting provisioned products」を参照してください。 | AWS DevOps |
トラブルシューティング
| 問題 | ソリューション |
|---|---|
CodeCommit リポジトリにコミットした変更はデプロイされません。 | CodeBuild ログに Docker ビルド操作のエラーがないか確認します。詳細については、「CodeBuild のドキュメント」を参照してください。 |
Service Catalog 製品はプロビジョニングされていません。 | 関連する CloudFormation スタックで失敗したイベントを確認します。詳細については、「CloudFormation のドキュメント」を参照してください。 |
関連リソース
追加情報
このパターンは、CI/CD プロセスの開発ワークフローに採用された Gitflow セットアップ環境向けに設計されています。パイプラインは、開発から始まり、品質保証 (QA)、ステージ、本番環境を通過するデプロイサイクルに従います。CI/CD セットアップには、次のように環境への昇格デプロイを含む 2 つの git ブランチが含まれています。
developブランチは開発環境にデプロイされます。mainブランチは、QA、ステージ、本番環境にデプロイされます。
この設定では、新機能のアクティブな開発の進行中に、通常のデプロイサイクルよりも早くホットフィックスまたはセキュリティパッチを適用することが課題になります。修正プログラムやセキュリティリクエストに対処し、本番環境の適切な機能と安全性を確実に維持するには、専用のプロセスが必要です。
ただし、以下の場合は専用のデプロイプロセスを必要とせずに、使用可能な他のオプションを使用できます。
CI/CD プロセスは、機能テストやエンドツーエンドテストなどの自動テストを備えているため、手動テストが不要になり、本番環境へのデプロイの遅延を防ぐことができます。ただし、自動テストが CI/CD プロセスに適切に統合されていない場合、本番環境に小規模の修正をプッシュすると、開発者側の作業が複雑化し、手間が増えてしまう可能性があります。これは、QA 環境で承認とサインオフを待機する新機能が存在する可能性があるためです。修正プログラムまたはセキュリティ修正プログラムを同時に本番環境にプッシュすることはできません。
開発チームは、新しい機能を本番環境に継続的にデプロイし、各新機能のスケジュールされたデプロイにホットフィックスまたはセキュリティパッチを統合します。つまり、本番環境への次の機能更新は、新機能の追加と、修正プログラムまたはセキュリティパッチの追加の 2 つの要素で構成されます。ただし、デプロイサイクルが連続していない場合は、QA 環境で承認を待機する複数の新機能が既に存在する可能性があります。異なるバージョンを管理し、正しい変更が再適用されるようにした場合、作業が複雑になり、エラーが発生しやすくなります。
注記
hotfix バージョン 2 を使用してブランチに AWS CodePipeline 適切なトリガーを設定している場合は、予定外のリクエストに対応するための専用プロセスが必要です。バージョン 2 では、プッシュリクエストまたはプルリクエストのトリガーを設定できます。実行は、パイプラインの以前の状態に応じて、キューに入れられるかすぐに実行されます。ただし、専用パイプラインでは、修正がすぐに本番環境に適用され、緊急の問題が遅滞なく解決されます。