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
AWSインフラのデプロイをCDKでカイゼンする/2022-03-23-llt25
Search
Satoshi SAKAO
March 23, 2022
Programming
0
78
AWSインフラのデプロイをCDKでカイゼンする/2022-03-23-llt25
社内のLTイベント「えるLT Vol.25 オンライン」で発表した資料です
Satoshi SAKAO
March 23, 2022
Tweet
Share
More Decks by Satoshi SAKAO
See All by Satoshi SAKAO
Testcontainers/2024-11-20-llt32
ottijp
0
37
Pkl/2024-04-17-llt31
ottijp
0
70
JavaScriptのデバッグ/2023-09-04-llt30
ottijp
0
140
CDK for TerraformでAzureリソースをデプロイする/2023-05-15-llt29
ottijp
1
240
TWELITEへの誘い/2022-12-27-llt28
ottijp
0
140
ビルドツールBazelを触ってみた/2022-09-28-llt27
ottijp
0
140
HashiCorp Vaultを使ったシークレットのセキュアな一元管理 〜Ansibleを添えて〜/2022-07-12-llt26
ottijp
0
130
Amazon Timestreamでデータ補間/2021-12-27-llt24
ottijp
0
94
ncurses/2021-05-12-llt21
ottijp
0
200
Other Decks in Programming
See All in Programming
Going Structural with Named Tuples
bishabosha
0
200
メモリウォールを超えて:キャッシュメモリ技術の進歩
kawayu
0
1.9k
Django for Data Science (Boston Python Meetup, March 2025)
wsvincent
0
320
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
0
500
AHC045_解説
shun_pi
0
480
PHPで書いたAPIをGoに書き換えてみた 〜パフォーマンス改善の可能性を探る実験レポート〜
koguuum
0
140
アプリを起動せずにアプリを開発して品質と生産性を上げる
ishkawa
0
2.6k
Compose Hot Reload is here, stop re-launching your apps! (Android Makers 2025)
zsmb
1
480
AWS で実現する安全な AI エージェントの作り方 〜 Bedrock Engineer の実装例を添えて 〜 / how-to-build-secure-ai-agents
gawa
8
710
自分のために作ったアプリが、グローバルに使われるまで / Indie App Development Lunch LT
pixyzehn
1
150
英語 × の私が、生成AIの力を借りて、OSSに初コントリビュートした話
personabb
0
190
「”誤った使い方をすることが困難”な設計」で良いコードの基礎を固めよう / phpcon-odawara-2025
taniguhey
0
120
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.1k
GitHub's CSS Performance
jonrohan
1030
460k
Navigating Team Friction
lara
184
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
41
2.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.4k
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.2k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Testing 201, or: Great Expectations
jmmastey
42
7.4k
Stop Working from a Prison Cell
hatefulcrawdad
268
20k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.5k
Transcript
AWSインフラのデプロイをCDKでカイゼンする Satoshi SAKAO えるLT Vol.25 2022-03-23 1
話すひと 2 🏢 インフォコム株式会社 品質マネジメント推進室 👨🔧 ソフトウェアエンジニア 🛠 Node.js /
AWS / IoT / iOS (Swift) 💖 猫,テクテクライフ(ランク: 24) Satoshi SAKAO @ottijp
3 3 months have passed
Disclaimer • CloudFormationの話が出てきますが, 実はほとんど触ったことがないので, 多少間違っている部分があるかも. 間違ってたら誠にごめんなさい. 4
AWSインフラのデプロイ方法 • マネジメントコンソール • CLI, SDK • CloudFormation • CDK
(Cloud Development Kit) 5
AWSインフラのデプロイ方法 6 マネジメント コンソール CLI, SDK Cloud- Formation CDK GUI
x IaCʢ܁Γฦ͠ੑ, ࠶ݱੑʣ x x x એݴతΞϓϩʔν ϦιʔεηοτʢStackͷཧʣ x x ߴϨϕϧͳఆٛ x CloudFormation ⊆ CDK
CDK (Cloud Development Kit) • 宣言的アプローチのIaCのひとつ • 使い慣れたPG言語で定義できる • 内部でCloudFormationテンプレートを生成してデプロイする
• 高いレベル(抽象度)でインフラを定義できる • OSSとして公開されている 7
CDKによるAWSインフラ構築例 • Minecraftサーバを立てた • 誰かがログインしたら通知が来てほしい 8
構成 9
CDKのコード 10 // ログアップロード用のユーザ const minecraftServer = new iam.User(this, 'MinecraftServer');
// ログ解析用のファンクション const lambdaFunction = new lambda.Function(this, 'minecraft-join-notifier', { runtime: lambda.Runtime.NODEJS_14_X, handler: 'minecraft-join-notifier.handler', code: lambda.Code.fromAsset('resources'), environment: { SLACK_WEBHOOK_URL: this.node.tryGetContext('slackWebhookUrl') as string, DISCORD_WEBHOOK_URL: this.node.tryGetContext('discordWebhookUrl') as string, }, }); // ログアップロード先キュー const queue = new sqs.Queue(this, 'MinecraftLog', { fifo: true, contentBasedDeduplication: true, }); queue.grant(minecraftServer, 'sqs:SendMessage'); // キューとファンクションの結合 const eventSource = new lambda_event_sources.SqsEventSource(queue); lambdaFunction.addEventSource(eventSource); IAMポリシというリソースを 意識する必要がない リソースを特定するIDを 意識する必要がない オブジェクトを作る感覚で リソースを定義できる https://github.com/ottijp/minecraft-man/blob/main/lib/minecraft-man-stack.ts
話したこと CDKを使うことで,AWSインフラのデプロイを • 宣言的なIaCで • 高レベルに • 好きなPG言語で 実現する方法へカイゼンできる. 11
勧誘(Java版) 12
13 Appendix
SAMとの違い • どちらもCloudFormationにトランスレーションしてデプロイする • SAMはサーバレスアプリケーションに特化しており,ローカルでビルド,テストできる • CDKはサーバレスに限らずAWSの全リソースのデプロイを汎用的に可能だが, ローカルでのビルド,テストはサポートしていない • 両者の統合
• 正式な統合はパブリックプレビュー中 • SAMを併用することでサーバレスアプリケーションをローカルでビルド,テストできる • CDKでsynthして作られたロジカルIDを指定して,SAMコマンドを実行する • https://docs.aws.amazon.com/cdk/v2/guide/sam.html 14
CDKがすべてのユースケースにおいて最適解なのか? • No.それぞれに利点があるのでユースケースに合わせて選択することが必要 • マネジメントコンソール • はじめて使うときに,GUIでどんなオプションがあるのか見ながら簡単にできる • CLI, SDK
• インフラのデプロイ以外のAPIコール(データ参照など) • カスタムスクリプトによる特殊なデプロイの構成 • CloudFormation • 低レベルな調整が必要な構成 • (ただ,CDKで基本ラップされているので,CloudFormationに限っては 互換性の課題がなければCDKに優先して採用する理由は無い気がする) 15
CDKはCloudFormation以外にも対応している • cdktf • Terraform HCL ステートファイルの定義 • alpha release
• cdk8s • Kubernetes 構成の定義 • alpha release 16
CodePipelineとの統合 • 公式ドキュメントには見つからなかった • SAMが一般的にCodeBuildでやるようなので,同様かな? 17
今回の例で作成されるリソース 18
refs • aws/aws-cdk: The AWS Cloud Development Kit is a
framework for defining cloud infrastructure in code • https://github.com/aws/aws-cdk • AWS クラウド開発キット – アマゾン ウェブ サービス • https://aws.amazon.com/jp/cdk/ • IaC (Infrastructure as Code) とは • https://www.redhat.com/ja/topics/automation/what-is-infrastructure-as-code-iac • ottijp/minecraft-man • https://github.com/ottijp/minecraft-man 19