翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CDK と を使用して Amazon ECS Anywhere のハイブリッドワークロード用の CI/CD パイプラインをセットアップする GitLab
作成者: Dr. Rahul Sharad Gaikwad (AWS)
概要
注意: AWS CodeCommit は、新規顧客には利用できなくなりました。AWS CodeCommit の既存のお客様は、通常どおりサービスを引き続き使用できます。詳細はこちら
Amazon ECS Anywhere は、Amazon Elastic Container Service (Amazon ) の拡張機能ですECS。オンプレミスサーバーや仮想マシン (VM) などの外部インスタンスを Amazon ECSクラスターに登録するためのサポートを提供します。 機能は、コストを削減し、複雑なローカルコンテナのオーケストレーションとオペレーションを軽減するのに役立ちます。ECS Anywhere を使用して、オンプレミス環境とクラウド環境の両方でコンテナアプリケーションをデプロイして実行できます。これにより、チームが複数のドメインやスキルセットを習得したり、複雑なソフトウェアを独自に管理したりする必要がなくなります。
このパターンは、 step-by-stepAmazon Web Services (AWS) Cloud Development KitAWS () CDKスタックを使用して Amazon ECS Anywhere インスタンスで Amazon ECSクラスターをプロビジョニングするアプローチを示しています。次に、 AWS CodePipeline を使用して、継続的インテグレーションと継続的デプロイ (CI/CD) パイプラインを設定します。次に、 GitLab コードリポジトリを にレプリケートAWS CodeCommit し、コンテナ化されたアプリケーションを Amazon ECSクラスターにデプロイします。
このパターンは、オンプレミスインフラストラクチャを使用してコンテナアプリケーションを実行し、 GitLab を使用してアプリケーションコードベースを管理するユーザーを支援するように設計されています。これらのワークロードは、既存のオンプレミスインフラストラクチャを妨げることなく、AWSクラウドサービスを使用して管理できます。
前提条件と制限
前提条件
アクティブ AWS アカウント。
オンプレミスインフラストラクチャ上で実行されるコンテナアプリケーション。
アプリケーションコードベースを管理する GitLab リポジトリ。詳細については、「リポジトリ ()
」を参照してくださいGitLab。 AWS コマンドラインインターフェイス (AWSCLI)、インストールおよび設定済み。詳細については、「 の最新バージョンのインストールまたは更新AWSCLI」(AWS CLIドキュメント) を参照してください。
AWS CDK ツールキット。グローバルにインストールおよび設定されています。詳細については、「Install the AWS CDK (AWS CDKドキュメント)」を参照してください。
npm。 AWSCDKにインストールされ、設定されています TypeScript。詳細については、「Node.js と npm のダウンロードとインストール
」 (npm ドキュメント) を参照してください。
機能制限
制限と考慮事項については、Amazon ECSドキュメントの「外部インスタンス (Amazon ECS Anywhere)」を参照してください。
製品バージョン
AWS CDK Toolkit バージョン 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 システムマネージャー
GitLab リポジトリ
ターゲット アーキテクチャ

この図は、このパターンで説明されている 2 つの主要なワークフロー、Amazon ECSクラスターのプロビジョニングとCI/CD pipeline that sets up and deploys the CI/CDパイプラインの設定を次のように表しています。
Amazon ECSクラスターのプロビジョニング
最初のAWSCDKスタックをデプロイすると、 に CloudFormation スタックが作成されますAWS。
この CloudFormation スタックは、Amazon ECSクラスターと関連AWSリソースをプロビジョニングします。
Amazon ECSクラスターに外部インスタンスを登録するには、VM に AWS Systems Manager Agent (SSM エージェント) をインストールし、VM を AWS Systems Manager マネージドインスタンスとして登録する必要があります。
また、Amazon ECSクラスターに外部インスタンスとして登録するには、Amazon ECSコンテナエージェントと Docker を VM にインストールする必要があります。
外部インスタンスが Amazon ECSクラスターに登録および設定されると、外部インスタンスとして登録されている VM で複数のコンテナを実行できます。
Amazon ECSクラスターはアクティブで、コンテナを介してアプリケーションワークロードを実行できます。Amazon ECS Anywhere コンテナインスタンスはオンプレミス環境で実行されますが、クラウド内の Amazon ECSクラスターに関連付けられています。
CI/CD パイプラインのセットアップとデプロイ
2 番目のAWSCDKスタックをデプロイすると、 に別の CloudFormation スタックが作成されますAWS。
この CloudFormation スタックは、 CodePipeline および関連AWSリソースにパイプラインをプロビジョニングします。
アプリケーションコードの変更をオンプレミス GitLab リポジトリにプッシュしてマージします。
GitLab リポジトリは自動的に CodeCommit リポジトリにレプリケートされます。
CodeCommit リポジトリの更新が自動的に開始されます CodePipeline。
CodePipeline は からコードをコピー CodeCommit し、デプロイ可能なアプリケーションビルドを作成します CodeBuild。
CodePipeline はビルド CodeBuild 環境の Docker イメージを作成し、Amazon ECR リポジトリにプッシュします。
CodePipeline は、Amazon ECR リポジトリからコンテナイメージをプルする CodeDeploy アクションを開始します。
CodePipeline はコンテナイメージを Amazon ECSクラスターにデプロイします。
自動化とスケール
このパターンでは、 をコードとしてのインフラストラクチャ (IaC) ツールAWSCDKとして使用して、このアーキテクチャを設定およびデプロイします。 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) は、クラスター上のコンテナの実行、停止、管理に役立つ、高速でスケーラブルなコンテナ管理サービスです。このパターンでは、Amazon ECS Anywhere も使用しています。Amazon Anywhere は、オンプレミスサーバーまたは VM を Amazon ECSクラスターに登録するためのサポートを提供します。
その他のツール
コードリポジトリ
このパターンのコードは、 GitHub AWSリポジトリを使用した Amazon ECS Anywhere の CI/CD パイプラインCDK
ベストプラクティス
このパターンをデプロイする場合は、以下のベストプラクティスを考慮してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CDK バージョンを確認します。 | 次のコマンドを入力して、AWSCDKToolkit のバージョンを確認します。
このパターンには、バージョン 2.27.0 以降が必要です。以前のバージョンがある場合は、AWSCDKドキュメントの指示に従って更新します。 | DevOps エンジニア |
npm バージョンを検証します。 | 次のコマンドを実行して、npm のバージョンを検証します。
このパターンには、バージョン 7.20.3 以降が必要です。以前のバージョンを使用している場合は、「npm ドキュメント | DevOps エンジニア |
AWS 認証情報を設定します。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CDK コードリポジトリのクローンを作成します。 |
| DevOps エンジニア |
環境を起動します。 | 次のコマンドを入力して、使用するアカウントとAWSリージョンに CloudFormation テンプレートをデプロイします。
詳細については、 AWSCDKドキュメントの「ブートストラップ」を参照してください。 | DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
パッケージの依存関係をインストールし、 TypeScript ファイルをコンパイルします。 | パッケージの依存関係をインストールし、次のコマンドを入力して TypeScript ファイルをコンパイルします。
これらのコマンドは、すべてのパッケージをサンプルリポジトリからインストールします。詳細については、npm ドキュメントの「npm ci | DevOps エンジニア |
プロジェクトをビルドします。 | プロジェクトコードをビルドするには、以下のコマンドを入力します。
プロジェクトの構築とデプロイの詳細については、 AWSCDKドキュメントの「最初のAWSCDKアプリ」を参照してください。 | 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 エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
CodeCommit リポジトリにブランチを作成します。 | CodeCommit リポジトリの最初のコミットを作成して、リポジトリ
| DevOps エンジニア |
リポジトリのミラーリングを設定します。 | 外部ソースとの間で GitLab リポジトリをミラーリングできます。ソースとして使用するリポジトリを選択できます。ブランチ、タグ、コミットは自動的に同期されます。アプリケーションをホストする GitLab リポジトリと CodeCommit リポジトリの間にプッシュミラーを設定します。手順については、「 から GitLab へのプッシュミラーのセットアップ CodeCommit 注記デフォルトでは、ミラーリングによってリポジトリが自動的に同期されます。リポジトリを手動で更新する場合は、「ミラーの更新 | DevOps エンジニア |
CI/CD パイプラインスタックをデプロイする | 次のコマンドを実行して、
| DevOps エンジニア |
CI/CD パイプラインをテストします。 |
| DevOps エンジニア |
タスク | 説明 | 必要なスキル |
---|---|---|
リソースをクリーンアップして削除します。 | このパターンを実行したら、作成したリソースを削除 proof-of-conceptする必要があります。クリーンアップするには、次のコマンドを実行します。
| DevOps エンジニア |
トラブルシューティング
問題 | ソリューション |
---|---|
パッケージ依存関係のインストール中にパッケージが見つからない場合のエラー。 | 次のコマンドのいずれかを実行して、見つからないパッケージを解析します。
or
|
VM 上で
|
|
Amazon ECSヘルスチェックは を返し
| 次のコマンドを入力して、Vagrant VM で Amazon ECS エージェントを再起動します。
|
関連リソース
Amazon ECS Anywhere デモ
(ビデオ) Amazon ECS Anywhere ワークショップのサンプル
(GitHub) リポジトリミラーリング
(GitLab ドキュメント)