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
310
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
450
エイミは何を成したのか? - 任期中の活動を振り返る
amixedcolor
1
200
インプットと「セットで」考えるアウトプットのすすめ
amixedcolor
0
99
enPiTとアジャイルと新規事業開発 − enPiT出身のエンジニアが株式会社Relicで成していること、この先成そうとしていること
amixedcolor
1
140
新規事業開発でのAWS活用
amixedcolor
1
290
Outputをもう一歩先へ 〜あなたの現在地に合わせた、量や質など「もう一歩先の」Output〜
amixedcolor
3
470
コラボセッション 〜地元の若手とJr.Championsで、「活動の原点」を語る〜
amixedcolor
0
61
スタートアップで高速検証するためのAmplify Gen 2 〜利便性と、ハマるS3認可や一覧画面実装の解決テンプレート〜
amixedcolor
3
190
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
3
1k
Other Decks in Technology
See All in Technology
Service Connect 上のサービスに ECS Service の外側から到達できなかった話
ota1022
1
120
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
120
MIRU 2026 チュートリアル
keisuke198619
0
810
【CEDEC2026】『Relink』を拡張せよ - 『GRANBLUE FANTASY: Relink - Endless Ragnarok』の開発速度と品質を守るCI運用
cygames
PRO
0
120
『モンスターストライク』 の運営に伴走する! データ民主化への 解析グループの3つのアプローチ
mixi_engineers
PRO
0
230
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
280
Pavlokで始める電撃駆動開発
sgrsn
0
170
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
1
340
NetBoxを利用した作業効率化の試み_NetDevNight4
tnoha
0
460
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
440
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
180
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
The Cult of Friendly URLs
andyhume
79
7k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
430
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
480
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Mind Mapping
helmedeiros
PRO
1
300
Building Adaptive Systems
keathley
44
3.2k
The Mindset for Success: Future Career Progression
greggifford
PRO
0
440
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
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コンソールから 実際に作られたリソースを 辿れるようになる
大志ある挑戦を創造し、日本から世界へ 想いを持った挑戦者と共に走り、共に創る