AWS Service Catalog と を使用して、Gitflow 環境にホットフィックスソリューションをデプロイするための動的パイプライン管理を自動化する AWS CodePipeline - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

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 サービス (リージョン別)」を参照してください。特定のエンドポイントについて確認するには、「サービスエンドポイントとクォータ」を参照し、サービスのリンクを選択してください。

アーキテクチャ

このセクションの図は、ライフサイクルイベント作成とライフサイクルイベント削除のワークフローを示しています。

ライフサイクルイベント作成のワークフロー。

ライフサイクルイベント作成の前述の図は、以下を示しています。

  1. 開発者は CodeCommit リポジトリに hotfix-* ブランチを作成して、ホットフィックス関連のソリューションを開発します。

  2. hotfix-* ブランチ作成イベントは、EventBridge ルールを通じてキャプチャされます。イベントの詳細には、リポジトリ名およびブランチ名が含まれます。

  3. EventBridge ルールは AWS Lambda 関数 を呼び出しますhotfix-lambda-function。EventBridge ルールは、入力としてイベント情報を Lambda 関数に渡します。

  4. Lambda 関数は入力を処理してリポジトリ名とブランチ名を取得します。処理された入力から取得した値を使用して Service Catalog 製品を起動します。

  5. Service Catalog 製品には、ソリューションをステージ環境と本番環境にデプロイするパイプライン設定が含まれています。パイプラインブロックには、ソース、ビルド、デプロイの各ステージが含まれます。また、本番環境のデプロイを昇格させる手動承認ステージもあります。

  6. ソースステージは、最初のステップで作成されたリポジトリと hotfix-* ブランチからコードを取得します。コードは、アーティファクト用の Amazon S3 バケットを介してビルドステージに渡されます。ビルドステージでは、hotfix-* ブランチで開発され、Amazon Elastic Container Registry (Amazon ECR) にプッシュされるホットフィックスを含むコンテナイメージが作成されます。

  7. ステージ環境へのデプロイステージでは、ホットフィックスを含む最新のコンテナイメージで Amazon Elastic Container Service (Amazon ECS) が更新されます。ホットフィックスは、CloudFormation 変更セットを作成して実行することでデプロイされます。

  8. prcreation-lambda Lambda 関数は、ステージ環境で正常にデプロイされた後に呼び出されます。この Lambda 関数は、hotfix-* ブランチからリポジトリの develop および main ブランチに PR を作成します。Lambda 関数は、hotfix-* ブランチで開発された修正がバックマージされ、後続のデプロイに含まれるようにします。

  9. 手動承認ステージは、必要なステークホルダーが修正を確認し、本番環境にデプロイするための承認を与えるのに役立ちます。

  10. 本番環境へのデプロイステージでは、ホットフィックスを含む最新のコンテナイメージで Amazon ECS が更新されます。ホットフィックスは、CloudFormation 変更セットを作成して実行することでデプロイされます。

ライフサイクルイベントを削除するワークフロー。

ライフサイクルイベント削除の前述の図は、以下を示しています。

  1. 開発者は、ホットフィックスを本番環境に正常にデプロイした後、hotfix-* ブランチを削除します。

  2. hotfix-* ブランチ削除イベントは、EventBridge ルールを通じてキャプチャされます。イベントの詳細には、リポジトリ名およびブランチ名が含まれます。

  3. EventBridge ルールは、Lambda 関数を呼び出します。EventBridge ルールは、入力としてイベント情報を Lambda 関数に渡します。

  4. Lambda 関数は入力を処理してリポジトリ名とブランチ名を取得します。Lambda 関数は、渡された入力からそれぞれの Service Catalog 製品を決定し、製品を終了します。

  5. Service Catalog でプロビジョニングされた製品が終了すると、その製品で以前に作成されたパイプラインおよび関連リソースが削除されます。

自動化とスケール

  • このパターンには、EventBridge ルールと Lambda 関数が含まれており、複数の修正ブランチの作成リクエストに並行して対応できます。Lambda 関数は、一致するイベントルール向けの Service Catalog 製品をプロビジョニングします。

  • パイプラインのセットアップは、バージョン管理機能を提供する Service Catalog 製品を使用して対応されます。また、このソリューションは、同じアプリケーションの複数の修正プログラム開発に並行して対応するように自動的にスケーリングされます。

  • prcreation-lambda 関数を使用すると、これらのホットフィックスの変更も自動プルリクエストの作成を通じて maindevelop ブランチにマージされます。このアプローチは、maindevelop ブランチをすべての修正で最新の状態に保ち、潜在的なコードリグレッションを回避するために不可欠です。このプロセスは、存続期間の長いすべてのブランチに最新の修正を適用することで、ブランチ間の一貫性を維持し、コードのリグレッションを防ぐのに役立ちます。

ツール

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 でのセキュリティのベストプラクティス」を参照してください。

エピック

タスク説明必要なスキル

リポジトリのクローン作成

サンプルリポジトリを作業場所の新しいディレクトリにクローンするには、次のコマンドを実行します。

git clone git@github.com:aws-samples/dynamic_hotfix_codepipeline.git
AWS DevOps

CloudFormation スタックデプロイ用の環境変数を出力します。

このパターンの後半で CloudFormation スタックへの入力として使用する次の環境変数を定義します。

  • ApplicationName – この変数は、アプリケーション用に作成されたリソースに名前を付け、追跡を容易にするために使用されます。次のコマンドを使用して、Applicationname を実際のアプリケーション名に置き換えます。

    export ApplicationName=<Applicationname>
  • BucketStartName – この変数は、Amazon S3 バケットに名前を付けるためのものです。S3 バケット名は、すべての でグローバルに一意である必要があります AWS アカウント。次のコマンドを使用して、BucketName を S3 バケットの一意の名前に置き換えます。

export BucketStartName=<BucketName>
  • アカウント番号とリージョン – これらの変数は、さまざまな環境とデプロイリージョンの AWS アカウント 番号を保存します。次のコマンドを使用して、プレースホルダー ( prodaccountnumberや などregion) を実際の AWS アカウント 数字と使用している に置き換え AWS リージョン ます。

    注記

    QAAccount は省略可能です。QAAccount を使用したい場合は、メインパイプラインスタックのパラメータを使用してセットアップします。

export ProdAccount=<prodaccountnumber> export StageAccount=<stage/preprodaccountnumber> export QAAccount=<qaccountnumber> export ToolsAccount=<toolsaccountnumber> export DepRegion=<region>
AWS DevOps
タスク説明必要なスキル

ツールアカウントで CI/CD に必要なリソースを作成します。

ツールアカウントに CloudFormation スタックをデプロイするには、次のコマンドを使用します。(セットアップに QA アカウントを使用していない場合は、QAAccount パラメータを削除します)。

#InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/pre-reqs.yaml \ --stack-name prereqs \ --parameter-overrides BucketStartName=${BucketStartName} \ ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \ StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \ QAAccount=${QAAccount} \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}

CodeCommit リポジトリと Amazon ECR が前のスタックから作成したリソースを書き留めておきます。これらのパラメータは、次のステップでパイプラインの main ブランチをセットアップするために必要です。

AWS DevOps

ワークロードアカウントで CI/CD に必要なリソースを作成します。

  1. 各ワークロードアカウント (ステージ、本番用、およびオプションの QA) で CloudFormation テンプレートをパッケージ化するには、次のコマンドを使用します。次のコマンドで、S3bucketpackage をパッケージングに使用する Amazon S3 バケット名に置き換えます。

    #InStageAccount aws cloudformation package \ --template-file pre-requisites/infrastack.yaml \ --s3-bucket <S3bucketpackage> \ --s3-prefix infraStack \ --region ${DepRegion} \ --output-template-file pre-requisites/infrastructure_stage.template #InProdAccount aws cloudformation package \ --template-file pre-requisites/infrastack.yaml \ --s3-bucket <S3bucketpackage> \ --s3-prefix infraStack \ --region ${DepRegion} \ --output-template-file pre-requisites/infrastructure_prod.template
  2. 各ワークロードアカウントに CloudFormation テンプレートをデプロイするには、次のコマンドを使用します。

    #InStageAccount aws cloudformation deploy --stack-name inframainstack \ --parameter-overrides ApplicationName=${ApplicationName} ToolsAccount=${ToolsAccount} DepRegion=${DepRegion} \ --template-file pre-requisites/infrastructure_stage.template --region ${DepRegion} --capabilities CAPABILITY_NAMED_IAM #InProdAccount aws cloudformation deploy --stack-name inframainstack \ --parameter-overrides ApplicationName=${ApplicationName} ToolsAccount=${ToolsAccount} DepRegion=${DepRegion} \ --template-file pre-requisites/infrastructure_prod.template --region ${DepRegion} --capabilities CAPABILITY_NAMED_IAM
AWS DevOps

S3 アーティファクトバケットポリシーを更新して、ワークロードアカウントへのアクセスを許可します。

ツールアカウント内の CloudFormation スタックの前提条件を更新するには、次のコマンドを使用して、ステージおよび本番ワークロードアカウントに必要なすべてのアクセス許可を追加します。(セットアップに使用していない場合は、QAAccount パラメータを削除します)。

#InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/pre-reqs.yaml \ --stack-name prereqs \ --parameter-overrides BucketStartName=${BucketStartName} \ ApplicationName=${ApplicationName} ProdAccount=${ProdAccount} \ StageAccount=${StageAccount} ToolsAccount=${ToolsAccount} \ QAAccount=${QAAccount} PutPolicy=true \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
AWS DevOps
タスク説明必要なスキル

Service Catalog ポートフォリオと製品をセットアップします。

Service Catalog ポートフォリオと製品をセットアップするには、以下を実行します。

  1. テンプレート pipeline-main.yamlpipeline-hotfix.yaml を CodePipeline ディレクトリのリポジトリから、(DepRegion) にデプロイするリージョンの既存の Amazon S3 バケット (Bucketname) にアップロードします。

    #InToolsAccount aws s3 cp ./codepipeline/pipeline-main.yaml s3://<Bucketname>/pipeline-main.yaml aws s3 cp ./codepipeline/pipeline-hotfix.yaml s3://<Bucketname>/pipeline-hotfix.yaml
  2. main および hotfix ブランチのパイプラインを管理する Service Catalog ポートフォリオと製品を設定します。次のスタックの MainProductIdMainProductArtifactIdOutputs セクションの詳細を書き留めておきます。この情報は、main ブランチのパイプライン設定の後のステップで必要です。

    #InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/servicecatalogsetup.yaml \ --stack-name servicecatalogsetup \ --parameter-overrides TemplateBucket=<Bucketname> \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
  3. ツールアカウントのリソースを Service Catalog ポートフォリオのメインパイプラインポートフォリオにデプロイする IAM ロールへのアクセスを提供します。このポートフォリオを使用して、main ブランチを使用してアプリケーションをデプロイします。アクセス権を付与する方法の詳細については、AWS Service Catalog のドキュメントの「Granting Access to Users」を参照してください。

AWS DevOps

Lambda 関数をセットアップします。

このソリューションでは、次の Lambda 関数を使用してホットフィックスワークフローを管理します。

  • hotfix-lambda-function は、hotfix ブランチの作成時に Service Catalog 製品のプロビジョニングを処理します。

  • hotfix-cleanup-lambda-function は、hotfix ブランチが削除されるときの製品の終了を管理します。

  • prcreation-lambda は、hotfix ブランチから develop および main ブランチへのプルリクエストを作成します。

hotfix ブランチが関連する EventBridge ルールによって作成または削除されたときに、Lambda 関数が Service Catalog 製品をプロビジョニングおよび終了できるようにするには、次の手順を実行します。

  1. Lambda 関数の IAM ロールとアクセス許可を作成するには、次のコマンドを使用して CloudFormation スタックをデプロイします。

    #InToolsAccount aws cloudformation deploy \ --template-file pre-requisites/lambdasetup.yaml \ --stack-name prsclambdasetup \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM --region ${DepRegion}
  2. スタックのデプロイ後、AWS マネジメントコンソール を使用して Service Catalog ポートフォリオホットフィックスパイプラインポートフォリオへの hotfix-lambda-execution-role アクセスを許可します。このアクセスにより、Lambda 関数はホットフィックスブランチの Service Catalog 製品を起動または終了できるようになります。

AWS DevOps
タスク説明必要なスキル

main ブランチのパイプラインを設定します。

メインブランチのパイプラインを設定するには、ツールアカウントで次のコマンドを実行します。MainProductId および servicecatalogsetup のパラメータを MainProductArtifactId スタック出力の値に置き換えます。

#InToolsAccount aws servicecatalog provision-product \ --product-id <MainProductId> \ --provisioning-artifact-id <MainProductArtifactId> \ --provisioned-product-name "${ApplicationName}-main-pipeline" \ --provisioning-parameters Key=CodeCommitRepoName,Value="${ApplicationName}-repository" Key=ECRRepository,Value="${ApplicationName}-app" \ --region=${DepRegion}
AWS DevOps

main ブランチを使用してアプリケーションをデプロイします。

  1. prereqs で作成された CodeCommit リポジトリのクローンを作成するには、git clone コマンドを使用します。詳細については、CodeCommit ドキュメントで説明されている「リポジトリをクローンして CodeCommit リポジトリに接続する」を参照してください。

  2. リポジトリで使用可能な repotemplates ディレクトリからすべてのアプリケーションファイルをローカルリポジトリクローン (${ApplicationName}-repository) にコピーします。ToolsAccount ID を更新するには、次のファイルを変更します。各ファイルで、RegistryAccountid パラメータを見つけ、その値を ToolsAccount ID に設定します。CodeCommit リポジトリに変更をコミットし、maindevelop ブランチの両方にファイルをプッシュします。

  3. アプリケーションのデプロイを確認するには、 AWS マネジメントコンソールを使用して CodePipeline の実行をモニタリングします。デプロイが完了したら、ステージ環境で Application Load Balancer FQDN を使用してアプリケーションにアクセスします。アプリケーションが想定どおりに機能することを確認します。

  4. 本番環境へのデプロイを承認するには、CodePipeline コンソールを使用してアプリケーションのパイプラインを探します。ApprovalToStart ステージを見つけます。変更を確認し、満足できる場合は、本番デプロイを続行するための手動承認を付与します。

AWS DevOps
タスク説明必要なスキル

hotfix-* ブランチを作成し、変更をコミットします。

hotfix-* ブランチのパイプラインを作成し、ワークロードアカウントにホットフィックスをデプロイするには、次の手順を実行します。

  1. キーワード hotfix で始まる名前を使用してブランチを作成します。例えば、このパターンでは CodeCommit アプリケーションリポジトリ (${ApplicationName}-repository) の hotfix-check1 ブランチを使用します。詳細については、CodeCommit ドキュメントの「 AWS CodeCommit リポジトリに接続する」および「基本的な Git コマンド」を参照してください。 CodeCommit

  2. Service Catalog 製品 Hotfix CICD Pipelinehotfix-check1 ブランチに対して動的に正常にプロビジョニングされていることを確認します。プロビジョニングされた製品名は、この修正ブランチ名とアプリケーションの CodeCommit リポジトリ名に基づき命名されます。

  3. index.html ファイルにいくつかの小さな変更をコミットし、CodeCommit リポジトリにプッシュします。

  4. ステージ環境で CodePipeline が正常に実行されたことを確認します。本番環境にデプロイするには、CodePipeline で手動承認を提供します。

  5. Application Load Balancer の完全修飾ドメイン名 (FQDN) を使用して、アプリケーションのホームページに変更が表示されることを確認します。FQDN は、inframainstack-ALBStack-*Outputs セクションで利用できます。

AWS DevOps

hotfix-check1 ブランチを削除する

前に作成した hotfix-check1 ブランチを削除するには、次の手順を実行します。

  1. CodeCommit アプリケーションリポジトリにある hotfix-check1 ブランチを削除します。

  2. hotfix-check1 ブランチ用にプロビジョニングされた Service Catalog 製品が正常に終了したことを確認します。

AWS DevOps
タスク説明必要なスキル

デプロイされたリソースをクリーンアップします。

以前にデプロイされたリソースをクリーンアップするには、次の手順を実行します。

  1. Amazon ECS サービスをワークロードアカウントのゼロレプリカにスケールダウンするには、次のコマンドを使用します。

    aws ecs update-service --cluster ${ApplicationName}-Cluster --service ${ApplicationName}-Service-stage --desired-count 0 --region ${DepRegion} aws ecs update-service --cluster ${ApplicationName}-Cluster --service ${ApplicationName}-Service-prod --desired-count 0 --region ${DepRegion}
  2. main ブランチ用にプロビジョニングされた Service Catalog 製品を終了します。

  3. ツールアカウントの Amazon S3 バケットに作成されたオブジェクトをクリーンアップします。レジストリ自体を削除する前に、Amazon ECR 内のすべての Docker イメージを削除します。

  4. Service Catalog ポートフォリオを削除する前に、Service Catalog ポートフォリオのアクセス許可セクションで IAM ロールを削除します。

  5. ツールアカウントとワークロードアカウントにデプロイされた CloudFormation スタックを削除します。

##In Tools Account## aws cloudformation delete-stack --stack-name servicecatalogsetup --region ${DepRegion} aws cloudformation delete-stack --stack-name prlambdasetup --region ${DepRegion} aws cloudformation delete-stack --stack-name prereqs --region ${DepRegion}
##In Workload Accounts## aws cloudformation delete-stack --stack-name inframainstack --region ${DepRegion}

詳細については、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 では、プッシュリクエストまたはプルリクエストのトリガーを設定できます。実行は、パイプラインの以前の状態に応じて、キューに入れられるかすぐに実行されます。ただし、専用パイプラインでは、修正がすぐに本番環境に適用され、緊急の問題が遅滞なく解決されます。