

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# CI/CD パイプラインを使用して Amazon EKS へ Java アプリケーションを自動的にビルドし、デプロイする
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline"></a>

*MAHESH RAGHUNANDANAN、Jomcy Pappachen、James Radtke (Amazon Web Services)*

## 概要
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-summary"></a>

このパターンでは、推奨される DevSecOps プラクティスを使用して Java アプリケーションを自動的にビルドし、 AWS クラウド上の Amazon Elastic Kubernetes Service (Amazon EKS) クラスターにデプロイする継続的インテグレーションと継続的デリバリー (CI/CD) パイプラインを作成する方法を説明します。このパターンでは、Spring Boot Java フレームワークで開発され、Apache Maven を使用するグリーティングアプリケーションを使用しています。

このパターンのアプローチを使用して Java アプリケーションのコードをビルドし、アプリケーションのアーティファクトを Docker イメージとしてパッケージ化し、イメージをセキュリティスキャンし、そのイメージをワークロードコンテナとして Amazon EKS にアップロードできます。このパターンのアプローチは、緊密に結合されたモノリシックアーキテクチャからマイクロサービスアーキテクチャに移行する場合に便利です。このアプローチは、Java アプリケーションのライフサイクル全体を監視および管理する上でも役立ち、より高いレベルの自動化が可能になり、エラーまたはバグを回避できます。

## 前提条件と制限事項
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-prereqs"></a>

**前提条件**
+ アクティブ AWS アカウント。
+ AWS Command Line Interface (AWS CLI) バージョン 2、インストールおよび設定済み。詳細については、 AWS CLI ドキュメントの[「 の最新バージョンのインストールまたは更新 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html)」を参照してください。

  AWS CLI バージョン 2 は、Amazon EKS クラスターを作成するのと同じ AWS Identity and Access Management (IAM) `aws-auth` ロールで設定する必要があります。これは、そのロールのみが に他の IAM ロールを追加する権限を持っているためです`ConfigMap`。設定の詳細と手順については AWS CLI、 AWS CLI ドキュメントの[「設定の構成](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html)」を参照してください。
+ へのフルアクセスを持つ IAM ロールとアクセス許可 AWS CloudFormation。詳細については、 CloudFormation ドキュメントの[「IAM によるアクセスの制御](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html)」を参照してください。
+ EKS クラスター内のワーカーノードの IAM ロール名と IAM ロールの Amazon リソースネーム (ARN) の詳細を含む既存の Amazon EKS クラスター。
+ Amazon EKS クラスターにインストールおよび設定済みの Kubernetes クラスターオートスケーラー。詳細については、Amazon EKS ドキュメントの「[Karpenter と Cluster Autoscaler を使用したクラスターコンピューティングのスケーリング](https://docs.aws.amazon.com/eks/latest/userguide/cluster-autoscaler.html)」を参照してください。 
+ GitHub リポジトリのコードへのアクセス。

**重要**  
AWS Security Hub CSPM は、このパターンのコードに含まれる CloudFormation テンプレートの一部として有効になります。デフォルトでは、Security Hub CSPM を有効にすると、30 日間の無料トライアルが付属しています。トライアル後、この AWS のサービスに関連するコストが発生します。料金の詳細については、「[AWS Security Hub CSPM の料金](https://aws.amazon.com/security-hub/pricing/)」を参照してください。

**製品バージョン**
+ Helm バージョン 3.4.2 以降
+ Apache Maven バージョン 3.6.3 以降
+ BridgeCrew Checkov バージョン 2.2 以降
+ Aqua Security Trivy バージョン 0.37 以降

## アーキテクチャ
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-architecture"></a>

**テクノロジースタック**
+ AWS CodeBuild
+ AWS CodeCommit
+ Amazon CodeGuru
+ AWS CodePipeline
+ Amazon Elastic Container Registry (Amazon ECR)
+ Amazon EKS
+ Amazon EventBridge
+ AWS Security Hub CSPM
+ Amazon Simple Notiﬁcation Service (Amazon SNS)

**ターゲットアーキテクチャ**

![Java アプリケーションを Amazon EKS にデプロイするためのワークフロー。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/95a5b5c2-d7fb-41eb-9089-455318c0d585/images/4f5fd8c2-2b6d-4945-aa64-fcf317521711.png)


この図表は、次のワークフローを示しています:

1. 開発者は CodeCommit リポジトリのベースブランチにある Java アプリケーションコードを更新し、プルリクエスト (PR) を作成します。

1. PR が送信されるとすぐに、Amazon CodeGuru Reviewer はコードを自動的にレビューし、Java のベストプラクティスに基づいて分析し、開発者に推奨事項を提示します。

1. PR がベースブランチにマージされると、Amazon EventBridge イベントが作成されます。

1. EventBridge イベントは CodePipeline パイプラインを起動し、開始されます。

1. CodePipeline は CodeSecurity スキャンステージ (継続的セキュリティ) を実行します。

1. AWS CodeBuild は、Dockerfile および Kubernetes デプロイ Helm ファイルが Checkov を使用してスキャンされ、アプリケーションのソースコードが増分コード変更に基づいてスキャンされるセキュリティスキャンプロセスを開始します。アプリケーションのソースコードスキャンは、[CodeGuru Reviewer コマンドラインインターフェイス (CLI) ラッパー](https://github.com/aws/aws-codeguru-cli)によって実行されます。
**注記**  
2025 年 11 月 7 日現在、Amazon CodeGuru Reviewer で新しいリポジトリの関連付けを作成することはできません。CodeGuru Reviewer と同様の機能を持つサービスの詳細については、[CodeGuru Reviewer ドキュメントの「Amazon CodeGuru Reviewer の可用性の変更](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html)」を参照してください。 CodeGuru 

1. セキュリティスキャンステージが成功すると、ビルドステージ (継続的インテグレーション) が開始されます。

1. ビルド段階では、CodeBuild はアーティファクトをビルドし、アーティファクトを Docker イメージにパッケージ化し、Aqua Security Trivy を使用してセキュリティの脆弱性に対するイメージをスキャンし、イメージを Amazon ECR に保存します。

1. ステップ 8 で検出された脆弱性は、開発者またはエンジニアによる詳細な分析のために Security Hub CSPM にアップロードされます。Security Hub CSPM は、脆弱性を修復するための概要と推奨事項を提供します。

1. CodePipeline パイプライン内の一連のフェーズの E メール通知は Amazon SNS で送信されます。

1. 継続的インテグレーションフェーズが完了すると、CodePipeline は Deploy ステージ (継続的デリバリー) に入ります。

1. Docker イメージは、Helm チャートを使用してコンテナワークロード (ポッド) として Amazon EKS にデプロイされます。

1. アプリケーションポッドは、アプリケーションのプロファイリングデータ (CPU、ヒープ使用量、レイテンシー) を CodeGuru Profiler に送信する Amazon CodeGuru Profiler エージェントで構成されます。これで、開発者はアプリケーションの動作を理解し易くなります。

## ツール
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-tools"></a>

**AWS のサービス**
+ [CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html) は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および リージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。
+  [AWS CodeBuild](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html) は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。
+ [AWS CodeCommit](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html) は、独自のソースコントロールシステムを管理することなく、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。
+ [Amazon CodeGuru Profiler](https://docs.aws.amazon.com/codeguru/latest/profiler-ug/what-is-codeguru-profiler.html) は、ライブアプリケーションからランタイムパフォーマンスデータを収集し、アプリケーションのパフォーマンスを微調整する上で役立つ推奨事項を提供します。
+ [AWS CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/welcome.html) は、ソフトウェアリリースのさまざまな段階を迅速にモデル化および設定し、ソフトウェアの変更を継続的にリリースするために必要なステップを自動化するのに役立ちます。
+ [Amazon Elastic Container Registry (Amazon ECR)](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) は、セキュリティ、スケーラビリティ、信頼性を備えたマネージドコンテナイメージレジストリサービスです。
+ [Amazon Elastic Kubernetes Service (Amazon EKS)](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html) を使用すると、独自の Kubernetes コントロールプレーンやノードをインストールまたは維持 AWS することなく、 で Kubernetes を実行できます。
+ [Amazon EventBridge](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html) は、 AWS Lambda 関数、API 送信先を使用する HTTP 呼び出しエンドポイント、その他のイベントバスなど、さまざまなソースからのリアルタイムデータにアプリケーションを接続するのに役立つサーバーレスイベントバスサービスです AWS アカウント。
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) は、誰を認証し、誰に使用する権限を付与するかを制御することで、 AWS リソースへのアクセスを安全に管理するのに役立ちます。
+ [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html) は、 のセキュリティ状態の包括的なビューを提供します AWS。また、セキュリティ業界標準とベストプラクティスに照らして AWS 環境を確認するのにも役立ちます。
+ 「[Amazon Simple Notiﬁcation Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html)」は、ウェブサーバーやメールアドレスなど、パブリッシャーとクライアント間のメッセージの交換を調整および管理するのに役立ちます。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、任意のデータ量を保存、保護、取得する際に役立つクラウドベースのオブジェクトストレージサービスです。

**その他のサービス**
+ [Helm](https://helm.sh/docs/) は Kubernetes 用のオープンソースのパッケージマネージャーです。
+ [Apache Maven](https://maven.apache.org/) は、ソフトウェアプロジェクトを管理する包括ツールです。
+ [BridgeCrew Checkov](https://www.checkov.io/1.Welcome/What%20is%20Checkov.html) は、Infrastructure as Code (IaC)ファイルをスキャンして、セキュリティまたはコンプライアンスの問題につながる可能性のある設定ミスを検出する静的コード分析ツールです。
+ [Aqua Security Trivy](https://github.com/aquasecurity/trivy) は、設定の問題に加えて、コンテナイメージ、ファイルシステム、Git リポジトリの脆弱性のための包括的スキャナーです。

**コード**

このパターンのコードは、GitHub 内の「[aws-codepipeline-devsecops-amazoneks](https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks)」リポジトリで利用できます。

## ベストプラクティス
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-best-practices"></a>
+ このパターンは、[IAM セキュリティのベストプラクティス](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)に従って、ソリューションのすべてのフェーズで IAM エンティティに最小特権の原則を適用します。追加ツール AWS のサービス またはサードパーティーツールを使用してソリューションを拡張する場合は、IAM ドキュメントの[最小特権のアクセス許可の適用](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)に関するセクションを確認することをお勧めします。
+ Java アプリケーションが複数ある場合は、各アプリケーションに個別の CI/CD パイプラインを作成することをお勧めします。
+ モノリスアプリケーションがある場合は、アプリケーションを可能な場合マイクロサービスに分割することをお勧めします。マイクロサービスは柔軟性が高く、アプリケーションをコンテナとして簡単にデプロイでき、アプリケーションのビルドとデプロイ全体をよりよく把握できます。

## エピック
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-epics"></a>

### 環境をセットアップする
<a name="set-up-the-environment"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| GitHub リポジトリのクローン作成 | リポジトリのクローンを作成するには、次の コマンドを実行します。<pre>git clone https://github.com/aws-samples/aws-codepipeline-devsecops-amazoneks</pre> | アプリ開発者、DevOps エンジニア | 
| S3 バケットを作成し、コードをアップロードします。 | 1. にサインインし AWS マネジメントコンソール、[Amazon S3 コンソール](https://console.aws.amazon.com/s3/)を開き、このソリューションをデプロイする予定の AWS リージョン に S3 バケットを作成します。詳細については、Amazon EFS ユーザーガイドの「[バケットの作成](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)」を参照してください。<br />2. S3 バケットに `code`という名前のフォルダを作成します。<br />3. リポジトリのクローンを作成した場所にナビゲートします。.zip 拡張子 (`cicdstack.zip`) でコード全体の圧縮バージョンを作成し、.zip ファイルを検証するには、以下のコマンドを順番に実行します。<pre>cd aws-codepipeline-devsecops-amazoneks<br />python -m zipfile -c cicdstack.zip *<br />python -m zipfile -t cicdstack.zip</pre>`python` コマンドが失敗し、Python が見つからなかったと表示される場合は、代わりに `python3` を使用します。<br />4. S3 バケットで以前に作成したコードフォルダに `cicdstack.zip` ファイルをアップロードします。 | AWS DevOps、クラウド管理者、DevOps エンジニア | 
|  CloudFormation スタックを作成します。 | 1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/)を開き、[**スタックの作成**] を選択します。<br />2. [**Specify Template（テンプレートを指定）**] で、[**Upload a template file（テンプレートファイルをアップロード）**] を選択し、`cf_templates/codecommit_ecr.yaml` ファイルをアップロードしてから、[**Next（次へ）**] を選択します。<br />3. **Specify stack details（スタック詳細を指定）**に、スタック名を入力してから、次の入力パラメータ値を指定します。`CodeCommitRepositoryBranchName`: コードが保存されるブランチ名 (デフォルトは `main`)`CodeCommitRepositoryName`: 作成する CodeCommitrepository の名前`CodeCommitRepositoryS3Bucket`: コードフォルダを作成した S3 バケットの名前`CodeCommitRepositoryS3BucketObjKey`: `code/cicdstack.zip``ECRRepositoryName`: 作成する Amazon ECR リポジトリの名前<br />4. [**Next（次へ）**] を選択し、**スタックの設定オプション**のデフォルト設定を使用してから、[**Next（次へ）**] を選択します。<br />5. **確認**セクションで、テンプレートとスタック詳細を確認してから、[**Create stack（スタックを作成）**] を選択します。その後、CodeCommit リポジトリと Amazon ECR リポジトリなどのスタックが作成されます。<br />6. Java CI/CD パイプラインのセットアップに必要な CodeCommit リポジトリと Amazon ECR リポジトリの名前を書き留めます。 | AWS DevOps、DevOps エンジニア | 
| CloudFormation スタックデプロイを検証します。 | 1. CloudFormation コンソールの**スタック**で、デプロイした CloudFormation スタックのステータスを確認します。スタックのステータスは**作成完了**になっているはずです。<br />2. コンソールで、CloudFormation リポジトリと Amazon ECR リポジトリがプロビジョニングされ、準備が整っていることを確認します。 | AWS DevOps、DevOps エンジニア | 
| S3 バケットを削除します。 | 以前に作成した S3 バケットを空にして削除します。詳細については、Amazon EFS ユーザーガイドの「[バケットの削除](https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-bucket.html)」を参照してください。 | AWS DevOps、DevOps エンジニア | 

### Helm チャートを設定する
<a name="configure-the-helm-charts"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| Java アプリケーションの Helm チャートを設定します。 | 1. GitHub リポジトリのクローンを作成した場所で、フォルダ `helm_charts/aws-proserve-java-greeting` にナビゲートします。このフォルダの `values.dev.yaml`** **ファイルには、Amazon EKS へのコンテナデプロイ用に変更できる Kubernetes リソース設定に関する情報が含まれています。 AWS アカウント ID、および Amazon ECR リポジトリ名を指定して AWS リージョン、Docker リポジトリパラメータを更新します。<pre>image:<br />  repository: <account-id>.dkr.ecr.<region>.amazonaws.com/<app-ecr-repo-name></pre><br />2. Java ポッドのサービスタイプは `LoadBalancer` に設定されます。<pre>service:<br />  type: LoadBalancer<br />  port: 80<br />  targetPort: 8080<br />  path: /hello<br />  initialDelaySeconds: 60<br />  periodSeconds: 30</pre><br />別のサービス (例、`NodePort`) を使用するには、このパラメータを変更できます。詳細については、[Kubernetes ドキュメント](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types)を参照してください。<br />3. `autoscaling` パラメータを `enabled: true` に変更することで、「[Kubernetes 水平ポッドオートスケーラー](https://docs.aws.amazon.com/eks/latest/userguide/horizontal-pod-autoscaler.html)」を有効化できます。<pre>autoscaling:<br />  enabled: true<br />  minReplicas: 1<br />  maxReplicas: 100<br />  targetCPUUtilizationPercentage: 80<br />  # targetMemoryUtilizationPercentage: 80</pre><br />4. `<ENV>` が開発、本番環境、UAT、または QA 環境である、`values.<ENV>.yaml` ファイル内の値を変更することで、Kubernetes ワークロードのさまざまな機能を有効にできます。 | DevOps エンジニア | 
| Helm チャートの構文エラーを検証します。 | 1. ターミナルから、次のコマンドを実行して、ローカルワークステーションに Helm v3 がインストールされていることを確認します。<pre>helm --version</pre><br />Helm v3 がインストールされていない場合は、[インストールします](https://helm.sh/docs/intro/install/)。<br />2. ターミナルで、Helm チャートディレクトリ (`helm_charts/aws-proserve-java-greeting`) にナビゲートし、次のコマンドを実行します。<pre>helm lint . -f values.dev.yaml</pre><br />これで、Helm チャートの構文エラーがチェックされます。 | DevOps エンジニア | 

### Java CI/CD パイプラインを設定する
<a name="set-up-the-java-ci-cd-pipeline"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CI/CD パイプラインを作成します。 | 1. [CloudFormation コンソール](https://console.aws.amazon.com/cloudformation/)を開き、[**スタックの作成**] を選択します。<br />2. **テンプレートを指定**で、[**Upload a template file（テンプレートファイルをアップロード）**] を選択し、`cf_templates/build_deployment.yaml` テンプレートをアップロードしてから、[**Next（次へ）**] を選択します。<br />3. **スタック詳細を指定**で、**スタック名**を指定し、入力パラメータに次の値を指定します。`CodeBranchName`: コードが存在する CodeCommit リポジトリのブランチ名`EKSClusterName`: EKS クラスターの名前 (`EKSCluster` ID ではない)`EKSCodeBuildAppName`: アプリ Helm チャートの名前 (`aws-proserve-java-greeting`)`EKSWorkerNodeRoleARN`: Amazon EKS ワーカーノードに割り当てられた IAM ロールの ARN`EKSWorkerNodeRoleName`: Amazon EKS ワーカーノードに割り当てられた IAM ロールの名前`EcrDockerRepository`: コードの Docker イメージが保存される Amazon ECR リポジトリの名前`EmailRecipient`: ビルド通知を送信する E メールアドレス`EnvType`: 環境 (開発、テスト、本番環境など)`SourceRepoName`: コードが存在する CodeCommit リポジトリの名<br />4. [**次へ**] を選択します。**スタックオプションの設定**のデフォルト設定を使用してから、[**Next(次へ)**] を選択します。<br />5. **レビュー**セクションで、CloudFormation テンプレートとスタック詳細を確認してから、**[次へ]** を選択します。<br />6. [**Create stack（スタックの作成）**] を選択します。 <br />7. CloudFormation スタックのデプロイ中に、パラメータで指定したメールアドレスの所有者は SNS トピックへのサブスクライブを求めるメッセージを受け取ります。Amazon SNS をサブスクライブするには、所有者はメッセージ内のリンクを選択する必要があります。<br />8. スタックが作成されたら、スタックの[**Outputs（出力）**] タブを開いてから、`EksCodeBuildkubeRoleARN` 出力キーの ARN 値を記録します。この IAM ARN 値は、後で CodeBuild IAM ロールに権限を提供し、Amazon EKS クラスターにワークロードをデプロイするために必要になります。 | AWS DevOps | 

### Security Hub CSPM と Aqua Security の統合を有効にする
<a name="activate-integration-between-ash-and-aqua-security"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
|  Aqua Security の統合をオンにします。 | このステップは、Trivy によって報告された Docker イメージの脆弱性の検出結果を Security Hub CSPM にアップロードするために必要です。 CloudFormation は Security Hub CSPM 統合をサポートしていないため、このプロセスは手動で行う必要があります。1. [AWS Security Hub CSPM コンソール](https://console.aws.amazon.com/securityhub/)を開き、**[統合]** へ移動します。<br />2. Aqua Security を検索し、[**Aqua Security: Aqua Security**] を選択します。<br />3. [**Accept findings（検出結果を受け入れる）**] を選択します。 | AWS 管理者、DevOps エンジニア | 

### Helm コマンドまたは kubectl コマンドを実行する CodeBuild を設定する
<a name="configure-acb-to-run-helm-or-kubectl-commands"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CodeBuild が Amazon EKS クラスターで Helm または kubectl コマンドを実行できるようにします。 | CodeBuild が Amazon EKS クラスターで Helm または `kubectl` コマンドを使用するように認証されるようにするには、IAM ロールを `aws-auth` `ConfigMap` に追加する必要があります。この場合は、IAM ロール `EksCodeBuildkubeRoleARN` の ARN を追加します。これは、CodeBuild サービスが Amazon EKS クラスターにアクセスしてワークロードをデプロイするために作成された IAM ロールです。このアクティビティは 1 回限りです。次の手順は、CodePipeline のデプロイ承認段階の前に完了する必要があります。1. Amazon Linux または macOS 環境で `cf_templates/kube_aws_auth_configmap_patch.sh` シェルスクリプトを開きます。<br />2. 次のコマンドを実行して Amazon EKS クラスターを認証します。<pre>aws eks --region <aws-region> update-kubeconfig --name <eks-cluster-name></pre><br />3. 次のコマンドを使用してシェルスクリプトを実行し、`<rolearn-eks-codebuild-kubectl>` を以前記録した `EksCodeBuildkubeRoleARN` のARN 値に置き換えます。<pre>bash cf_templates/kube_aws_auth_configmap_patch.sh <rolearn-eks-codebuild-kubectl> </pre><br />`aws_auth` `ConfigMap` が設定され、アクセスが付与されます。 | DevOps | 

### CI/CD パイプラインを検証する
<a name="validate-the-ci-cd-pipeline"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| CI/CD パイプラインが自動的に開始されることを確認します。 | 1. Checkov が Dockerfile または Helm チャートで脆弱性を検出した場合、パイプラインの CodeSecurity Scan ステージは通常、失敗します。ただし、この例の目的は、CI/CD パイプライン（通常は DevSecOps プロセス）で修正するのではなく、潜在的なセキュリティの脆弱性を特定するプロセスを確立することです。`buildspec/buildspec_secscan.yaml` ファイルでは、`checkov` コマンドは `--soft-fail` フラグを使用してパイプラインの障害を回避します。<pre>- echo -e "\n Running Dockerfile Scan"<br />- checkov -f code/app/Dockerfile --framework dockerfile --soft-fail --summary-position bottom<br />- echo -e "\n Running Scan of Helm Chart files"<br />- cp -pv helm_charts/$EKS_CODEBUILD_APP_NAME/values.dev.yaml helm_charts/$EKS_CODEBUILD_APP_NAME/values.yaml<br />- checkov -d helm_charts/$EKS_CODEBUILD_APP_NAME --framework helm --soft-fail --summary-position bottom<br />- rm -rfv helm_charts/$EKS_CODEBUILD_APP_NAME/values.yaml</pre><br />Dockerfile と Helm チャートの脆弱性が報告されたときにパイプラインが機能しなくなるようにするには、`checkov` コマンドから `--soft-fail` オプションを削除する必要があります。その後、開発者またはエンジニアは脆弱性を修正し、その変更を CodeCommit ソースコードリポジトリにコミットできます。<br />2. CodeSecurity Scan と同様に、ビルドステージは Aqua Security Trivy を使用して、アプリケーションを Amazon ECR にプッシュする前に Docker イメージの `HIGH` と `CRITICAL` の脆弱性を特定します。<pre>- AWS_REGION=$AWS_DEFAULT_REGION AWS_ACCOUNT_ID=$AWS_ACCOUNT_ID trivy -d image --no-progress --ignore-unfixed --exit-code 0 --severity HIGH,CRITICAL --format template --template "@securityhub/asff.tpl" -o securityhub/report.asff $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$CODEBUILD_RESOLVED_SOURCE_VERSION</pre><br />この例では、Docker イメージの脆弱性が報告されてもパイプラインは失敗しません。これは、`buildspec/buildspec.yml` ファイルの `trivy` コマンドに** **`0` 値を持つフラグ** **`--exit-code`** **が含まれているためです。`HIGH` および `CRTICAL` の脆弱性が報告されたときにパイプラインが失敗するようにするには、`--exit-code` の値を `1` に変更します。その後、開発者またはエンジニアは脆弱性を修正し、その変更を CodeCommit ソースコードリポジトリにコミットできます。<br />3. Aqua Security Trivy によって報告された Docker イメージの脆弱性は、Security Hub CSPM にアップロードされます。Security Hub CSPM コンソールで、**結果**に移動します。**レコード** の**状態 = アクティブ**、**製品 = Aqua Security** で結果をフィルタリングします。これにより、Security Hub CSPM の Docker イメージの脆弱性が一覧表示されます。Security Hub CSPM に脆弱性が表示されるまでに 15 分から 1 時間かかる場合があります。CodePipeline を使用してパイプラインを開始する方法の詳細については、CodePipeline ドキュメントの「[Start a pipeline in CodePipeline](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-about-starting.html)」、「[Start a pipeline manually](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-rerun-manually.html)」、および「[Start a pipeline on a schedule](https://docs.aws.amazon.com/codepipeline/latest/userguide/pipelines-trigger-source-schedule.html)」を参照してください。 | DevOps | 
| デプロイを承認します。 | 1. ビルドフェーズが完了すると、デプロイ承認ゲートが表示されます。レビュー担当者またはリリースマネージャーはビルドを検査し、すべての要件が満たされていれば承認する必要があります。これは、アプリケーションのデプロイに継続的デリバリーを使用するチームに推奨されるアプローチです。<br />2. 承認後、パイプラインは Deploy ステージを開始します。<br />3. Deploy ステージが成功すると、このステージの CodeBuild ログにアプリケーションの URL が表示されます。URL を使用してアプリケーションの準備が整っていることを確認します。 | DevOps | 
| アプリケーションプロファイリングを検証します。 | デプロイが完了し、アプリケーションポッドが Amazon EKS にデプロイされると、アプリケーションに設定されている Amazon CodeGuru Profiler エージェントは、アプリケーションのプロファイリングデータ (CPU、ヒープサマリー、レイテンシー、ボトルネック) を CodeGuru Profiler に送信します。<br />アプリケーションの初期デプロイでは、CodeGuru Profiler はプロファイリングデータの可視化に約 15 分かかります。 | AWS DevOps  | 

## 関連リソース
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-resources"></a>
+ [AWS CodePipeline ドキュメント](https://docs.aws.amazon.com/codepipeline/index.html)
+ [の Trivy を使用したイメージのスキャン AWS CodePipeline](https://aws.amazon.com/blogs/containers/scanning-images-with-trivy-in-an-aws-codepipeline/) (AWS ブログ記事)
+ [Amazon CodeGuru Profiler を使用した Java アプリケーションの改善](https://aws.amazon.com/blogs/devops/improving-your-java-applications-using-amazon-codeguru-profiler) (AWS ブログ記事)
+ [AWS Security Finding Format (ASFF) 構文](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format-syntax.html)
+ [Amazon EventBridge のイベントパターン](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-patterns.html)
+ 「[Helm アップグレード](https://helm.sh/docs/helm/helm_upgrade/)」

## 追加情報
<a name="automatically-build-and-deploy-a-java-application-to-amazon-eks-using-a-ci-cd-pipeline-additional"></a>
+ 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 の可用性の変更](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/codeguru-reviewer-availability-change.html)」を参照してください。 CodeGuru 