翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Azure DevOps パイプラインからプライベート Amazon EKS クラスターにワークロードをデプロイする
Mahendra Revanasiddappa、Amazon Web Services
概要
このパターンは、Azure DevOps パイプラインからプライベート Amazon Elastic Kubernetes Service (Amazon EKS) クラスターへの継続的インテグレーションと継続的デリバリー (CI/CD) を実装する方法を示しています。Amazon EKS クラスターのプライベート API サーバーエンドポイントに移行することで、セキュリティ体制を強化している組織が直面する重大な課題に対処します。
パブリックエンドポイントは、Kubernetes API サーバーをインターネットに直接公開し、悪意のある攻撃者がターゲットにする可能性のあるより大きな攻撃領域を作成します。プライベートエンドポイントに切り替えると、クラスターのコントロールプレーンへのアクセスは、顧客の Virtual Private Cloud (VPC) 内に限定されます。
Amazon EKS クラスターをプライベート API エンドポイントに移行するとセキュリティが大幅に強化されますが、Azure DevOps などの外部 CI/CD プラットフォームの接続の課題が生じます。プライベートエンドポイントには、クラスターの VPC またはピアネットワーク内からのみアクセスできます。したがって、 AWS プライベートネットワーク外で動作する標準の Microsoft がホストする Azure DevOps エージェントは、Kubernetes API サーバーに直接到達できません。これにより、クラスターへの接続を確立できないため、これらのエージェントで実行されている kubectl や Helm などのツールに依存する一般的なデプロイワークフローが中断されます。
この問題を解決するために、このパターンは、プライベート Amazon EKS クラスター内でセルフホスト型の Azure DevOps エージェントを使用して効率的なアプローチを示しています。このソリューションは、セキュリティ要件を維持しながら、優れたコスト最適化、運用効率、スケーラビリティを提供します。このアプローチは、特に、パフォーマンスやセキュリティを犠牲にすることなく、マルチクラウド DevOps プロセスを合理化しようとする企業にメリットをもたらします。
前提条件と制限
前提条件
アクティブ AWS アカウント。
AWS Command Line Interface (AWS CLI) バージョン 2.13.17 以降がインストールされています。
kubectl バージョン 1.25.1 以降がインストールされている。
名前空間、シークレット、デプロイを作成するアクセス許可を持つプライベート Amazon EKS クラスターバージョン 1.24 以降が作成されました。
インターネットへのアウトバウンド接続を持つ Amazon EKS クラスター内のワーカーノード。ワーカーノードで実行されている Azure DevOps エージェントを Azure DevOps エージェントプールに接続できるようにします。
GitHub アカウントが作成されました
。 Azure Pipelines と外部またはリモートサービス間の認証された接続であるサービス接続を設定するためのアクセス権を持つ Azure DevOps プロジェクトが作成されます
。 前のポイントで説明した Azure DevOps プロジェクト用にインストールされた AWS Toolkit for Azure DevOps バージョン 1.15 以降。インストール手順については、Visual Studio Marketplace AWS Toolkit for Azure DevOps
の「」を参照してください。
制約事項
一部の AWS のサービス は では使用できません AWS リージョン。リージョンの可用性については、AWS 「リージョン別のサービス
」を参照してください。特定のエンドポイントについては、「サービスエンドポイントとクォータ」を参照して、サービスのリンクを選択します。
アーキテクチャ
このパターンでは、以下が作成されます。
Amazon ECR リポジトリ - Amazon Elastic Container Registry (Amazon ECR) リポジトリは、Azure DevOps エージェントとデプロイされたサンプルアプリを使用して Docker イメージを保存します。
Azure DevOps エージェントプール - Azure DevOps セルフホスト型エージェントプールは、プライベート Amazon EKS クラスターで実行されているエージェントを登録します。
IAM ロール - プライベート Amazon EKS クラスターで実行されているエージェントに必要なアクセスを提供する Azure サービス接続の AWS Identity and Access Management (IAM) ロール。
Azure DevOps サービス接続 - パイプラインジョブがアクセスするために必要なアクセスを提供する IAM ロールを使用する Azure DevOps アカウントのサービス接続 AWS のサービス。
次の図は、セルフホスト型の Azure DevOps エージェントをプライベート Amazon EKS クラスターにデプロイし、サンプルアプリケーションを同じクラスターにデプロイするアーキテクチャを示しています。

この図表は、次のワークフローを示しています:
セルフホスト型の Azure DevOps エージェントを Amazon EKS クラスター内のデプロイとしてデプロイします。
Azure DevOps エージェントは、認証に個人用アクセストークン (PAT) を使用して Azure DevOps アカウントのエージェントプールに接続します。
Azure Pipelines は、GitHub リポジトリのコードを使用してデプロイするパイプラインを設定します。
パイプラインは、パイプライン設定で設定されたエージェントプールからエージェントで実行されます。Azure DevOps エージェントは、Azure DevOps アカウントに常にポーリングすることで、パイプラインのジョブ情報を取得します。
Azure DevOps エージェントは、パイプラインジョブの一部として Docker イメージを構築し、そのイメージを Amazon ECR リポジトリにプッシュします。
Azure DevOps エージェントは、 という名前空間のプライベート Amazon EKS クラスターにサンプルアプリケーションをデプロイします
webapp
。
ツール
ツール
「Amazon Elastic Container Registry (Amazon ECR)」は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
その他のツール
コードリポジトリ
このパターンのコードは、GitHub deploy-kubernetes-resources-to-amazon-eks-using-azure-devops
リポジトリで入手できます。
ベストプラクティス
Amazon EKS については、「Amazon EKS ベストプラクティスガイド」を参照してください。
最小特権の原則に従い、タスクの実行に必要な最小限のアクセス許可を付与します。詳細については、IAM ドキュメントの「最小特権の付与」と「セキュリティのベストプラクティス」を参照してください。
エピック
タスク | 説明 | 必要なスキル |
---|---|---|
Azure DevOps 組織 GUID を検索します。 | Azure DevOps アカウントにサインインし、次の URL を使用して組織 GUID を検索します。URL | AWS DevOps |
で IdP を設定します AWS アカウント。 | Azure サービス接続 AWS アカウント の で ID プロバイダー (IdP) を設定するには、次の手順を実行します。
詳細については、OpenID Connect を使用して Azure DevOps AWS から にフェデレーションする方法 | AWS DevOps |
で IAM ポリシーを作成します AWS アカウント。 | Azure DevOps パイプラインで使用される IAM ロールに必要なアクセス許可を付与する IAM ポリシーを作成するには、次の手順を実行します。
| AWS DevOps |
で IAM ロールを作成します AWS アカウント。 | Azure サービス接続 AWS アカウント の で IAM ロールを設定するには、次の手順を実行します。
ポリシーで、次のプレースホルダーの情報を指定します。
| AWS DevOps |
Azure DevOps アカウントにサービス接続を作成します。 | Azure サービス接続を設定するには、次の手順を実行します。
詳細については、Microsoft ドキュメントの「サービス接続の作成 | AWS DevOps |
Amazon EKS 設定ファイルに IAM ロールを追加します。 | IAM ロールには、Amazon EKS クラスターで必要なオペレーションを実行するために必要なアクセス許可が必要です。パイプラインロールであるため、IAM ロールはクラスター上のほぼすべてのタイプのリソースを管理できる必要があります。したがって、 Kubernetes
を AWS アカウント ID 詳細については、Amazon EKS ドキュメントの「Amazon EKS と IAM の連携方法」を参照してください。 | AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
セルフホスト型エージェントプールを作成します。 | Azure DevOps アカウントでセルフホスト型エージェントプールを設定するには、次の手順を実行します。
詳細については、Microsoft ドキュメントの「エージェントプールの作成と管理 |
タスク | 説明 | 必要なスキル |
---|---|---|
Amazon ECR リポジトリを作成します。 | Azure DevOps エージェントとサンプルアプリケーション (
詳細については、「Amazon ECR ドキュメント」の「Creating an Amazon ECR private repository to store images」を参照してください。 | AWS DevOps |
Dockerfile を作成して Azure DevOps エージェントを構築します。 | Dockerfile を作成して、Azure DevOps エージェントがインストールされている Docker イメージを構築します。次のコンテンツを という名前のファイルに保存します
| AWS DevOps |
Azure DevOps エージェント用のスクリプトを作成します。 |
| AWS DevOps |
Azure DevOps エージェントを使用して Docker イメージを構築します。 | Azure DevOps エージェントをインストールする Docker イメージを作成するには、前に作成した Dockerfile を使用してイメージを構築します。Dockerfile が保存されているのと同じディレクトリで、次のコマンドを実行します。
| AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
Azure 個人用アクセストークンを生成します。 | プライベート Amazon EKS クラスターで実行されているエージェントには、Azure DevOps アカウントで認証できるように個人用アクセストークン (PAT) が必要です。PAT を生成するには、次の手順を実行します。
詳細については、Microsoft ドキュメントの「個人用アクセストークン (PAT) を使用してエージェントを登録する | AWS DevOps |
エージェントデプロイには Kubernetes マニフェストファイルを使用します。 | Azure DevOps エージェントをプライベート Amazon EKS クラスターにデプロイするには、次のマニフェストファイルをコピーし、ファイルを として保存します
| AWS DevOps |
プライベート Amazon EKS クラスターにエージェントをデプロイします。 | Azure Devops エージェントをプライベート Amazon EKS クラスターにデプロイするには、次のコマンドを使用します。
| AWS DevOps |
エージェントが実行されていることを確認します。 | Azure DevOps エージェントが実行されていることを確認するには、次のコマンドを使用します。
予想される出力は次のようになります。
| AWS DevOps |
エージェントが Azure DevOps エージェントプールに登録されていることを確認します。 | エージェントがプライベート Amazon EKS クラスターにデプロイされ、エージェントプール に登録されていることを確認するには
ステータスがオンラインのエージェントが 1 つ表示され、エージェントの名前が azure-pipelines-agent-eks-* で始まるはずです。 | AWS DevOps |
タスク | 説明 | 必要なスキル |
---|---|---|
サンプルアプリケーションリポジトリを GitHub アカウントにフォークします。 | 次の AWS サンプルリポジトリを GitHub アカウントにフォークします。 https://github.com/aws-samples/deploy-kubernetes-resources-to-amazon-eks-using-azure-devops | AWS DevOps |
パイプラインを作成する | Azure DevOps アカウントにパイプラインを作成するには、次の手順を実行します。
| AWS DevOps |
サンプルアプリケーションがデプロイされていることを確認します。 | パイプラインが完了したら、Amazon ECR リポジトリと Amazon EKS クラスターの両方をチェックして、サンプルアプリケーションのデプロイが成功したことを確認します。 Amazon ECR リポジトリのアーティファクトを検証するには、次の手順を実行します。
例えば、 名前空間 のプライベート Amazon EKS クラスターでのデプロイを確認するには
予想される出力は次のようになります。
注: これが最初のパイプライン実行である場合は、サービス接続とエージェントプールを承認する必要がある場合があります。Azure DevOps パイプラインインターフェイスでアクセス許可リクエストを探し、それらを承認して続行します。 | AWS DevOps |
トラブルシューティング
問題 | ソリューション |
---|---|
Amazon ECR リポジトリ名が一致しないとパイプラインが失敗する | サンプルアプリケーションは、Amazon ECR リポジトリ名が の この問題を解決するには、Amazon ECR リポジトリの名前を に変更するか
|
エラー: Kubernetes クラスターに到達できません: サーバーがクライアントに認証情報の提供を要求しました | Azure パイプラインの「Pull and Deploy Helm Chart」ステップでこのエラーが発生した場合、根本原因は通常、Amazon EKS クラスターの で誤った IAM ロール設定が原因で発生します この問題を解決するには、以下を確認してください。
|
関連リソース
AWS ブログ
AWS のサービス ドキュメント
Microsoft ドキュメント