CDK Pipelines で Spring Boot を CI/CD 自動デプロイする【CodeDeploy で WAR ホットデプロイ】

AWS Basic
スポンサーリンク
スポンサーリンク
  1. はじめに
  2. キーワード解説
  3. cdk-pipelines との比較
  4. ファイル構成と役割
  5. 使用するAWSサービス
  6. 前提条件
  7. 作業順序
  8. 【重要】⓪ 自分のIPアドレスを確認する
  9. ① キーペアの作成
  10. ② プロジェクトのセットアップ
  11. ③ GitHub との接続を作成する(CodeConnections)
    1. 接続を作成する
    2. GitHub App をインストールする
    3. 接続 ARN を確認する
  12. ④ cdk.json の設定
  13. ⑤ コードを GitHub にプッシュする(重要!)
  14. ⑥ パイプラインスタックのデプロイ(初回のみ)
  15. ⑦ パイプラインの実行状況を確認する
    1. CloudFormation スタックの命名規則
    2. CloudFormation Outputs の確認
  16. ⑧ アプリへアクセスする
    1. ALB の DNS 名を確認する
    2. アプリの動作確認
    3. EC2 に SSH 接続する(オプション)
    4. EC2 から RDS への接続確認(オプション)
  17. ⑨ CI/CD を体験する(アプリ変更を push で自動反映)
    1. アプリの HTML を変更する
    2. コミット&プッシュ
    3. パイプラインの自動起動を確認する
  18. ⑩ リソース削除
    1. 1. アプリスタックを削除する
    2. 2. パイプラインスタックを削除する
    3. 3. SSM パラメータを削除する
    4. 4. 仮想環境の終了
    5. 5. キーペアの削除
    6. 6. GitHub との接続を削除する(オプション)
    7. 削除確認
    8. 削除されるリソース一覧
  19. CDK Pipelines + CodeDeploy のポイント解説
    1. appspec.yml とライフサイクルフック
    2. env_from_cfn_outputs の仕組み
    3. post step の役割
  20. トラブルシューティング
  21. まとめ

はじめに

「アプリのコードを push するだけで EC2 の Tomcat に自動デプロイされる仕組みを作りたい」——これを実現するのが CDK Pipelines + CodeDeploy の組み合わせです。

この記事では、CDK Pipelines ハンズオンで体験した インフラの CI/CD をさらに発展させ、Spring Boot(Java)アプリ(WAR ファイル)の自動デプロイまで含めた完全な CI/CD パイプラインを構築します。GitHub に push するだけで Maven ビルドが走り、CodeDeploy が EC2/Tomcat に WAR をホットデプロイします。

GitHub リポジトリ
  ↓ push(自動トリガー)
CodePipeline (my-cdk4-pipeline)
  ├── Source:        GitHub (CodeConnections 経由)
  ├── Build(Synth):  CodeBuild — cdk synth
  ├── Mutate:        パイプライン自己更新(セルフミューテーション)
  ├── InfraDeploy:   CloudFormation — VPC / EC2 / RDS / ALB / CodeDeploy 設定
  └── BuildAndDeployApp: ← post step
        CodeBuild: mvn package → webapp.war 生成
        CodeDeploy: EC2/Tomcat に WAR をホットデプロイ
                ↓
       [ALB: my-cdk4-alb]
                ↓
       [EC2: my-cdk4-ap-instance]  ← Tomcat + Spring Boot WAR
                ↓
       [RDS: my-cdk4-rds-mysql]    ← MySQL 8.0

このハンズオンで体験できること:

  • git push するだけで Maven ビルド → CodeDeploy → WAR ホットデプロイが自動実行される
  • インフラ(CloudFormation)とアプリ(CodeDeploy)の両方が push で自動更新される
  • HTML を変更して push すると、数分でブラウザの表示が変わることを確認できる

この記事は CDK Pipelines ハンズオン(cdk-pipelines) の発展記事です。
CDK Pipelines の基本(セルフミューテーション・Stage・CodeConnections)を体験済みの方向けです。コード詳細は GitHub を参照してください。


-->

スポンサーリンク

キーワード解説

用語意味
CodeDeployEC2 への Webアプリ(WAR/ZIP)のホットデプロイを管理するサービス。Tomcat を再起動せずに WAR を差し替えられる
appspec.ymlCodeDeploy のデプロイ手順を定義するファイル。ファイル配置先と各フェーズで実行するスクリプト(ライフサイクルフック)を記述する
デプロイバンドルappspec.yml + WAR ファイル + スクリプトを ZIP にまとめたもの。S3 に置いて CodeDeploy に渡す
ライフサイクルフックCodeDeploy デプロイの各フェーズ(ApplicationStop・BeforeInstall・AfterInstall 等)で実行するシェルスクリプト
env_from_cfn_outputsCDK Pipelines で CloudFormation スタックの出力値(CfnOutput)をパイプラインの後続ステップへ環境変数として渡す仕組み
post stepCDK Pipelines でステージ(Stage)のデプロイ完了後に続けて実行するステップ。ここでは InfraDeploy 後にアプリをデプロイする

スポンサーリンク

cdk-pipelines との比較

比較項目cdk-pipelinescdk-webapp-pipeline
何を自動デプロイするかインフラのみ(Tomcat は空で起動)インフラ + Spring Boot WAR
アプリコードなしapp/ 配下に Java/Spring Boot
ビルドステップcdk synth のみcdk synthmvn package
デプロイ手段CloudFormation のみCloudFormation + CodeDeploy
push したときインフラが更新されるインフラ + アプリも更新される
主な学習テーマCDK Pipelines の基本CodeDeploy / WAR デプロイ / env_from_cfn_outputs

ファイル構成と役割

cdk-webapp-pipeline/
├── app.py                     ← CDK アプリ エントリポイント
├── cdk.json                   ← CDK 設定・Context 変数
├── appspec.yml                ← CodeDeploy: WAR 配置手順とライフサイクルフック
├── scripts/
│   ├── stop_tomcat.sh         ← CodeDeploy: ApplicationStop フック
│   ├── cleanup.sh             ← CodeDeploy: BeforeInstall フック
│   └── start_tomcat.sh        ← CodeDeploy: AfterInstall フック
├── app/                       ← Spring Boot Webアプリ(Java)
│   ├── pom.xml
│   └── src/main/...           ← ItemController / Item / ItemRepository / templates/
├── pipeline/
│   └── pipeline_stack.py      ← CodePipeline + post step 定義
├── stages/
│   └── webapp_stage.py        ← Stage(WebappStack を内包)
├── stacks/
│   └── webapp_stack.py        ← インフラスタック(CfnOutput で値を公開)
└── components/
    └── webapp_construct.py    ← カスタム L3 Construct(CodeDeploy 設定含む)
ファイル役割
appspec.ymlCodeDeploy に「どこに WAR を置くか・何を実行するか」を指示する
scripts/*.shTomcat の停止・クリーンアップ・起動をフェーズごとに実行する
pipeline_stack.pyInfraDeploy の postBuildAndDeployApp ステップを追加。env_from_cfn_outputs でスタック出力を受け取る
webapp_stack.pyCodeDeploy の設定(アプリ名・デプロイグループ名)を CfnOutput で公開する

詳細なコードは GitHub を参照してください。


使用するAWSサービス

サービス役割料金
VPCカスタムネットワーク空間無料
EC2(t2.micro)APサーバ(Tomcat + Spring Boot)月750時間まで無料枠あり
RDS MySQL(db.t3.micro)マネージドDBサーバ月750時間まで無料枠あり
ALBロードバランサー約$0.008/時間 + LCU料金(無料枠なし
CodePipelineCI/CD パイプライン管理月1パイプラインまで無料枠あり
CodeBuildcdk synth・Maven ビルドを実行するビルド環境月100分まで無料枠あり
CodeDeployEC2 への WAR ホットデプロイEC2 へのデプロイは無料
S3パイプラインのアーティファクト・デプロイバンドル置き場無料枠あり
SSM Parameter StoreDBパスワードの安全な保管スタンダード層は無料
IAM各サービスの権限無料

注意: ALBは無料枠がありません。ハンズオン後は必ずリソースを削除してください。


前提条件

ツール確認コマンド
AWS CLI v2aws --version
Java 17java -version
Mavenmvn -version
Python 3.9 以上python --version
Node.js 18 以上node --version
CDK CLIcdk --version
Gitgit --version

AWS 認証確認:

aws sts get-caller-identity

CDK Bootstrap 確認(CDKToolkit スタックが存在すれば実施済み):

aws cloudformation describe-stacks ^
  --stack-name CDKToolkit ^
  --query "Stacks[0].StackStatus" ^
  --output text ^
  --region ap-northeast-1

GitHub アカウントが必要ですaws-learning-projects リポジトリに push できる状態にしておいてください。


作業順序

⓪ 自分のIPアドレスを確認する
      ↓
① キーペアを作成する(AWS CLI で実施)
      ↓
② プロジェクトのセットアップ(Python 仮想環境)
      ↓
③ GitHub との接続を作成する(CodeConnections)
      ↓
④ cdk.json を設定する
      ↓
⑤ コードを全て GitHub にプッシュする(重要!)
      ↓
⑥ パイプラインスタックをデプロイする(初回のみ手動)
      ↓
⑦ パイプラインの実行状況を確認する
      ↓
⑧ アプリへアクセスする(/webapp/ 必須)
      ↓
⑨ CI/CD を体験する(アプリ変更を push で自動反映)
      ↓
⑩ リソース削除

【重要】⓪ 自分のIPアドレスを確認する

curl https://checkip.amazonaws.com

控えておく情報: 自分のIPアドレス(例: 203.0.113.1


① キーペアの作成

aws ec2 create-key-pair ^
  --key-name my-cdk4-key ^
  --query KeyMaterial ^
  --output text ^
  --region ap-northeast-1 > %USERPROFILE%\.ssh\my-cdk4-key.pem

%USERPROFILE%\.ssh\ が存在しない場合は先に mkdir %USERPROFILE%\.ssh を実行してください。


② プロジェクトのセットアップ

cd C:\my-aws\aws-learning-projects\cdk-webapp-pipeline

python -m venv .venv

.venv\Scripts\activate

pip install -r requirements.txt

プロンプトの先頭に (.venv) が表示されれば仮想環境が有効になっています。

重要: CDK コマンド(synth / deploy / destroy)はすべてこの仮想環境が有効な状態で実行する必要があります。
ターミナルを開き直した際は必ず最初に以下を実行してください。

cd C:\my-aws\aws-learning-projects\cdk-webapp-pipeline
.venv\Scripts\activate

③ GitHub との接続を作成する(CodeConnections)

cdk-pipelines を実施済みの場合: 同じリポジトリ aws-learning-projects を扱うため、
既存の接続(my-github-connection)をそのまま再利用できます。
③ はスキップして、ARN の確認(③-4)から始めてください。

CodePipeline が GitHub リポジトリを監視するために、GitHub との接続(CodeConnections) を作成します。

重要: AWS コンソールと GitHub の操作は同じブラウザで行ってください。
別ブラウザで操作すると、AWS にリダイレクトされた際にデフォルトリージョン(バージニア北部等)でログインされる場合があります。

接続を作成する

  1. AWS コンソール検索(Alt+S)で CodePipeline と入力 → CodePipeline を開く
  2. 左サイドバー → 「設定」「接続」
  3. リージョンが 東京(ap-northeast-1) になっていることを確認する
  4. 接続を作成」をクリック
  5. プロバイダー: GitHub を選択
  6. 接続名: my-github-connection(任意)
  7. GitHub に接続する」をクリック

GitHub App をインストールする

クリック後、GitHub の OAuth 認証画面が開きます。

  1. Authorize」をクリック → AWS コンソールの「GitHub 接続設定」画面に自動で戻る
  2. 新しいアプリをインストールする」をクリック → GitHub の「Install & Authorize」画面が開く
  3. 「Only select repositories」 を選択 → aws-learning-projects を追加
  4. Install & Authorize」をクリック(メール認証コードが求められる場合は入力)
  5. AWS コンソールに自動でリダイレクトされる → 「接続」ボタンをクリック

接続 ARN を確認する

接続一覧から接続の ARN をコピーします。

arn:aws:codeconnections:ap-northeast-1:123456789012:connection/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

重要: ステータスが 「利用可能」 になっていることを確認してから次に進んでください。

控えておく情報: 接続 ARN(arn:aws:codeconnections:...


④ cdk.json の設定

cdk.jsoncontext セクションを自分の環境に合わせて編集します。

{
  "context": {
    "employee_id": "my",
    "my_ip": "203.0.113.1/32",
    "db_password": "Handson1234!",
    "key_name": "my-cdk4-key",
    "tomcat_version": "10.1.28",
    "github_owner": "your-github-username",
    "github_repo": "aws-learning-projects",
    "github_branch": "main",
    "connection_arn": "arn:aws:codeconnections:ap-northeast-1:..."
  }
}
設定項目説明
employee_idmyリソース名のプレフィックス(my-cdk4-xxx という名前になる)
my_ip⓪で確認したIP /32EC2へのSSHを許可するIP
key_namemy-cdk4-key①で作成したキーペア名
github_ownerGitHub ユーザー名リポジトリのオーナー名(または Org 名)
github_repoaws-learning-projectsリポジトリ名
github_branchmain監視するブランチ名
connection_arn③で確認した ARNCodeConnections の接続 ARN

cdk-pipelines(前回)と同時にデプロイしてもリソース名が競合しません。前回は my-cdk3-xxx、今回は my-cdk4-xxx というプレフィックスになります。


⑤ コードを GitHub にプッシュする(重要!)

cdk-pipelines との重要な違い: このハンズオンでは cdk.json だけでなくプロジェクト全体を push する必要があります

CDK Pipelines は GitHub から取得したコードで cdk synth を実行し、Maven ビルドも行います。
Java ソース(app/)・appspec.ymlscripts/ がリポジトリに存在しないと、パイプラインの BuildAndDeployApp ステップが失敗します。

cdk deploy の前に必ずコード全体を push してください。

cd C:\my-aws\aws-learning-projects

git add cdk-webapp-pipeline/
git commit -m "feat: cdk-webapp-pipeline ハンズオンを追加"
git push origin main

⑥ パイプラインスタックのデプロイ(初回のみ)

CDK Pipelines ではパイプライン自体を最初に1回だけ手動でデプロイします。以降はパイプラインが自動的に動作します。

cd C:\my-aws\aws-learning-projects\cdk-webapp-pipeline

.venv\Scripts\activate

cdk synth

cdk deploy my-WebappPipelineStack

「Do you wish to deploy these changes?」に y を入力します。

所要時間: パイプラインスタック自体のデプロイは 3〜5 分。その後パイプラインが自動起動します。

デプロイ完了後、CodePipeline が自動起動します:

ステージ内容所要時間
SourceGitHub から最新コードを取得〜1分
Build (Synth)cdk synth でテンプレート生成〜3分
UpdatePipelineパイプライン自己更新(セルフミューテーション)〜2分
Deploy > InfraDeployCloudFormation で VPC/EC2/RDS/ALB/CodeDeploy 設定を構築〜15分
Deploy > BuildAndDeployAppMaven ビルド → S3 → CodeDeploy で WAR デプロイ〜10分

RDS の起動に時間がかかるため、InfraDeploy は 10〜20 分かかることがあります。


⑦ パイプラインの実行状況を確認する

  1. AWS コンソール → CodePipeline を開く
  2. my-cdk4-pipeline を選択
  3. 各ステージが 「成功」 になるまで待つ

CloudFormation スタックの命名規則

CDK Pipelines でステージをデプロイすると、CloudFormation スタック名は以下の形式になります:

{StageName}-{StackName}
要素このハンズオンでの値
StageNamemy-Deploypipeline_stack.py でステージを追加した際の名前)
StackNameWebappStackwebapp_stage.pyWebappStack(self, "WebappStack") のID)
結果my-Deploy-WebappStack

my-WebappPipelineStack(パイプライン)と my-Deploy-WebappStack(インフラ)の 2つが別スタックとして CloudFormation に表示されます。

CloudFormation Outputs の確認

InfraDeploy ステージが完了したら、インフラスタックの Outputs を確認します。

aws cloudformation describe-stacks ^
  --stack-name my-Deploy-WebappStack ^
  --region ap-northeast-1 ^
  --query "Stacks[0].Outputs"

控えておく情報: ALBEndpointEC2PublicIPRDSEndpoint


⑧ アプリへアクセスする

BuildAndDeployApp ステージが完了(全ステージが成功)したら、ALB 経由でアプリにアクセスします。

ALB の DNS 名を確認する

Outputs の ALBEndpoint をブラウザで開きます。

重要: URL のパスに /webapp/ が必要です。

http://<ALBEndpoint>/webapp/

http://<ALBEndpoint>/(ルートパス)では Tomcat のデフォルト画面が表示されます。
WAR が webapp.war としてデプロイされるため、アプリは /webapp/ 以下に配置されます。

または CLI で ALBEndpoint を確認:

aws cloudformation describe-stacks ^
  --stack-name my-Deploy-WebappStack ^
  --region ap-northeast-1 ^
  --query "Stacks[0].Outputs[?OutputKey=='ALBEndpoint'].OutputValue" ^
  --output text

アプリの動作確認

以下が表示されれば正常です:

  • Spring Boot + RDS Item Manager」というタイトルが表示される
  • アイテムの追加・削除ができる
  • ブラウザをリロードしてもデータが保持される(RDS への永続化が成功)

EC2 に SSH 接続する(オプション)

ssh -i %USERPROFILE%\.ssh\my-cdk4-key.pem ec2-user@(EC2PublicIP)

EC2 接続後にログ確認などを行う場合(以下は EC2 上での操作):

sudo systemctl status codedeploy-agent   # CodeDeploy エージェントの状態確認

sudo cat /opt/tomcat/logs/catalina.out   # Tomcat のログ確認

sudo ls -la /opt/tomcat/webapps/         # デプロイされた WAR を確認

EC2 から RDS への接続確認(オプション)

EC2 に SSH 接続後:

sudo dnf install -y mariadb105

DB_PASSWORD=$(aws ssm get-parameter \
  --name /my/cdk4/db-password \
  --query Parameter.Value \
  --output text \
  --region ap-northeast-1)

mysql -h <RDSEndpoint> -u admin -p${DB_PASSWORD} sampledb

mysql> SHOW TABLES;
mysql> exit

⑨ CI/CD を体験する(アプリ変更を push で自動反映)

CDK Pipelines + CodeDeploy の醍醐味は「アプリのコードを push するだけで EC2 の Tomcat に自動デプロイされる」ことです。

アプリの HTML を変更する

app/src/main/resources/templates/index.html を開き、以下の行を変更します:

変更前:

<h1>Spring Boot + RDS Item Manager</h1>

変更後:

<h1>Spring Boot + RDS Item Manager v2</h1>

コミット&プッシュ

cd C:\my-aws\aws-learning-projects
git add cdk-webapp-pipeline/app/src/main/resources/templates/index.html
git commit -m "feat: update webapp UI to v2"
git push

パイプラインの自動起動を確認する

  1. AWS コンソール → CodePipelinemy-cdk4-pipeline
  2. push 後、数十秒以内にパイプラインが自動起動することを確認
  3. BuildAndDeployApp ステージが完了したらブラウザで /webapp/ を更新する

変更前後の見出しが切り替わっていれば、アプリの CI/CD が正常に動作しています。

補足: InfraDeploy ステージはインフラに変更がない場合は「変更なし」でスキップされ、高速に完了します。

注意: CodePipeline は main ブランチへの全ての push でトリガーされます。
.md ファイルだけ変更した場合でもビルド・デプロイが走ります。本番環境ではブランチ戦略や CodePipeline V2 のトリガーフィルターで絞ることができます。


⑩ リソース削除

課金を止めるために、ハンズオン完了後は必ず削除します。

削除順序が重要です。パイプラインによってデプロイされたスタック(my-Deploy-WebappStack)を先に削除してから、パイプラインスタック(my-WebappPipelineStack)を削除します。

1. アプリスタックを削除する

aws cloudformation delete-stack ^
  --stack-name my-Deploy-WebappStack ^
  --region ap-northeast-1

aws cloudformation wait stack-delete-complete ^
  --stack-name my-Deploy-WebappStack ^
  --region ap-northeast-1

echo WebappStack 削除完了

RDS の削除に 10〜15 分かかります。wait コマンドが完了するまでそのまま待ってください。

2. パイプラインスタックを削除する

aws cloudformation delete-stack ^
  --stack-name my-WebappPipelineStack ^
  --region ap-northeast-1

aws cloudformation wait stack-delete-complete ^
  --stack-name my-WebappPipelineStack ^
  --region ap-northeast-1

echo PipelineStack 削除完了

3. SSM パラメータを削除する

aws ssm delete-parameter ^
  --name "/my/cdk4/db-password" ^
  --region ap-northeast-1

4. 仮想環境の終了

deactivate

5. キーペアの削除

aws ec2 delete-key-pair ^
  --key-name my-cdk4-key ^
  --region ap-northeast-1

del %USERPROFILE%\.ssh\my-cdk4-key.pem

6. GitHub との接続を削除する(オプション)

次のハンズオンでも使う場合はそのままでよいです。

CodePipeline → 設定 → 接続 → my-github-connection → 「削除」

削除確認

aws cloudformation list-stacks ^
  --region ap-northeast-1 ^
  --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE ^
  --query "StackSummaries[?contains(StackName, 'my-')].StackName"

空のリスト [] が返れば削除完了です。

削除されるリソース一覧

リソース削除方法
ALB・EC2・RDS・VPC・SG・S3(アーティファクト)・CodeDeploydelete-stack my-Deploy-WebappStack で削除
CodePipeline・CodeBuilddelete-stack my-WebappPipelineStack で削除
SSM パラメータ(DBパスワード)aws ssm delete-parameter で手動削除
キーペアaws ec2 delete-key-pair で手動削除
GitHub との接続(CodeConnections)CodePipeline コンソールから手動削除

CDK Pipelines + CodeDeploy のポイント解説

appspec.yml とライフサイクルフック

version: 0.0
os: linux
files:
  - source: webapp.war
    destination: /opt/tomcat/webapps/
    overwrite: true
hooks:
  ApplicationStop:
    - location: scripts/stop_tomcat.sh    # Tomcat 停止
  BeforeInstall:
    - location: scripts/cleanup.sh         # 古い WAR・展開ディレクトリを削除
  AfterInstall:
    - location: scripts/start_tomcat.sh    # Tomcat 起動

CodeDeploy はこの順序でフックを実行し、Tomcat の再起動を伴わずに WAR を差し替えます。

env_from_cfn_outputs の仕組み

インフラスタック(webapp_stack.py)は CodeDeploy のリソース情報を CfnOutput で公開します:

self.deploy_app_name_output = CfnOutput(
    self, "DeployApplicationName",
    value=web.deploy_application.application_name,
)

パイプライン(pipeline_stack.py)はこの出力をアプリデプロイステップの環境変数として受け取ります:

# pipeline_stack.py
build_and_deploy = CodeBuildStep(
    "BuildAndDeployApp",
    env_from_cfn_outputs={
        "DEPLOY_APP_NAME": stage.deploy_app_name_output,   # CloudFormation Output → 環境変数
    },
    commands=["aws deploy create-deployment --application-name $DEPLOY_APP_NAME ..."],
)

これにより、パイプラインのコードにリソース名をハードコードせず、CloudFormation が実際に作成したリソース名を動的に参照できます。

post step の役割

pipeline.add_stage(stage, post=[build_and_deploy])

post にステップを渡すことで、ステージ(InfraDeploy)の完了後に続けて BuildAndDeployApp が実行されます。これにより「インフラが確実に存在する状態でアプリをデプロイする」という順序が保証されます。


トラブルシューティング

症状原因対処
Source ステージが「失敗」GitHub との接続が「保留中」のままCodePipeline → 設定 → 接続 → 承認して「利用可能」にする
BuildAndDeployApp が mvn package で失敗Java ソースが GitHub に push されていないgit add cdk-webapp-pipeline/ で全ファイルを push してから再実行
CodeDeploy が失敗するEC2 の UserData が完了していないEC2 起動後 1〜2 分待ってから再デプロイ。sudo systemctl status codedeploy-agent で確認
ALB にアクセスすると 404 or 502WAR デプロイ未完了 または Tomcat 起動中BuildAndDeployApp ステージが完了するまで待つ
/webapp/ で接続できないURL パスが間違いルート URL(/)ではなく /webapp/ にアクセスする
Tomcat の catalina.out に RDS 接続エラーsetenv.sh の DB_HOST が未設定EC2 に SSH して cat /opt/tomcat/bin/setenv.sh を確認する
パイプラインが自動起動しない接続が「保留中」または branch 名が違う接続を承認 / cdk.jsongithub_branch を確認

CodeDeploy 失敗時のログ確認:

AWS コンソール → CodeDeploy → アプリケーション → デプロイグループ → デプロイ履歴 → 失敗したデプロイ → 「ログの表示」


まとめ

ステップ内容
①②キーペア作成 + Python 仮想環境のセットアップ
CodeConnections で GitHub との接続を作成・承認(cdk-pipelines 実施済みなら再利用)
cdk.jsongithub_ownergithub_repoconnection_arnkey_name を設定
cdk-webapp-pipeline/ 全体を GitHub に push(Java ソース・appspec.yml も含む)
cdk deploy my-WebappPipelineStack初回のみ手動)でパイプラインスタックをデプロイ
CodePipeline が自動起動 → Synth → Mutate → InfraDeploy(15〜20 分)→ BuildAndDeployApp(10 分)
http://<ALBEndpoint>/webapp/ でアプリにアクセスし、アイテムの追加・削除を確認
HTML を変更して push → パイプライン自動起動 → ブラウザで変更を確認(アプリ CI/CD 体験)
delete-stack my-Deploy-WebappStackdelete-stack my-WebappPipelineStack の順で削除

CDK Pipelines + CodeDeploy を組み合わせることで、「インフラもアプリも、コードが唯一の変更手段になる」GitOps の世界を体験できました。インフラ変更は CloudFormation が、アプリ変更は CodeDeploy が、それぞれ自動で EC2 に反映します。

コンソールで3層構成を視覚的に学びたい場合は AWSコンソール版ハンズオン、CDK の基本は CDK版ハンズオン(cdk-alb-ec2-rds)、カスタム Construct は CDK カスタム Construct ハンズオン、インフラ CI/CD のみは CDK Pipelines ハンズオン を参照してください。

コメント