- はじめに
- キーワード解説
- cdk-webapp-pipeline との比較
- ファイル構成と役割
- 使用するAWSサービス
- 前提条件
- 作業順序
- ① プロジェクトのセットアップ
- ② GitHub との接続を作成する(CodeConnections)
- ③ cdk.json の設定
- ④ コードを GitHub にプッシュする(重要!)
- ⑤ パイプラインスタックのデプロイ(初回のみ)
- ⑥ パイプラインの実行状況を確認する
- ⑦ アプリへアクセスする
- ⑧ Auto Scaling を体験する
- ⑨ CI/CD を体験する(アプリ変更を push で自動反映)
- ⑩ リソース削除
- Auto Scaling のポイント解説
- トラブルシューティング
- まとめ
はじめに
「EC2 が 1台では負荷が集中したときに対応できない」「障害で EC2 が落ちたら手動で復旧しなければならない」——これを解決するのが Auto Scaling Group(ASG) です。
この記事では、CDK Pipelines + CodeDeploy ハンズオンで構築した 単一 EC2 構成を、Auto Scaling Group + Launch Template にアップグレードします。CPU 負荷をかけて実際にスケールアウトを体験し、新しいインスタンスへ CodeDeploy が自動で WAR をデプロイする様子を確認します。
GitHub リポジトリ
↓ push(自動トリガー)
CodePipeline (my-cdk5-pipeline)
├── Source: GitHub (CodeConnections 経由)
├── Build(Synth): CodeBuild — cdk synth
├── Mutate: パイプライン自己更新(セルフミューテーション)
├── InfraDeploy: CloudFormation — VPC / ASG / RDS / ALB
└── BuildAndDeployApp: ← post step
CodeBuild: mvn package → webapp.war 生成
CodeDeploy: ASG の全 Tomcat に一括デプロイ
↓
[ALB: my-cdk5-alb]
↓
┌─────────────────────────────┐
│ Auto Scaling Group (ASG) │
│ my-cdk5-asg │
│ ・最小 1台 / 最大 3台 │
│ ・CPU 60% 超でスケールアウト│
│ ├── EC2: Tomcat + WAR │
│ └── EC2: Tomcat + WAR(追加分)│
└─────────────────────────────┘
↓
[RDS: my-cdk5-rds-mysql] ← MySQL 8.0このハンズオンで体験できること:
git pushするだけで ASG の全インスタンスへ WAR が自動デプロイされる- CPU に負荷をかけてスケールアウトを体験する
- スケールアウト後の新インスタンスへ CodeDeploy が自動で WAR をデプロイする(ライフサイクルフック)
- キーペア不要で SSM Session Manager からブラウザ経由でインスタンスに接続する
この記事は CDK Pipelines + CodeDeploy ハンズオン(cdk-webapp-pipeline) の発展記事です。
CodeDeploy・CDK Pipelines の基本を体験済みの方向けです。コード詳細は GitHub を参照してください。
-->
キーワード解説
| 用語 | 意味 |
|---|---|
| Auto Scaling Group(ASG) | EC2 インスタンスのグループを自動管理するサービス。負荷に応じてインスタンス数を増減させ、障害時は自動で置き換える |
| Launch Template | ASG が新しいインスタンスを起動する際に使う設定テンプレート(AMI・インスタンスタイプ・UserData 等) |
| ターゲット追跡ポリシー | メトリクス(CPU 使用率 60%)を目標値として維持するよう自動スケーリングするポリシー |
| ASG ライフサイクルフック | スケールアウト時に新しいインスタンスへ CodeDeploy が最新 WAR を自動デプロイする仕組み |
| SSM Session Manager | キーペアなしで EC2 インスタンスにブラウザからセキュアに接続できるサービス |
| stress-ng | CPU・メモリ等に人工的な負荷をかけるツール。スケーリングのトリガーとして使用する |
cdk-webapp-pipeline との比較
| 比較項目 | cdk-webapp-pipeline | cdk-asg-webapp |
|---|---|---|
| EC2 管理方法 | 単一 Instance リソース | Auto Scaling Group + Launch Template |
| EC2 台数 | 固定 1台 | 最小 1台〜最大 3台(自動増減) |
| スケーリング | なし | CPU 60% 超でスケールアウト |
| 自己回復 | なし(手動対応) | ALB ヘルスチェックで異常インスタンスを自動置換 |
| 接続方法 | SSH(キーペア必要) | SSM Session Manager(キーペア不要) |
| CodeDeploy ターゲット | 名前タグで EC2 を指定 | ASG を直接指定 |
| スケールアウト時 | 新 EC2 に WAR なし | ライフサイクルフックで自動デプロイ |
ファイル構成と役割
cdk-asg-webapp/
├── app.py ← CDK アプリ エントリポイント
├── cdk.json ← CDK 設定(key_name/my_ip なし・asg_* 追加)
├── appspec.yml ← CodeDeploy: WAR 配置手順とライフサイクルフック
├── scripts/
│ ├── stop_tomcat.sh
│ ├── cleanup.sh
│ └── start_tomcat.sh
├── app/ ← Spring Boot Webアプリ(Java)
├── pipeline/
│ └── pipeline_stack.py ← CodePipeline + post step(ASG 対応)
├── stages/
│ └── deploy_stage.py ← Stage(WebappStack を内包)
├── stacks/
│ └── webapp_stack.py ← インフラスタック(ASGName を CfnOutput で公開)
└── components/
└── webapp_construct.py ← ASG ベースの L3 Construct| ファイル | cdk-webapp-pipeline との主な違い |
|---|---|
webapp_construct.py | ec2.Instance → autoscaling.AutoScalingGroup + ec2.LaunchTemplate |
webapp_stack.py | InstanceId 出力を廃止 → ASGName を CfnOutput で公開 |
pipeline_stack.py | INSTANCE_ID → ASG_NAME(インスタンス待機の方法が変わる) |
詳細なコードは GitHub を参照してください。
使用するAWSサービス
| サービス | 役割 | 料金 |
|---|---|---|
| VPC | カスタムネットワーク空間 | 無料 |
| Auto Scaling Group + EC2(t2.micro) | APサーバ(Tomcat + Spring Boot)を自動スケール | インスタンス分の EC2 料金 |
| RDS MySQL(db.t3.micro) | マネージドDBサーバ | 月750時間まで無料枠あり |
| ALB | ロードバランサー | 約$0.008/時間 + LCU料金(無料枠なし) |
| CodePipeline | CI/CD パイプライン管理 | 月1パイプラインまで無料枠あり |
| CodeBuild | cdk synth・Maven ビルドを実行するビルド環境 | 月100分まで無料枠あり |
| CodeDeploy | ASG の全インスタンスへの WAR デプロイ | EC2 へのデプロイは無料 |
| S3 | パイプラインのアーティファクト・デプロイバンドル置き場 | 無料枠あり |
| SSM | Session Manager による EC2 接続・Parameter Store(DBパスワード) | Session Manager 無料・スタンダード層無料 |
| IAM | 各サービスの権限 | 無料 |
注意: ALBは無料枠がありません。スケールアウト中はEC2が複数台起動するため料金も増加します。ハンズオン後は必ずリソースを削除してください。
前提条件
| ツール | 確認コマンド |
|---|---|
| AWS CLI v2 | aws --version |
| Java 17 | java -version |
| Maven | mvn -version |
| Python 3.9 以上 | python --version |
| Node.js 18 以上 | node --version |
| CDK CLI | cdk --version |
| Git | git --version |
AWS 認証確認:
aws sts get-caller-identityCDK Bootstrap 確認:
aws cloudformation describe-stacks ^
--stack-name CDKToolkit ^
--query "Stacks[0].StackStatus" ^
--output text ^
--region ap-northeast-1SSH キーペアは不要です。このハンズオンでは SSM Session Manager を使って EC2 に接続するため、キーペアの作成・設定は必要ありません。
作業順序
① プロジェクトのセットアップ(Python 仮想環境)
↓
② GitHub との接続を作成する(CodeConnections)
↓
③ cdk.json を設定する
↓
④ コードを全て GitHub にプッシュする(重要!)
↓
⑤ パイプラインスタックをデプロイする(初回のみ手動)
↓
⑥ パイプラインの実行状況を確認する
↓
⑦ アプリへアクセスする
↓
⑧ Auto Scaling を体験する(CPU 負荷 → スケールアウト → 自動デプロイ)
↓
⑨ CI/CD を体験する(アプリ変更を push で自動反映)
↓
⑩ リソース削除① プロジェクトのセットアップ
cd C:\my-aws\aws-learning-projects\cdk-asg-webapp
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txtプロンプトの先頭に (.venv) が表示されれば仮想環境が有効になっています。
重要: CDK コマンドはすべてこの仮想環境が有効な状態で実行する必要があります。
ターミナルを開き直した際は必ず最初に以下を実行してください。cd C:\my-aws\aws-learning-projects\cdk-asg-webapp .venv\Scripts\activate
② GitHub との接続を作成する(CodeConnections)
cdk-webapp-pipeline を実施済みの場合: 同じリポジトリ
aws-learning-projectsを扱うため、
既存の接続(my-github-connection)をそのまま再利用できます。
② はスキップして、ARN の確認(②-4)から始めてください。
CodePipeline が GitHub リポジトリを監視するために、GitHub との接続(CodeConnections) を作成します。
重要: AWS コンソールと GitHub の操作は同じブラウザで行ってください。
接続を作成する
- AWS コンソール検索(
Alt+S)でCodePipelineと入力 → CodePipeline を開く - 左サイドバー → 「設定」 → 「接続」
- リージョンが 東京(ap-northeast-1) になっていることを確認する
- 「接続を作成」をクリック
- プロバイダー: GitHub を選択
- 接続名:
my-github-connection(任意) - 「GitHub に接続する」をクリック
GitHub App をインストールする
- 「Authorize」をクリック → AWS コンソールの「GitHub 接続設定」画面に自動で戻る
- 「新しいアプリをインストールする」をクリック
- 「Only select repositories」 を選択 →
aws-learning-projectsを追加 - 「Install & Authorize」をクリック(メール認証コードが求められる場合は入力)
- AWS コンソールに自動でリダイレクトされる → 「接続」ボタンをクリック
接続 ARN を確認する
接続一覧から接続の ARN をコピーします。
arn:aws:codeconnections:ap-northeast-1:123456789012:connection/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxステータスが 「利用可能」 になっていることを確認してから次に進んでください。
控えておく情報: 接続 ARN(arn:aws:codeconnections:...)
③ cdk.json の設定
cdk.json の context セクションを自分の環境に合わせて編集します。
{
"context": {
"employee_id": "my",
"db_password": "Handson1234!",
"tomcat_version": "10.1.28",
"asg_min_capacity": 1,
"asg_max_capacity": 3,
"asg_desired_capacity": 1,
"github_owner": "your-github-username",
"github_repo": "aws-learning-projects",
"github_branch": "main",
"connection_arn": "arn:aws:codeconnections:ap-northeast-1:..."
}
}| 設定項目 | 値 | 説明 |
|---|---|---|
employee_id | my | リソース名のプレフィックス(my-cdk5-xxx という名前になる) |
asg_min_capacity | 1 | ASG の最小インスタンス数(スケールインの下限) |
asg_max_capacity | 3 | ASG の最大インスタンス数(スケールアウトの上限) |
asg_desired_capacity | 1 | 初期起動インスタンス数 |
github_owner | GitHub ユーザー名 | リポジトリのオーナー名 |
connection_arn | ②で確認した ARN | CodeConnections の接続 ARN |
key_name・my_ipは不要です。SSH の代わりに SSM Session Manager を使うため、キーペアやSSH許可IPの設定は必要ありません。
④ コードを GitHub にプッシュする(重要!)
cdk deployの前に必ずプロジェクト全体を push してください。
パイプラインがcdk synth・Maven ビルドを実行する際、GitHub から取得したコードを使うためです。
cd C:\my-aws\aws-learning-projects
git add cdk-asg-webapp/
git commit -m "feat: cdk-asg-webapp ハンズオンを追加"
git push origin main⑤ パイプラインスタックのデプロイ(初回のみ)
cd C:\my-aws\aws-learning-projects\cdk-asg-webapp
.venv\Scripts\activate
cdk synth
cdk deploy my-AsgPipelineStack「Do you wish to deploy these changes?」に y を入力します。
所要時間: パイプラインスタック自体のデプロイは 3〜5 分。その後パイプラインが自動起動します。
デプロイ完了後、CodePipeline が自動起動します:
| ステージ | 内容 | 所要時間 |
|---|---|---|
| Source | GitHub から最新コードを取得 | 〜1分 |
| Build (Synth) | cdk synth でテンプレート生成 | 〜3分 |
| UpdatePipeline | パイプライン自己更新(セルフミューテーション) | 〜2分 |
| Deploy > InfraDeploy | CloudFormation で VPC / ASG / RDS / ALB を構築 | 〜15分 |
| Deploy > BuildAndDeployApp | Maven ビルド → CodeDeploy で WAR デプロイ | 〜10分 |
RDS の起動に時間がかかるため、InfraDeploy は 10〜20 分かかることがあります。
⑥ パイプラインの実行状況を確認する
- AWS コンソール → CodePipeline を開く
my-cdk5-pipelineを選択- 各ステージが 「成功」 になるまで待つ
CloudFormation スタックの命名規則
{StageName}-{StackName}| 要素 | このハンズオンでの値 |
|---|---|
| StageName | my-Deploy |
| StackName | WebappStack |
| 結果 | my-Deploy-WebappStack |
my-AsgPipelineStack(パイプライン)とmy-Deploy-WebappStack(インフラ)の 2つが別スタックとして CloudFormation に表示されます。
CloudFormation Outputs の確認
aws cloudformation describe-stacks ^
--stack-name my-Deploy-WebappStack ^
--region ap-northeast-1 ^
--query "Stacks[0].Outputs"控えておく情報: ALBEndpoint、RDSEndpoint
⑦ アプリへアクセスする
BuildAndDeployApp ステージが完了したら、ALB 経由でアプリにアクセスします。
http://<ALBEndpoint>/webapp/
http://<ALBEndpoint>/(ルートパス)では Tomcat のデフォルト画面が表示されます。/webapp/が必要です。
ALB の DNS 名を CLI で確認する場合:
aws cloudformation describe-stacks ^
--stack-name my-Deploy-WebappStack ^
--region ap-northeast-1 ^
--query "Stacks[0].Outputs[?OutputKey=='ALBEndpoint'].OutputValue" ^
--output textASG インスタンスを確認する
AWS コンソール → EC2 → Auto Scaling グループ → my-cdk5-asg
- インスタンス タブを開く
- 1台の EC2 が
InServiceになっていることを確認する
⑧ Auto Scaling を体験する
ASG のスケールアウト・スケールインを実際に体験します。CPU 使用率が 60% を超えると自動でインスタンスが追加されます。
現在の ASG 状態を確認する
aws autoscaling describe-auto-scaling-groups ^
--auto-scaling-group-names my-cdk5-asg ^
--region ap-northeast-1 ^
--query "AutoScalingGroups[0].{Desired:DesiredCapacity,Min:MinSize,Max:MaxSize,Instances:Instances[*].{Id:InstanceId,State:LifecycleState}}"出力例(初期状態: 1台が InService):
{
"Desired": 1,
"Min": 1,
"Max": 3,
"Instances": [{ "Id": "i-0abc123...", "State": "InService" }]
}SSM Session Manager でインスタンスに接続する
キーペアは不要です。AWS コンソールから直接ブラウザでターミナルを開けます。
- EC2 → インスタンス → 対象インスタンスを選択
- 「接続」ボタンをクリック
- 「Session Manager」タブ → 「接続」をクリック
ブラウザでターミナルが開きます。
CLI から接続する場合:
rem インスタンス ID を取得
aws autoscaling describe-auto-scaling-groups ^
--auto-scaling-group-names my-cdk5-asg ^
--region ap-northeast-1 ^
--query "AutoScalingGroups[0].Instances[0].InstanceId" ^
--output text
rem 接続(Session Manager Plugin が必要)
aws ssm start-session ^
--target i-0abc123def456789 ^
--region ap-northeast-1CPU 負荷をかける(スケールアウトをトリガーする)
インスタンスに接続したターミナルで実行します:
cd /tmp && stress-ng --cpu 2 --timeout 300s &
echo "CPU stress started (PID: $!)"スケールアウトを監視する
- AWS コンソール → CloudWatch → メトリクス → EC2 → Auto Scaling グループ別
my-cdk5-asgのCPUUtilizationを確認- CPU が 60% を超えると、約 1〜3 分後にスケールアウトが始まる
ASG のインスタンス数を 10秒ごとに確認:
:loop
aws autoscaling describe-auto-scaling-groups ^
--auto-scaling-group-names my-cdk5-asg ^
--region ap-northeast-1 ^
--query "AutoScalingGroups[0].Instances[*].{Id:InstanceId,State:LifecycleState}" ^
--output table
timeout /t 10
goto loopしばらく待つと 2台目のインスタンスが起動し InService になります。
スケールアウト後の CodeDeploy 自動デプロイを確認する
新しいインスタンスが起動すると、CodeDeploy が自動的に最新の WAR をデプロイします。
AWS コンソール → CodeDeploy → my-cdk5-deploy-app
→ デプロイグループ → デプロイ履歴
新しいデプロイが自動で実行されていることを確認します。パイプラインを手動実行しなくても、ライフサイクルフックにより新インスタンスへ最新 WAR が自動デプロイされます。
スケールインを確認する
CPU 負荷が終了(300秒後)すると CPU 使用率が下がり、スケールインが始まります。
ターゲット追跡ポリシーのデフォルトのスケールイン保護時間は 300秒。
負荷終了後、約 5〜10 分でインスタンス数が 1台に戻ります。
途中で手動停止する場合:
pkill stress-ng⑨ CI/CD を体験する(アプリ変更を push で自動反映)
アプリのコードを変更して push するだけで、ASG の全インスタンスへ自動デプロイされることを確認します。
アプリの HTML を変更する
app/src/main/resources/templates/index.html を開き、以下の行を変更します:
変更前:
<h1>Spring Boot + RDS Item Manager</h1>変更後:
<h1>Spring Boot + RDS Item Manager (ASG)</h1>コミット&プッシュ
cd C:\my-aws\aws-learning-projects
git add cdk-asg-webapp/app/src/main/resources/templates/index.html
git commit -m "feat: update webapp UI for ASG"
git pushパイプラインの自動起動を確認する
- AWS コンソール → CodePipeline →
my-cdk5-pipeline - push 後、数十秒以内にパイプラインが自動起動することを確認
BuildAndDeployAppステージが完了したらブラウザで/webapp/を更新する
「(ASG)」が付いた見出しが表示されれば、ASG 構成での CI/CD が正常に動作しています。
注意:
InfraDeployステージはインフラに変更がない場合は「変更なし」でスキップされます。
⑩ リソース削除
課金を止めるために、ハンズオン完了後は必ず削除します。
ASG を含むスタックを削除すると、全インスタンスが自動終了されます。
削除順序が重要です。インフラスタック(
my-Deploy-WebappStack)を先に削除してから、パイプラインスタック(my-AsgPipelineStack)を削除します。
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-AsgPipelineStack ^
--region ap-northeast-1
aws cloudformation wait stack-delete-complete ^
--stack-name my-AsgPipelineStack ^
--region ap-northeast-1
echo AsgPipelineStack 削除完了3. SSM パラメータを削除する
aws ssm delete-parameter ^
--name "/my/cdk5/db-password" ^
--region ap-northeast-14. 仮想環境の終了
deactivate5. 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・ASG・EC2(全インスタンス)・RDS・VPC・S3(アーティファクト)・CodeDeploy | delete-stack my-Deploy-WebappStack で削除 |
| CodePipeline・CodeBuild | delete-stack my-AsgPipelineStack で削除 |
| SSM パラメータ(DBパスワード) | aws ssm delete-parameter で手動削除 |
| GitHub との接続(CodeConnections) | CodePipeline コンソールから手動削除 |
Auto Scaling のポイント解説
ASG ライフサイクルフックで新インスタンスへ自動デプロイ
CDK で codedeploy.ServerDeploymentGroup(auto_scaling_groups=[self.asg]) と指定すると、CodeDeploy が ASG にライフサイクルフックを自動設定します。
スケールアウト発生
↓
ASG: 新しいインスタンスを Launch Template から起動
↓
EC2 UserData: Java・Tomcat・CodeDeploy エージェントをインストール
↓
ライフサイクルフック: CodeDeploy が最新 WAR を自動デプロイ
↓
ALB ターゲットグループに追加(InService)これにより、スケールアウト後の新インスタンスでもユーザーは何もしなくて済みます。
cdk-webapp-pipeline → cdk-asg-webapp の変化
cdk-webapp-pipeline cdk-asg-webapp
───────────────────────── ─────────────────────────
EC2 Instance(固定 1台) Auto Scaling Group(1〜3台)
↓ ↓
SSH(キーペア必要) SSM Session Manager(キーペア不要)
↓ ↓
CodeDeploy: 名前タグで指定 CodeDeploy: ASG を直接指定
↓ ↓
スケールアウト不可 CPU 60% 超で自動スケールアウト
↓ ↓
新インスタンスに WAR なし ライフサイクルフックで自動 WAR デプロイトラブルシューティング
| 症状 | 原因 | 対処 |
|---|---|---|
| Source ステージが「失敗」 | GitHub との接続が「保留中」 | CodePipeline → 設定 → 接続 → 承認して「利用可能」にする |
| BuildAndDeployApp が失敗 | Java ソースが GitHub に push されていない | git add cdk-asg-webapp/ で全ファイルを push してから再実行 |
| CodeDeploy が失敗する | UserData が完了していない | ASG 起動後 2〜3 分待ってから再デプロイ |
| スケールアウトが起きない | CPU が 60% に達していない | stress-ng --cpu 0 --timeout 300s & でコア全体に負荷をかける |
| スケールインが起きない | スケールイン保護時間(300秒)が経過していない | CPU 負荷停止後 5〜10 分待つ |
/webapp/ で 404 | WAR デプロイ未完了 | BuildAndDeployApp ステージが完了するまで待つ |
| ALB ヘルスチェック失敗 | Tomcat 起動中 | SSM Session Manager で sudo cat /opt/tomcat/logs/catalina.out を確認 |
CodeDeploy 失敗時のログ確認:
AWS コンソール → CodeDeploy → my-cdk5-deploy-app → デプロイグループ → デプロイ履歴 → 失敗したデプロイ → 「ログの表示」
まとめ
| ステップ | 内容 |
|---|---|
| ① | Python 仮想環境のセットアップ |
| ② | CodeConnections で GitHub との接続を作成・承認(cdk-webapp-pipeline 実施済みなら再利用) |
| ③ | cdk.json を設定(key_name・my_ip 不要。asg_min/max/desired_capacity を確認) |
| ④ | cdk-asg-webapp/ 全体を GitHub に push |
| ⑤ | cdk deploy my-AsgPipelineStack(初回のみ手動) |
| ⑥ | CodePipeline が自動起動 → Synth → Mutate → InfraDeploy(15〜20 分)→ BuildAndDeployApp(10 分) |
| ⑦ | http://<ALBEndpoint>/webapp/ でアクセス確認・ASG インスタンス InService を確認 |
| ⑧ | stress-ng で CPU 負荷 → スケールアウト → CodeDeploy が新インスタンスへ自動デプロイ |
| ⑨ | HTML を変更して push → パイプライン自動起動 → 変更を確認(ASG 全インスタンスに反映) |
| ⑩ | delete-stack my-Deploy-WebappStack → delete-stack my-AsgPipelineStack の順で削除 |
ASG を導入することで「単一障害点の排除・自動スケーリング・スケールアウト時の自動デプロイ」を一度に体験できました。
コンソールで3層構成を視覚的に学びたい場合は AWSコンソール版ハンズオン、CDK の基本は CDK版ハンズオン(cdk-alb-ec2-rds)、カスタム Construct は CDK カスタム Construct ハンズオン、インフラ CI/CD は CDK Pipelines ハンズオン、アプリ CI/CD は CDK + CodeDeploy ハンズオン を参照してください。
コメント