翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CDK と GitLab を使用して、Amazon ECS Anywhere 上のハイブリッドワークロード用に CI/CD パイプラインを設定する
作成者:Dr. Rahul Sharad Gaikwad (AWS)
概要
注意: AWS CodeCommit は、新規のお客様にはご利用いただけません。AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら
Amazon ECS Anywhere は、Amazon Elastic Container Service (Amazon ECS) の拡張機能です。オンプレミスサーバーや仮想マシン (VM) などの外部インスタンスを Amazon ECS クラスターに登録するためのサポートを提供します。この機能は、コストを削減し、ローカルコンテナの複雑なオーケストレーションやオペレーションを軽減します。ECS Anywhere を使用して、オンプレミス環境とクラウド環境の両方でコンテナアプリケーションをデプロイして実行できます。これにより、チームが複数のドメインやスキルセットを習得したり、複雑なソフトウェアを独自に管理したりする必要がなくなります。
このパターンは、Amazon Web Services (AWS) Cloud Development Kit (AWS CDK) スタックを使用して Amazon ECS Anywhere インスタンスで Amazon ECS クラスターをプロビジョニングする段階的なアプローチを説明しています。 次に、AWS CodePipeline を使用して継続的な統合と継続的なデプロイ (CI/CD) パイプラインを設定します。次に、GitLab コードリポジトリを AWS CodeCommit に複製し、コンテナ化されたアプリケーションを Amazon ECS クラスターにデプロイします。
このパターンは、オンプレミスインフラストラクチャを使用してコンテナアプリケーションを実行したり、GitLab を使用してアプリケーションコードベースを管理するユーザーに役立つように設計されています。これらのワークロードは、既存のオンプレミスインフラストラクチャに影響を与えずに、AWS クラウドサービスで管理できます。
前提条件と制限
前提条件
アクティブな AWS アカウント
オンプレミスインフラストラクチャ上で実行されるコンテナアプリケーション。
アプリケーションコードベースを管理する GitLab リポジトリ。 詳細については、「リポジトリ
」 (GitLab) を参照してください。 AWS コマンドラインインターフェイス (AWS CLI) をインストールして設定済み。詳細については、「AWS CLI の最新バージョンをインストールまたはアップデート」 (AWS CLIのドキュメント) を参照してください。
AWS CDK ツールキットがインストール済みおよびグローバルに設定済み 詳細については、「AWS CDK をインストールする」 (AWS CDK ドキュメント) を参照してください。
npm、TypeScript で AWS CDK 用にインストールおよび設定されています。詳細については、「Node.js と npm のダウンロードとインストール
」 (npm ドキュメント) を参照してください。
機能制限
制限と考慮事項については、Amazon ECS ドキュメントの「外部インスタンス (Amazon ECS Anywhere)」を参照してください。
製品バージョン
AWS CDK ツールキットバージョン 2.27.0 以降
npm バージョン 7.20.3 以降
Node.js バージョン 16.6.1 以降
アーキテクチャ
ターゲットテクノロジースタック
AWS CDK
AWS CloudFormation
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Amazon ECS Anywhere
Amazon Elastic Container Registry (Amazon ECR)
AWS Identity and Access Management (IAM)
AWS Systems Manager
GitHub リポジトリ
ターゲット アーキテクチャ

この図は、このパターンで説明されている 2 つの主なワークフロー、つまり Amazon ECS クラスターのプロビジョニングと、CI/CD パイプラインをセットアップしてデプロイする CI/CD パイプラインの設定を以下のように表しています。
Amazon ECS クラスターのプロビジョニング
AWS CDK スタックをデプロイする場合、AWS に CloudFormation スタックが作成されます。
この CloudFormation スタックは Amazon ECS クラスターと関連する AWS リソースをプロビジョニングします。
Amazon ECS クラスターに外部インスタンスを登録するには、仮想マシン (VM) に AWS Systems Manager Agent (SSM Agent) をインストールし、その VM を AWS Systems Manager 管理型のインスタンスとして登録する必要があります。
また、Amazon ECS コンテナエージェントと Docker を VM にインストールして、Amazon ECS クラスターの外部インスタンスとして登録する必要があります。
外部インスタンスを Amazon ECS クラスターに登録して設定すると、外部インスタンスとして登録された VM 上で複数のコンテナを実行できます。
Amazon ECS クラスターはアクティブで、コンテナを介してアプリケーションワークロードを実行できます。 Amazon ECS Anywhere コンテナインスタンスはオンプレミス環境で実行されますが、クラウドの Amazon ECS クラスターに関連付けられています。
CI/CD パイプラインのセットアップとデプロイ
2 つ目の AWS CDK スタックをデプロイする場合、AWS に CloudFormation スタックが作成されます。
この CloudFormation スタックは、CodePipeline および関連のある AWS リソースにパイプラインをプロビジョニングします。
アプリケーションコードの変更をオンプレミスの GitLab リポジトリにプッシュしてマージします。
GitLab リポジトリは CodeCommit リポジトリに自動的に複製されます。
CodeCommit リポジトリを更新すると、CodePipeline が自動的に起動します。
CodePipeline は CodeCommit からコードをコピーし、CodeBuild にデプロイ可能なアプリケーションビルドを作成します。
CodePipeline は CodeBuild ビルド環境の Docker イメージを作成し、Amazon ECR リポジトリにプッシュします。
CodePipeline は、Amazon ECR リポジトリからコンテナイメージをプルする CodeDeploy アクションを開始します。
CodePipeline は Amazon ECS クラスターにコンテナイメージをデプロイします。
自動化とスケール
このパターンでは、AWS CDK をコードとしての Infrastructure as Code (IaC) ツールとして使用して、このアーキテクチャを設定してデプロイします。AWS CDK は、AWS リソースのオーケストレーションと Amazon ECS Anywhere と CI/CD パイプラインのセットアップに役立ちます。
ツール
AWS サービス
AWS Cloud Development Kit (AWS CDK) は、AWS クラウドインフラストラクチャをコードで定義してプロビジョニングするのに役立つソフトウェア開発フレームワークです。
AWS CodeCommit は、独自のソースコントロールシステムを管理しなくても、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。
AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
「AWS コマンドラインインターフェイス (AWS CLI)」は、オープンソースのツールであり、コマンドラインシェルのコマンドを使用して AWS サービスとやり取りすることができます。
Amazon Elastic Container Registry (Amazon ECR) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージのレジストリサービスです。
Amazon Elastic Container Service (Amazon ECS) は、クラスターでコンテナの実行、停止、管理を支援する、高速でスケーラブルなコンテナ管理サービスです。このパターンは、オンプレミスサーバーまたは VM を Amazon ECS クラスターに登録するためのサポートを提供する Amazon ECS Anywhere も使用します。
その他のツール
コードリポジトリ
このパターンのコードは、GitHub 内の「AWS CDK を使用した Amazon ECS Anywhere の CI/CD パイプライン
ベストプラクティス
このパターンをデプロイする場合は、以下のベストプラクティスを考慮してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CDK のバージョンを検証します。 | 次のコマンドを実行して、AWS CDK Toolkit のバージョンを検証します。
このパターンには、バージョン 2.27.0 以降が必要です。以前のバージョンを使用している場合は、「AWS CDK ドキュメント」の指示に従って更新してください。 | DevOps エンジニア |
npm バージョンを検証します。 | 次のコマンドを実行して、npm のバージョンを検証します。
このパターンには、バージョン 7.20.3 以降が必要です。以前のバージョンを使用している場合は、「npm ドキュメント | DevOps エンジニア |
AWS 認証情報を設定します。 | 認証情報を設定するには、
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS SAM コードリポジトリを複製します。 |
| DevOps エンジニア |
環境を起動します。 | 次ののコマンドを実行して、使用したいアカウントと AWS リージョンに AWS CloudFormation テンプレートをデプロイします。
詳細については、AWS CDK ドキュメントの「ブートストラップ」を参照してください。 | DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
パッケージの依存関係をインストールし、TypeScript ファイルをコンパイルします。 | パッケージの依存関係をインストールし、次のコマンドを実行して TypeScript ファイルをコンパイルします。
これらのコマンドは、すべてのパッケージをサンプルリポジトリからインストールします。詳細については、npm ドキュメントの「npm ci | DevOps エンジニア |
プロジェクトをビルドします。 | プロジェクトコードをビルドするには、以下のコマンドを入力します。
プロジェクトの構築とデプロイの詳細については、AWS CDK ドキュメントの「初めての AWS CDK アプリケーション」を参照してください。 | DevOps エンジニア |
Amazon ECS Anywhere 向けインフラストラクチャスタックをデプロイします |
| DevOps エンジニア |
スタックの作成と出力を検証します。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
VM をセットアップします | Vagrantfile が配置されているルートディレクトリから | DevOps エンジニア |
VM を外部インスタンスとして登録します。 |
これにより、VM が Amazon ECS Anywhere の外部インスタンスとして設定され、Amazon ECS クラスターに登録されます。詳細については、Amazon ECS のドキュメントの「クラスターへの外部インスタンスの登録 | DevOps エンジニア |
Amazon ECS Anywhere と外部 VM のステータスを検証してください。 | VM が Amazon ECS コントロールプレーンに接続され、稼働していることを検証するには、以下のコマンドを使用します。
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CodeCommit リポジトリにブランチを作成します。 | 最初のリポジトリのコミットを作成して、CodeCommit リポジトリに
| DevOps エンジニア |
リポジトリのミラーリングを設定します。 | GitLab リポジトリを外部ソースとの間でミラーリングできます。 ソースとして使用するリポジトリを選択できます。ブランチ、タグ、コミットは自動的に同期されます。アプリケーションをホストする GitLab リポジトリと CodeCommit リポジトリの間でプッシュミラーを設定します。手順については、「GitLab から CodeCommit へのプッシュミラーの設定 注記デフォルトでは、ミラーリングはリポジトリを自動的に同期します。リポジトリを手動で更新する場合は、「ミラーの更新 | DevOps エンジニア |
CI/CD パイプラインスタックをデプロイする | 次のコマンドを実行して、
| DevOps エンジニア |
CI/CD パイプラインをテストします。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
リソースをクリーンアップして削除します。 | このパターンが完了したら、作成した概念実証リソースを削除する必要があります。クリーンアップするには、次のコマンドを実行します。
| DevOps エンジニア |
トラブルシューティング
問題 | ソリューション |
---|---|
パッケージ依存関係のインストール中にパッケージが見つからない場合のエラー。 | 次のコマンドのいずれかを実行して、見つからないパッケージを解析します。
or
|
VM 上で
|
|
Amazon ECS ヘルスチェックで
| 次のコマンドを実行して、Vagrant VM の Amazon ECS エージェントを再起動します。
|