翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
CI/CD パイプラインを使用して Amazon EKS へ Java アプリケーションを自動的にビルドし、デプロイする
MAHESH RAGHUNANDANAN、Jomcy Pappachen、James Radtke (Amazon Web Services)
概要
このパターンでは、推奨される DevSecOps プラクティスを使用して Java アプリケーションを自動的にビルドし、 AWS クラウド上の Amazon Elastic Kubernetes Service (Amazon EKS) クラスターにデプロイする継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインを作成する方法を説明します。このパターンでは、Spring Boot Java フレームワークで開発され、Apache Maven を使用するグリーティングアプリケーションを使用しています。
このパターンのアプローチを使用して Java アプリケーションのコードをビルドし、アプリケーションのアーティファクトを Docker イメージとしてパッケージ化し、イメージをセキュリティスキャンし、そのイメージをワークロードコンテナとして Amazon EKS にアップロードできます。このパターンのアプローチは、緊密に結合されたモノリシックアーキテクチャからマイクロサービスアーキテクチャに移行する場合に便利です。このアプローチは、Java アプリケーションのライフサイクル全体を監視および管理する上でも役立ち、より高いレベルの自動化が可能になり、エラーまたはバグを回避できます。
前提条件と制限事項
前提条件
アクティブ AWS アカウント。
AWS Command Line Interface (AWS CLI) バージョン 2、インストールおよび設定済み。詳細については、 AWS CLI ドキュメントの「 の最新バージョンのインストールまたは更新 AWS CLI」を参照してください。
AWS CLI バージョン 2 は、Amazon EKS クラスターを作成するのと同じ AWS Identity and Access Management (IAM)
aws-authロールで設定する必要があります。これは、そのロールのみが に他の IAM ロールを追加する権限を持っているためですConfigMap。設定の詳細と手順については AWS CLI、 AWS CLI ドキュメントの「設定の構成」を参照してください。へのフルアクセスを持つ IAM ロールとアクセス許可 AWS CloudFormation。詳細については、 CloudFormation ドキュメントの「IAM によるアクセスの制御」を参照してください。
EKS クラスター内のワーカーノードの IAM ロール名と IAM ロールの Amazon リソースネーム (ARN) の詳細を含む既存の Amazon EKS クラスター。
Amazon EKS クラスターにインストールおよび設定済みの Kubernetes クラスターオートスケーラー。詳細については、Amazon EKS ドキュメントの「Karpenter と Cluster Autoscaler を使用したクラスターコンピューティングのスケーリング」を参照してください。
GitHub リポジトリのコードへのアクセス。
重要
AWS Security Hub CSPM は、このパターンのコードに含まれる CloudFormation テンプレートの一部として有効になります。デフォルトでは、Security Hub CSPM を有効にすると、30 日間の無料トライアルが付属しています。トライアル後、この AWS のサービスに関連するコストが発生します。料金の詳細については、「AWS Security Hub CSPM の料金
製品バージョン
Helm バージョン 3.4.2 以降
Apache Maven バージョン 3.6.3 以降
BridgeCrew Checkov バージョン 2.2 以降
Aqua Security Trivy バージョン 0.37 以降
アーキテクチャ
テクノロジースタック
AWS CodeBuild
AWS CodeCommit
Amazon CodeGuru
AWS CodePipeline
Amazon Elastic Container Registry (Amazon ECR)
Amazon EKS
Amazon EventBridge
AWS Security Hub CSPM
Amazon Simple Notification Service (Amazon SNS)
ターゲットアーキテクチャ

この図表は、次のワークフローを示しています:
開発者は CodeCommit リポジトリのベースブランチにある Java アプリケーションコードを更新し、プルリクエスト (PR) を作成します。
PR が送信されるとすぐに、Amazon CodeGuru Reviewer はコードを自動的にレビューし、Java のベストプラクティスに基づいて分析し、開発者に推奨事項を提示します。
PR がベースブランチにマージされると、Amazon EventBridge イベントが作成されます。
EventBridge イベントは CodePipeline パイプラインを起動し、開始されます。
CodePipeline は CodeSecurity スキャンステージ (継続的セキュリティ) を実行します。
AWS CodeBuild は、Dockerfile および Kubernetes デプロイ Helm ファイルが Checkov を使用してスキャンされ、アプリケーションのソースコードが増分コード変更に基づいてスキャンされるセキュリティスキャンプロセスを開始します。アプリケーションのソースコードスキャンは、CodeGuru Reviewer コマンドラインインターフェイス (CLI) ラッパー
によって実行されます。 注記
2025 年 11 月 7 日現在、Amazon CodeGuru Reviewer で新しいリポジトリの関連付けを作成することはできません。CodeGuru Reviewer と同様の機能を持つサービスの詳細については、CodeGuru Reviewer ドキュメントの「Amazon CodeGuru Reviewer の可用性の変更」を参照してください。 CodeGuru
セキュリティスキャンステージが成功すると、ビルドステージ (継続的インテグレーション) が開始されます。
ビルド段階では、CodeBuild はアーティファクトをビルドし、アーティファクトを Docker イメージにパッケージ化し、Aqua Security Trivy を使用してセキュリティの脆弱性に対するイメージをスキャンし、イメージを Amazon ECR に保存します。
ステップ 8 で検出された脆弱性は、開発者またはエンジニアによる詳細な分析のために Security Hub CSPM にアップロードされます。Security Hub CSPM は、脆弱性を修復するための概要と推奨事項を提供します。
CodePipeline パイプライン内の一連のフェーズの E メール通知は Amazon SNS で送信されます。
継続的インテグレーションフェーズが完了すると、CodePipeline は Deploy ステージ (継続的デリバリー) に入ります。
Docker イメージは、Helm チャートを使用してコンテナワークロード (ポッド) として Amazon EKS にデプロイされます。
アプリケーションポッドは、アプリケーションのプロファイリングデータ (CPU、ヒープ使用量、レイテンシー) を CodeGuru Profiler に送信する Amazon CodeGuru Profiler エージェントで構成されます。これで、開発者はアプリケーションの動作を理解し易くなります。
ツール
AWS のサービス
CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および リージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。
AWS CodeBuild は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。
AWS CodeCommit は、独自のソースコントロールシステムを管理することなく、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。
Amazon CodeGuru Profiler は、ライブアプリケーションからランタイムパフォーマンスデータを収集し、アプリケーションのパフォーマンスを微調整する上で役立つ推奨事項を提供します。
AWS CodePipeline は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
Amazon Elastic Container Registry (Amazon ECR) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
Amazon Elastic Kubernetes Service (Amazon EKS) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
Amazon EventBridge は、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなど、さまざまなソースからのリアルタイムデータにアプリケーションを接続するのに役立つサーバーレスイベントバスサービスです AWS アカウント。
AWS Identity and Access Management (IAM) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
AWS Security Hub CSPM は、 のセキュリティ状態の包括的なビューを提供します AWS。また、セキュリティ業界標準とベストプラクティスに照らして AWS 環境を確認するのにも役立ちます。
「Amazon Simple Notification Service (Amazon SNS)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。
Amazon Simple Storage Service (Amazon S3) は、任意のデータ量を保存、保護、取得する際に役立つクラウドベースのオブジェクトストレージサービスです。
その他のサービス
Helm
は Kubernetes 用のオープンソースのパッケージマネージャーです。 Apache Maven
は、ソフトウェアプロジェクトを管理する包括ツールです。 BridgeCrew Checkov
は、Infrastructure as Code (IaC)ファイルをスキャンして、セキュリティまたはコンプライアンスの問題につながる可能性のある設定ミスを検出する静的コード分析ツールです。 Aqua Security Trivy
は、設定の問題に加えて、コンテナイメージ、ファイルシステム、Git リポジトリの脆弱性のための包括的スキャナーです。
コード
このパターンのコードは、GitHub 内の「aws-codepipeline-devsecops-amazoneks
ベストプラクティス
このパターンは、IAM セキュリティのベストプラクティスに従って、ソリューションのすべてのフェーズで IAM エンティティに最小特権の原則を適用します。追加ツール AWS のサービス またはサードパーティーツールを使用してソリューションを拡張する場合は、IAM ドキュメントの最小特権のアクセス許可の適用に関するセクションを確認することをお勧めします。
Java アプリケーションが複数ある場合は、各アプリケーションに個別の CI/CD パイプラインを作成することをお勧めします。
モノリスアプリケーションがある場合は、アプリケーションを可能な場合マイクロサービスに分割することをお勧めします。マイクロサービスは柔軟性が高く、アプリケーションをコンテナとして簡単にデプロイでき、アプリケーションのビルドとデプロイ全体をよりよく把握できます。
エピック
| タスク | 説明 | 必要なスキル |
|---|---|---|
GitHub リポジトリのクローン作成 | リポジトリのクローンを作成するには、次の コマンドを実行します。
| アプリ開発者、DevOps エンジニア |
S3 バケットを作成し、コードをアップロードします。 |
| AWS DevOps、クラウド管理者、DevOps エンジニア |
CloudFormation スタックを作成します。 |
| AWS DevOps、DevOps エンジニア |
CloudFormation スタックデプロイを検証します。 |
| AWS DevOps、DevOps エンジニア |
S3 バケットを削除します。 | 以前に作成した S3 バケットを空にして削除します。詳細については、Amazon EFS ユーザーガイドの「バケットの削除」を参照してください。 | AWS DevOps、DevOps エンジニア |
| タスク | 説明 | 必要なスキル |
|---|---|---|
Java アプリケーションの Helm チャートを設定します。 |
| DevOps エンジニア |
Helm チャートの構文エラーを検証します。 |
| DevOps エンジニア |
| タスク | 説明 | 必要なスキル |
|---|---|---|
CI/CD パイプラインを作成します。 |
| AWS DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
Aqua Security の統合をオンにします。 | このステップは、Trivy によって報告された Docker イメージの脆弱性の検出結果を Security Hub CSPM にアップロードするために必要です。 CloudFormation は Security Hub CSPM 統合をサポートしていないため、このプロセスは手動で行う必要があります。
| AWS 管理者、DevOps エンジニア |
| タスク | 説明 | 必要なスキル |
|---|---|---|
CodeBuild が Amazon EKS クラスターで Helm または kubectl コマンドを実行できるようにします。 | CodeBuild が Amazon EKS クラスターで Helm または 重要次の手順は、CodePipeline のデプロイ承認段階の前に完了する必要があります。
| DevOps |
| タスク | 説明 | 必要なスキル |
|---|---|---|
CI/CD パイプラインが自動的に開始されることを確認します。 |
CodePipeline を使用してパイプラインを開始する方法の詳細については、CodePipeline ドキュメントの「Start a pipeline in CodePipeline」、「Start a pipeline manually」、および「Start a pipeline on a schedule」を参照してください。 | DevOps |
デプロイを承認します。 |
| DevOps |
アプリケーションプロファイリングを検証します。 | デプロイが完了し、アプリケーションポッドが Amazon EKS にデプロイされると、アプリケーションに設定されている Amazon CodeGuru Profiler エージェントは、アプリケーションのプロファイリングデータ (CPU、ヒープサマリー、レイテンシー、ボトルネック) を CodeGuru Profiler に送信します。 アプリケーションの初期デプロイでは、CodeGuru Profiler はプロファイリングデータの可視化に約 15 分かかります。 | AWS DevOps |
関連リソース
追加情報
CodeGuru Profiler は、機能の観点から AWS X-Ray サービスと混同しないでください。CodeGuru Profiler は、ボトルネックまたはセキュリティ問題の原因となる可能性がある最もコストのかかるコード行を特定し、潜在的なリスクになる前に修正するために使用することをお勧めします。X-Ray サービスは、アプリケーションのパフォーマンスをモニタリングするものです。
このパターンでは、イベントルールはデフォルトのイベントバスに関連付けられます。必要に応じて、カスタムイベントバスを使用するようにパターンを拡張できます。
このパターンでは、CodeGuru Reviewer をアプリケーションコードの静的アプリケーションセキュリティテスト (SAST) ツールとして使用します。このパイプラインは、SonarQube または Checkmarx などの他のツールにも使用できます。これらのツールのいずれかのスキャンセットアップ手順を
buildspec/buildspec_secscan.yamlに追加して、CodeGuru スキャン手順を置き換えることができます。注記
2025 年 11 月 7 日現在、Amazon CodeGuru Reviewer で新しいリポジトリの関連付けを作成することはできません。CodeGuru Reviewer と同様の機能を持つサービスの詳細については、CodeGuru Reviewer ドキュメントの「Amazon CodeGuru Reviewer の可用性の変更」を参照してください。 CodeGuru