Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CloudFormationコンソールから、実際に作られたリソースを辿れるようになろう!
Search
amixedcolor
November 12, 2025
Technology
320
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
CloudFormationコンソールから、 実際に作られたリソースを辿れるようになろう!
【ジュニチャン大盛】みんなのAWS CDK事情大公開スペシャル#4 で登壇した内容です!
https://classmethod.connpass.com/event/373496/
amixedcolor
November 12, 2025
More Decks by amixedcolor
See All by amixedcolor
レビューしきれない?それは「全て人力でのレビュー」だからではないでしょうか
amixedcolor
0
460
エイミは何を成したのか? - 任期中の活動を振り返る
amixedcolor
1
210
インプットと「セットで」考えるアウトプットのすすめ
amixedcolor
0
110
enPiTとアジャイルと新規事業開発 − enPiT出身のエンジニアが株式会社Relicで成していること、この先成そうとしていること
amixedcolor
1
160
新規事業開発でのAWS活用
amixedcolor
1
310
Outputをもう一歩先へ 〜あなたの現在地に合わせた、量や質など「もう一歩先の」Output〜
amixedcolor
3
500
コラボセッション 〜地元の若手とJr.Championsで、「活動の原点」を語る〜
amixedcolor
0
67
スタートアップで高速検証するためのAmplify Gen 2 〜利便性と、ハマるS3認可や一覧画面実装の解決テンプレート〜
amixedcolor
3
190
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
3
1.1k
Other Decks in Technology
See All in Technology
分割40%キーボードにスムーズに入門するには
hoto17296
1
230
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
290
Webとヘルスデータ
yukukotani
0
160
[RSJ26] Building a VLA Model Based on Self-Distilled Classification
keio_smilab
PRO
0
180
Azure Cost Management の FOCUS コストデータを迷わず読むための“3つの軸”
tetsuyaooooo
0
130
【試作】IoT x AIエージェント
happysamurai294
0
110
Level Up Your CDK DX: 5 Tools I’ve Been Building
gotok365
2
180
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
2
1k
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
120
はじめてのDatabricks:技術者向けワークショップ / beginner-workshop
databricksjapan
PRO
0
140
AI時代におけるプロダクト横断勉強会の設計
zozotech
PRO
0
140
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Music & Morning Musume
bryan
47
7.4k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
Thoughts on Productivity
jonyablonski
76
5.4k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
360
Navigating Team Friction
lara
192
16k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
510
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
65k
Agile that works and the tools we love
rasmusluckow
331
22k
Odyssey Design
rkendrick25
PRO
2
800
Transcript
株式会社Relic エンジニア 保 龍児(エイミ/amixedcolor) CloudFormationコンソールから、 実際に作られたリソースを辿れるように なろう!
2 • CDKをこれから使いたい • CloudFormationを使ったことはない 想定聴衆
3 今日のゴール CloudFormationコンソールから 実際に作られたリソースを 辿れるようになる
4 今日のゴール CloudFormation コンソールから 実際に作られた リソースを 辿れるようになる
5 おまけ CDKによる簡便な記法を体感する
6 自己紹介 保 龍児(エイミ/amixedcolor) 2025 Japan AWS Jr. Champion 業務内容
: 自社新規事業SaaS開発リーダー エンジニア(WebアプリFE/BE/インフラ) 好きなトピック : アジャイル、スクラム、新規事業開発、 AWS、完全没入型仮想現実 よくいるコミュニティ : AWSコミュニティ、アジャイルコミュニティ @amixedcolor
7 • 「コンソールからリソースを辿れるようになる」に焦点を当てて いるため、周辺の説明はざっくりとしたものです 留意事項
8 CDKでVPCをデプロイした!
9 デプロイしたVPCを見てみよう!
10 わっ!?
11 「どれだ…?」
12 そんなあなたに聞いて欲しい!
13 そもそも・・・
14 Q: CDKはどうやってリソースを 構築する?
15 Q: CDKはどうやってリソースを 構築する?
16 A: CloudFormationテンプレートを 介して構築する
17 A: CloudFormationテンプレートを 介して構築する
18 A: CloudFormationテンプレート を 介して構築する
19 構築されたリソースは CloudFormationコンソール から辿れる!
20 今回デプロイするリソースの説明
21 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
22 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
23 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
24 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
25 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
26 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
27 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
28 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
29 構成図 AWS Cloud Virtual private cloud (VPC) Internet gateway
Public subnet Public subnet Amazon Elastic Compute Cloud (Amazon EC2) Role Permissions AmazonSSMManagedInstanceCore Internet
30 #!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import
{ CdkLtStack } from '../lib/cdk-lt-stack'; import { CdkLtStack as CdkLtStackPredeployed } from '../lib/cdk-lt-stack’; const app = new cdk.App(); new CdkLtStack(app, 'CdkLtDemoStack', {}); new CdkLtStackPredeployed(app, 'CdkLtDemoStackPredeployed', {}); cdk.Tags.of(app).add('Project', 'CDK-LT-Demo'); cdk.Tags.of(app).add('Deletion Policy', '202511'); cdk.Tags.of(app).add('CreatedBy', 'tatsuji.ho'); ソースコード①:bin/app.ts
31 import * as cdk from 'aws-cdk-lib'; import { Construct
} from 'constructs'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; // EC2 (VPC, Instance) import * as iam from 'aws-cdk-lib/aws-iam'; // IAM (Role) ソースコード②:cdk-lt-stack.ts(1/4)
32 export class CdkLtStack extends cdk.Stack { constructor(scope: Construct, id:
string, props?: cdk.StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, 'MyVpc', { vpcName: 'cdk-lt-vpc', maxAzs: 2 subnetConfiguration: [ { cidrMask: 24, name: 'Public', subnetType: ec2.SubnetType.PUBLIC, }, ], }); cdk.Tags.of(vpc).add('Name', 'cdk-lt-vpc'); ソースコード②:cdk-lt-stack.ts(2/4)
33 const ec2Role = new iam.Role(this, 'Ec2SsmRole', { assumedBy: new
iam.ServicePrincipal('ec2.amazonaws.com'), managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonSSMManagedInstanceCore'), ], }); const instance = new ec2.Instance(this, 'MyEc2Instance', { vpc: vpc, instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MICRO), machineImage: ec2.MachineImage.latestAmazonLinux2023(), vpcSubnets: { subnetType: ec2.SubnetType.PUBLIC, }, associatePublicIpAddress: true, role: ec2Role, }); cdk.Tags.of(instance).add('Name', 'cdk-lt-instance'); ソースコード②:cdk-lt-stack.ts(3/4)
34 new cdk.CfnOutput(this, 'VpcIdOutput', { value: vpc.vpcId, description: 'Created VPC
ID', exportName: 'CdkLtDemoVpcId', // 他のスタックから参照する場合の名前 }); new cdk.CfnOutput(this, 'InstanceIdOutput', { value: instance.instanceId, description: 'Created EC2 Instance ID', }); new cdk.CfnOutput(this, 'InstancePublicIpOutput', { value: instance.instancePublicIp, description: 'EC2 Instance Public IP', }); } } ソースコード②:cdk-lt-stack.ts(4/4)
35 実際に辿ってみる
36 CloudFormationコンソールにアクセス スタック名はapp.tsで渡した文字列(引数としてはid)
37 #!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import
{ CdkLtStack } from '../lib/cdk-lt-stack'; import { CdkLtStack as CdkLtStackPredeployed } from '../lib/cdk-lt-stack’; const app = new cdk.App(); new CdkLtStack(app, 'CdkLtDemoStack', {}); new CdkLtStackPredeployed(app, 'CdkLtDemoStackPredeployed', {}); cdk.Tags.of(app).add('Project', 'CDK-LT-Demo'); cdk.Tags.of(app).add('Deletion Policy', '202511'); cdk.Tags.of(app).add('CreatedBy', 'tatsuji.ho'); ソースコード①:bin/app.ts 再掲
38 #!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import
{ CdkLtStack } from '../lib/cdk-lt-stack'; import { CdkLtStack as CdkLtStackPredeployed } from '../lib/cdk-lt-stack’; const app = new cdk.App(); new CdkLtStack(app, 'CdkLtDemoStack', {}); new CdkLtStackPredeployed(app, 'CdkLtDemoStackPredeployed', {}); cdk.Tags.of(app).add('Project', 'CDK-LT-Demo'); cdk.Tags.of(app).add('Deletion Policy', '202511'); cdk.Tags.of(app).add('CreatedBy', 'tatsuji.ho'); ソースコード①:bin/app.ts 再掲
39 スタックを選択すると横に情報が出てくる
40 「リソース」タブに切り替えることでリソースを辿れる デフォルトのビューは「ツリービュー」
41 「フラットビュー」で一覧表示もできる
42 例えばMyVpcを開くと、押せそうなリンクがある その左の「論理ID」はコード上で指定した名前(id)
43 export class CdkLtStack extends cdk.Stack { constructor(scope: Construct, id:
string, props?: cdk.StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, 'MyVpc', { vpcName: 'cdk-lt-vpc', maxAzs: 2 subnetConfiguration: [ { cidrMask: 24, name: 'Public', subnetType: ec2.SubnetType.PUBLIC, }, ], }); cdk.Tags.of(vpc).add('Name', 'cdk-lt-vpc'); ソースコード②:cdk-lt-stack.ts(2/4) 再掲
44 export class CdkLtStack extends cdk.Stack { constructor(scope: Construct, id:
string, props?: cdk.StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, 'MyVpc', { vpcName: 'cdk-lt-vpc', maxAzs: 2 subnetConfiguration: [ { cidrMask: 24, name: 'Public', subnetType: ec2.SubnetType.PUBLIC, }, ], }); cdk.Tags.of(vpc).add('Name', 'cdk-lt-vpc'); ソースコード②:cdk-lt-stack.ts(2/4) 再掲
45 リンク先に飛ぶと(リソースにもよるがVPCは)一覧画面で、 物理IDによるフィルタがされている状態になる
46 従来通りその行をクリックして詳細を見れる
47 タグを確認すると、アプリケーション全体につけたタグは 個別のリソースにもついている(仕組み上のものもある)
48 #!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import
{ CdkLtStack } from '../lib/cdk-lt-stack'; import { CdkLtStack as CdkLtStackPredeployed } from '../lib/cdk-lt-stack’; const app = new cdk.App(); new CdkLtStack(app, 'CdkLtDemoStack', {}); new CdkLtStackPredeployed(app, 'CdkLtDemoStackPredeployed', {}); cdk.Tags.of(app).add('Project', 'CDK-LT-Demo'); cdk.Tags.of(app).add('Deletion Policy', '202511'); cdk.Tags.of(app).add('CreatedBy', 'tatsuji.ho'); ソースコード①:bin/app.ts 再掲
49 #!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import
{ CdkLtStack } from '../lib/cdk-lt-stack'; import { CdkLtStack as CdkLtStackPredeployed } from '../lib/cdk-lt-stack’; const app = new cdk.App(); new CdkLtStack(app, 'CdkLtDemoStack', {}); new CdkLtStackPredeployed(app, 'CdkLtDemoStackPredeployed', {}); cdk.Tags.of(app).add('Project', 'CDK-LT-Demo'); cdk.Tags.of(app).add('Deletion Policy', '202511'); cdk.Tags.of(app).add('CreatedBy', 'tatsuji.ho'); ソースコード①:bin/app.ts 再掲
50 コードで指定した通り、サブネットは2つ作られている
51 export class CdkLtStack extends cdk.Stack { constructor(scope: Construct, id:
string, props?: cdk.StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, 'MyVpc', { vpcName: 'cdk-lt-vpc', maxAzs: 2 subnetConfiguration: [ { cidrMask: 24, name: 'Public', subnetType: ec2.SubnetType.PUBLIC, }, ], }); cdk.Tags.of(vpc).add('Name', 'cdk-lt-vpc'); ソースコード②:cdk-lt-stack.ts(2/4) 再掲
52 export class CdkLtStack extends cdk.Stack { constructor(scope: Construct, id:
string, props?: cdk.StackProps) { super(scope, id, props); const vpc = new ec2.Vpc(this, 'MyVpc', { vpcName: 'cdk-lt-vpc', maxAzs: 2 subnetConfiguration: [ { cidrMask: 24, name: 'Public', subnetType: ec2.SubnetType.PUBLIC, }, ], }); cdk.Tags.of(vpc).add('Name', 'cdk-lt-vpc'); ソースコード②:cdk-lt-stack.ts(2/4) 再掲
53 少し覗いてみると、リンクになっていない物理IDもある この場合はまず、このIDをコピーする
54 コピーしたIDで、対応するサービス上で検索をかける
55 対応するサービスは「タイプ」から大まかに把握できるが、たま にVPCのように「EC2」タイプでも「VPC」サービスになる
56 こちらのリソースにも同様にタグがつけられている
57 #!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import
{ CdkLtStack } from '../lib/cdk-lt-stack'; import { CdkLtStack as CdkLtStackPredeployed } from '../lib/cdk-lt-stack’; const app = new cdk.App(); new CdkLtStack(app, 'CdkLtDemoStack', {}); new CdkLtStackPredeployed(app, 'CdkLtDemoStackPredeployed', {}); cdk.Tags.of(app).add('Project', 'CDK-LT-Demo'); cdk.Tags.of(app).add('Deletion Policy', '202511'); cdk.Tags.of(app).add('CreatedBy', 'tatsuji.ho'); ソースコード①:bin/app.ts 再掲
58 #!/usr/bin/env node import * as cdk from 'aws-cdk-lib'; import
{ CdkLtStack } from '../lib/cdk-lt-stack'; import { CdkLtStack as CdkLtStackPredeployed } from '../lib/cdk-lt-stack’; const app = new cdk.App(); new CdkLtStack(app, 'CdkLtDemoStack', {}); new CdkLtStackPredeployed(app, 'CdkLtDemoStackPredeployed', {}); cdk.Tags.of(app).add('Project', 'CDK-LT-Demo'); cdk.Tags.of(app).add('Deletion Policy', '202511'); cdk.Tags.of(app).add('CreatedBy', 'tatsuji.ho'); ソースコード①:bin/app.ts 再掲
59 他のリソースのリンクの貼られ具合はこんな感じ
60 コードの「CfnOutput」で指定した出力も見れる
61 new cdk.CfnOutput(this, 'VpcIdOutput', { value: vpc.vpcId, description: 'Created VPC
ID', exportName: 'CdkLtDemoVpcId', // 他のスタックから参照する場合の名前 }); new cdk.CfnOutput(this, 'InstanceIdOutput', { value: instance.instanceId, description: 'Created EC2 Instance ID', }); new cdk.CfnOutput(this, 'InstancePublicIpOutput', { value: instance.instancePublicIp, description: 'EC2 Instance Public IP', }); } } ソースコード②:cdk-lt-stack.ts(4/4) 再掲
62 new cdk.CfnOutput(this, 'VpcIdOutput', { value: vpc.vpcId, description: 'Created VPC
ID', exportName: 'CdkLtDemoVpcId', // 他のスタックから参照する場合の名前 }); new cdk.CfnOutput(this, 'InstanceIdOutput', { value: instance.instanceId, description: 'Created EC2 Instance ID', }); new cdk.CfnOutput(this, 'InstancePublicIpOutput', { value: instance.instancePublicIp, description: 'EC2 Instance Public IP', }); } } ソースコード②:cdk-lt-stack.ts(4/4) 再掲
63 • スタック > リソース > ビューを選択 • ツリービュー:属しているツリーがわかる/ツリーを知りたい •
フラットビュー:一覧でいち早く見つけたい/名称が不明 • 物理IDで辿る • リンクになっている:リンクを押下 • リンクになっていない: • まずIDをコピーする • タイプをもとに各サービスのコンソールに移動(必要に応じてWebで調べる) • 対応するリソースの検索窓にペーストし検索 • Outputもコンソールで閲覧可能 辿り方の整理
64 今日のゴール CloudFormationコンソールから 実際に作られたリソースを 辿れるようになる
大志ある挑戦を創造し、日本から世界へ 想いを持った挑戦者と共に走り、共に創る