翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CodePipeline と AWS CDK を使用して CI/CD パイプラインを設定する
作成者: Konstantin Zarudaev (AWS)、Cizer Pereira (AWS)、Lars Kinder (AWS)、Yasha Dabas (AWS)
コードリポジトリ: CI/CD CodePipeline を使用した AWS | 環境:PoC またはパイロット | テクノロジー: DevOps |
ワークロード: オープンソース | AWS サービス: AWS CodePipeline |
ホーム
継続的インテグレーションおよび継続的デリバリー (CI/CD) によるソフトウェアのビルドとリリースのプロセスを自動化することで、繰り返しビルドが可能になり、ユーザーへの新機能の迅速な提供が可能になります。各コード変更をすばやく簡単にテストでき、ソフトウェアをリリースする前にバグを見つけて修正できます。各変更をステージングとリリースのプロセスで実行することで、アプリケーションやインフラストラクチャコードの品質を検証できます。CI/CD は、アプリケーション開発チームがコード変更をより頻繁かつ確実に行うのに役立つ文化、一連の運用原則、一連のプラクティス
このパターンは、Amazon Web Services (AWS) での再利用可能な継続的インテグレーションおよび継続的デリバリー (CI/CD) パイプラインを定義します。AWS CodePipeline パイプラインは、AWS Cloud Development Kit (AWS CDK) v2
を使用すると CodePipeline、AWS マネジメントコンソールインターフェイス、AWS コマンドラインインターフェイス (AWS CLI)、AWS 、または AWS SDKs を使用して CloudFormation、ソフトウェアリリースプロセスのさまざまな段階をモデル化できます。このパターンは、AWS CDK を使用した CodePipeline とそのコンポーネントの実装を示しています。ライブラリを構築することに加えて、AWS CDK には AWS CDK アプリケーションを操作するための主要なツールであるツールキット (CLI コマンド cdk
) が含まれています。ツールキットには、他の関数の中でも特に、1 つ以上のスタックを CloudFormation テンプレートに変換し、AWS アカウントにデプロイする機能があります。
パイプラインにはサードパーティライブラリのセキュリティを検証するテストが含まれており、指定された環境で迅速かつ自動的なリリースを保証するのに役立ちます。アプリケーションを検証プロセスにかけることで、アプリケーション全体のセキュリティを強化できます。
このパターンの目的は、CI/CD パイプラインを使用してコードをデプロイするのを高速化し、デプロイするリソースが DevOps ベストプラクティスに準拠していることを確認することです。サンプルコード
前提条件と制限
前提条件
アクティブな AWS アカウント
基本的な理解は以下のとおりです。
AWS CDK
AWS CloudFormation
AWS CodePipeline
TypeScript
制約事項
このパターンでは、 TypeScript にのみ AWS CDK を使用します。AWS CDK でサポートされている他の言語は対象外です。
製品バージョン
次のツールの最新バージョンを使用します。
AWS コマンドラインインターフェイス (AWS CLI)
cfn_nag
git-remote-codecommit
Node.js
アーキテクチャ
ターゲットテクノロジースタック
AWS CDK
AWS CloudFormation
AWS CodeCommit
AWS CodePipeline
ターゲット アーキテクチャ
パイプラインは、AWS CodeCommit リポジトリ () の変更によってトリガーされますSampleRepository
。最初に、 はアーティファクトを CodePipeline ビルドし、それ自体を更新して、デプロイプロセスを開始します。作成されたパイプラインは、次の 3 つの独立した環境に解決策をデプロイします。
開発 – アクティブな開発環境での 3 段階のコードチェック
テスト – 統合/リグレッションテスト環境
本番 – 本番環境
開発段階には、リンティング、セキュリティ、ユニットテストの 3 つのステップが含まれます。これらの手順はプロセスを高速化するために並行して実行されます。パイプラインが動作するアーティファクトのみを提供するようにするため、プロセス内のステップが失敗するたびにパイプラインの実行が停止されます。開発段階のデプロイ後、パイプラインは検証テストを実行して結果を検証します。成功すると、パイプラインはデプロイ後の検証を含むテスト環境にアーティファクトをデプロイします。最後のステップは、アーティファクトを Prod 環境にデプロイすることです。
次の図は、 CodeCommit リポジトリから、 によって実行されるビルドおよび更新プロセスへのワークフロー CodePipeline、3 つの開発環境ステップ、および 3 つの環境のそれぞれでのその後のデプロイと検証を示しています。
![開発環境には、リンティング、セキュリティ、ユニットテストが含まれ、すべてデプロイと検証が含まれます。](images/pattern-img/d617e735-8624-4722-8a3d-073bcc356328/images/92504aac-03e3-4c95-b225-74505f8dd136.png)
ツール
AWS サービス
AWS Cloud Development Kit (AWS CDK) は、AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
AWS CloudFormation は、AWS リソースをセットアップし、迅速かつ一貫したプロビジョニングを行い、AWS アカウントとリージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。このパターン CloudFormation テンプレートを使用すると、 CodeCommit リポジトリと CodePipeline CI/CD パイプラインを作成できます。
AWS CodeCommit は、独自のソース管理システムを管理することなく、Git リポジトリをプライベートに保存および管理できるバージョン管理サービスです。
AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化して設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化する CI/CD サービスです。
「AWS コマンドラインインターフェイス (AWS CLI)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
その他のツール
cfn_nag
は、潜在的なセキュリティ問題を特定するために CloudFormation テンプレート内のパターンを検索するオープンソースツールです。 git-remote-codecommit は、Git を拡張して CodeCommit リポジトリからコードをプッシュおよびプルするためのユーティリティです。
Node.js
は、スケーラブルなネットワークアプリケーションを構築するために設計されたイベント駆動型の JavaScript ランタイム環境です。
コード
このパターンのコードは、 GitHub CI/CD プラクティスリポジトリ CodePipeline を持つ AWS
ベストプラクティス
AWS Identity and Access Management (IAM) ポリシーなどのリソースを確認して、組織のベストプラクティスに沿っていることを確認します。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
macOS または Linux にツールをインストールします。 | macOS または Linux を使用している場合は、任意のターミナルで次のコマンドを実行するか、Homebrew for Linux
| DevOps エンジニア |
AWS Cloud9 を使用してツールをインストールします。 | AWS Cloud9
注: AWS Cloud9 には Node.js と npm がインストールされている必要があります。インストールまたはバージョンを確認するには、次のコマンドを実行します。
| DevOps エンジニア |
AWS CLI をセットアップします。 | AWS CLI を設定するには、お使いのオペレーティングシステムの手順に従ってください。 | DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
コードをダウンロードまたはクローンします。 | このパターンで使用されるコードを取得するには、以下のいずれかを実行します。
クローニングしたリポジトリから
後で、新しく作成された AWS CodeCommit リポジトリをリモートオリジンとして使用します。 | DevOps エンジニア |
AWS アカウントに接続します。 | 一時的なセキュリティトークンまたはランディングゾーン認証を使用して接続できます。正しいアカウントと AWS リージョンを使用していることを確認するには、以下のコマンドを実行します。
| DevOps エンジニア |
環境を起動します。 | AWS CDK 環境を起動するには、以下のコマンドを実行します。
環境を正常に起動すると、次の出力が表示されるはずです。
AWS CDK 起動の詳細については、AWS CDK のドキュメントを参照してください。 | DevOps エンジニア |
テンプレートを合成します。 | AWS CDK アプリケーションを合成するには、
次のような出力が表示されます。
| DevOps エンジニア |
CodePipeline スタックをデプロイします。 | テンプレートをブートストラップして合成したので CloudFormation 、デプロイできます。デプロイでは、 CodePipeline パイプラインと CodeCommit リポジトリが作成されます。これはパイプラインのソースとトリガーになります。
コマンドを実行すると、 CodePipeline スタックと出力情報が正常にデプロイされたことがわかります。
| DevOps エンジニア |
リモート CodeCommit リポジトリとブランチを設定します。 | デプロイが成功 CodePipeline すると、 はパイプラインの最初の実行を開始します。これは AWS CodePipeline コンソール
このエラーを修正するには、リモートオリジンを
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
変更をコミットしてパイプラインを有効にします。 | 初期デプロイメントが成功すると、
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
Makefile を使用して開発プロセスを実行します。 |
| アプリ開発者、 DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CDK アプリケーションリソースを削除します。 | AWS CDK アプリをクリーンアップするには、次のコマンドを実行します。
起動中に作成された Amazon Simple Storage Service (Amazon S3) バケットは、自動的に削除されないことに注意してください。削除を許可する保持ポリシーが必要か、AWS アカウントで手動で削除する必要があります。 | DevOps エンジニア |
トラブルシューティング
問題 | ソリューション |
---|---|
テンプレートが期待どおりに動作しません。 | 何か問題が発生し、テンプレートが機能しない場合は、次があることを確認してください。
|