Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
470
エイミは何を成したのか? - 任期中の活動を振り返る
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
70
スタートアップで高速検証するためのAmplify Gen 2 〜利便性と、ハマるS3認可や一覧画面実装の解決テンプレート〜
amixedcolor
3
190
バイブスに「型」を!Kent Beckに学ぶ、AI時代のテスト駆動開発
amixedcolor
3
1.1k
Other Decks in Technology
See All in Technology
SQL文一行も書けない人事がCortexもろもろを使って人事業務を楽にしてみる
ponponmikankan
1
230
2026-09-10 【Snowflake World Tour Tokyo 2026】dbt Core と Snowflake で実現する多層的なデータガバナンス / Multi-Layered Data Governance Powered by dbt Core and Snowflake
civitaspo
0
360
事業課題から技術的負債に向き合う
sansantech
PRO
1
500
Tab5をRubyで動くパソコンにする
kishima
2
360
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
670
クロスボーダーM&AのValue Upを支えるプロダクト開発。日米チームのハブになったプロダクトエンジニアの実践 / Product Engineering Conference 2026
genda
0
120
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
110
あるけみー式LTスライド作成術
alchemy1115
1
200
Multica × 長期記憶:40個のミニプロジェクト管理
eiei114
1
270
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
610
Gitは怖い?共有ワークスペースから始めるSnowflakeチーム開発
coco_se
0
190
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
5
510
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Typedesign – Prime Four
hannesfritz
42
3.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
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コンソールから 実際に作られたリソースを 辿れるようになる
大志ある挑戦を創造し、日本から世界へ 想いを持った挑戦者と共に走り、共に創る