翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS CDK と を使用して Amazon ECS Anywhere のハイブリッドワークロードの CI/CD パイプラインをセットアップする GitLab
作成者: Dr. Rahul Sharad Gaikwad (AWS)
環境:PoC またはパイロット | テクノロジー: ハイブリッドクラウド、コンテナとマイクロサービス、インフラストラクチャ、 DevOps | |
ワークロード: オープンソース | AWS サービス: AWS CDK、AWS CodePipeline、Amazon ECS、AWSSystems Manager、 AWS CodeCommit |
[概要]
注意: 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 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」 ( CLICLIドキュメント) を参照してください。AWS
AWS CDK ツールキットは、グローバルにインストールおよび設定されています。詳細については、AWS( ドキュメント) のインストールCDKを参照してください。AWS CDK
npm、 AWSCDKにインストールされ、設定されています TypeScript。詳細については、「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 System Manager
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 エージェント (SSM エージェント) をインストールし、VM を AWS Systems Manager マネージドインスタンスとして登録する必要があります。
また、Amazon ECSコンテナエージェントと Docker を VM にインストールして、Amazon ECSクラスターに外部インスタンスとして登録する必要があります。
外部インスタンスが 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クラスターにデプロイします。
自動化とスケール
このパターンでは、 をInfrastructure as Code (IaC ) ツールAWSCDKとして使用して、このアーキテクチャを設定およびデプロイします。AWS CDK は、AWSリソースをオーケストレーションし、Amazon ECS Anywhere と CI/CD パイプラインをセットアップするのに役立ちます。
ツール
AWS サービス
AWS Cloud Development Kit (AWS CDK) は、コードで AWS Cloud インフラストラクチャを定義およびプロビジョニングするのに役立つソフトウェア開発フレームワークです。
AWS CodeCommit は、独自のソース制御システムを管理することなく、Git リポジトリをプライベートに保存および管理するためのバージョン管理サービスです。
AWS CodePipeline は、ソフトウェアリリースのさまざまなステージを迅速にモデル化して設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
AWS コマンドラインインターフェイス (AWS CLI) は、コマンドラインシェル内のコマンドを介してAWSサービスとやり取りするのに役立つオープンソースツールです。
Amazon Elastic Container Registry (Amazon ECR) は、安全でスケーラブル、信頼性の高いマネージドコンテナイメージレジストリサービスです。
Amazon Elastic Container Service (Amazon ECS) は、クラスター上のコンテナの実行、停止、管理に役立つ、高速でスケーラブルなコンテナ管理サービスです。このパターンでは、Amazon Anywhere も使用されます。Amazon ECS Anywhere は、オンプレミスサーバーまたは VM を Amazon ECSクラスターに登録するためのサポートを提供します。
その他のツール
コードリポジトリ
このパターンのコードは、 GitHub AWSリポジトリを使用して Amazon ECS Anywhere の CI/CD パイプラインCDK
ベストプラクティス
このパターンをデプロイする場合は、以下のベストプラクティスを考慮してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
AWS CDK バージョンを確認します。 | 次のコマンドを入力して、 AWS CDK Toolkit のバージョンを確認します。
このパターンには、バージョン 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 エンジニア |
トラブルシューティング
問題 | ソリューション |
---|---|
パッケージ依存関係のインストール中にパッケージが見つからない場合のエラー。 | 次のコマンドのいずれかを実行して、見つからないパッケージを解析します。
または
|
VM 上で
|
|
Amazon ECSヘルスチェックは を返し
| 次のコマンドを入力して、Vagrant VM で Amazon ECS エージェントを再起動します。
|