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 on Scala ~ Scalaでインフラ管理してみたはなし / Manag...
Search
Takumi Kadowaki
September 25, 2020
Technology
0
4.7k
AWS CDK on Scala ~ Scalaでインフラ管理してみたはなし / Manage infrastructure with AWS CDK on Scala
https://scala-tokyo.connpass.com/event/187140/
Takumi Kadowaki
September 25, 2020
Tweet
Share
More Decks by Takumi Kadowaki
See All by Takumi Kadowaki
Datadog Error Tracking & Claude Code Action で アプリケーションエラーを(半)自動修正 / Datadog Error Tracking & Claude Code Action (semi-)auto-correct application errors
nomadblacky
1
48
Reckoner における Datadog Browser Test の活用事例 / Datadog Browser Test at Reckoner
nomadblacky
0
510
Scala アプリケーションのビルドを改善してデプロイ時間を 1/4 にした話 | How I improved the build of my Scala application and reduced deployment time by 4x
nomadblacky
1
1.2k
Reckoner の Scala プロジェクトにおける オブザーバビリティの取り組み / Observability Initiatives in Reckoner's Scala Project
nomadblacky
0
2.4k
Slinky で Scala.js 製 React Webアプリケーションを つくったはなし / How to build a Scala.js React web application in Slinky
nomadblacky
1
5.3k
面倒なことはScalaスクリプトにやらせよう / let scala scripts do the troublesome things
nomadblacky
0
1.1k
Other Decks in Technology
See All in Technology
【NGK2026S】日本株のシステムトレードに入門してみた
kazuhitotakahashi
0
170
Security Hub と出会ってから 1年半が過ぎました
rch850
0
190
toCプロダクトにおけるAI機能開発のしくじりと学び / ai-product-failures-and-learnings
rince
3
2.5k
オープンウェイトのLLMリランカーを契約書で評価する / searchtechjp
sansan_randd
0
180
メルカリのAI活用を支えるAIセキュリティ
s3h
7
4.7k
Kaggleコンペティション「MABe Challenge - Social Action Recognition in Mice」振り返り
yu4u
1
760
フロントエンド開発者のための「厄払い」
optim
0
170
習慣とAIと環境 — 技術探求を続ける3つの鍵
azukiazusa1
3
790
The Engineer with a Three-Year Cycle - 2
e99h2121
0
190
Regional_NAT_Gatewayについて_basicとの違い_試した内容スケールアウト_インについて_IPv6_dual_networkでの使い分けなど.pdf
cloudevcode
1
160
BPaaSオペレーション・kubell社内 n8n活用による効率化検証事例紹介
kubell_hr
0
290
Exadata Database Service ソフトウェアのアップデートとアップグレードの概要
oracle4engineer
PRO
1
1.2k
Featured
See All Featured
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
0
98
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
55k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.2k
What does AI have to do with Human Rights?
axbom
PRO
0
1.9k
Mobile First: as difficult as doing things right
swwweet
225
10k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
160
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
630
Statistics for Hackers
jakevdp
799
230k
The untapped power of vector embeddings
frankvandijk
1
1.5k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
440
Transcript
AWS CDK on Scala Scalaでインフラ管理してみたはなし 2020-09-25 scala.tokyo オンライン @nomadblacky
Takumi Kadowaki 株式会社セプテーニ・オリジナル所属 自称 : Full "stuck" Scala Engineer Scala
でなんでもやりたいひと おしごと : データ基盤の SRE • GitHub: NomadBlacky • Twitter: @nomadblacky Ammonite で Scala スクリプトに入門する本出しました→ だれ?
• 株式会社セプテーニ・オリジナルについて • AWS CDK の簡単な概要 • AWS CDK を
Scala プロジェクトで扱う方法 • GitLab CI を使った Continuous Deployment の実現方法 やってみたレベルの話なので深い話はあまりしません 今回話すこと
株式会社セプテーニ・オリジナルについて
セプテーニグループのシステム開発会社
セプテーニ・オリジナルの3大事業
Scalaの使いどころ • バックエンド ◦ Play Framework, Akka HTTP • データ取得バッチ
◦ Akka Stream • ETL ◦ AWS Glue (Spark) • インフラ (new??) ◦ AWS CDK
https://www.septeni-original.co.jp/recruit/ Scala エンジニアほか、 複数ポジションで採用募集中!
AWS CDK について
AWS CDK について • 既存のプログラミング言語を使って AWS のクラウドリソースを定義、 プロビジョニングするためのツール ◦ いわゆる
Infrastructure as Code • 対応言語 ◦ TypeScript, Python, .NET, Java ← Scala から使える ! • 各言語で定義したモデルが CloudFormation のテンプレートに変換される • アプリケーションを一緒にデプロイする機能 ◦ インフラのプロビジョニング → アプリケーションのデプロイ という 2 段階の手順を踏む必要がなくなる ◦ CDK のデプロイが完了した時点でアプリケーションが動作する完全な状態になる
デモ: FargateにScalaアプリをデプロイしてみる いきなり説明されても実感が湧きにくいので … まずは動くところを見てみる すぐに AWS 環境にデプロイ可能な Giter8 テンプレートを作りました
NomadBlacky/aws-cdk-scala_fargate-simple-web-app.g8 Scala で実装した Web アプリケーションを AWS Fargate にデプロイする
デモ (動画) https://youtu.be/ZRnOHKCWpdM
Scalaプロジェクトに AWS CDK を組み込む
デモプロジェクト(sbt)の例から解説 シンプルなWebアプリの実装 sbt-native-packager でDockerイメージ化 できるようにしておく
CDK用のサブプロジェクトを定義 CDKアプリケーションの実装 ここで実際のインフラリソースの 定義を行う
CDKアプリケーションのエントリポイント Stack (デプロイの単位) を複数定義できる 本番環境用Stack、 ステージング用Stack ... etc. CDK アプリケーションを実装する
Stackではリソースの定義を行う (後述)
CDK アプリケーションを実装する • VPC • Subnet • Route Table •
Internet Gateway • Application Load Balancer • Security Group • ECR Repository • ECS Cluster • ECS Service • ECS Task Definition • etc... ところで、 Fargate で Web アプリケーションを動かすのに必要なリソースは … Q: これらのリソースを定義するのにどれだけのコード量が必要 ?
A: import を含め約50行ほど CDK アプリケーションを実装する
AWS CDK では Construct Library という APIを使ってリソースを定義していく。 この Vpc は
CloudFormation のリソース定義を抽象 化した High Level Construct と呼ばれる。 VPC そのものの作成以外にも、 複数の Availability Zone に対して Public Subnet や Private Subnet の作成も行ってくれる。 ECS Cluster の定義 リソース定義に必要な設定などは Props として引数に 渡す。 CDK アプリケーションを実装する
Fargate の定義 ApplicationLoadBalancedFargateService は Patterns と呼ばれる、一般的なインフラの パターンが定義された API。 ここでは ALB,
Service, TaskDefinition など、 冗長化構成となるようなリソースを 一括で定義することが可能。 CDK アプリケーションを実装する
Fargate で動作させるコンテナの設定 Assets と呼ばれるローカルのファイルなどのリ ソースをデプロイに含めることのできる機能。 ここでは Dockerfile のあるディレクトリを指定し ている。 これによりデプロイ時に、
コンテナのビルド、ECRへコンテナのプッシュな どをCDK側でよしなに行ってくれる sbt-native-packager で生成されたDockerfile を指定している CDK アプリケーションを実装する
GitLab CI による Continuous Deployment の実現
GitLab CI による Continuous Deployment の実現 GitLab CI でデプロイを自動化したい おおまかな手順
• アプリケーションのビルド • インフラの差分を確認 • インフラおよびアプリのデプロイ
アプリケーションのビルド sbt-native-packager の機能を使う DockerコンテナのビルドはCDK側で行うため Dockerfile までを出力する docker:stage コマンドを使う 生成した Dockerfile
を後続のジョブで使えるよう artifacts として保存しておく
インフラの差分を確認 npm install でCDKのCLIをインストール (package.json にCLIの依存を含めている ) cdk diff コマンドで現在デプロイされている
状態との差分を確認する
インフラの差分を確認 ・CDK アプリケーション(Java) ・CDK CLI (Node.js) ・Docker が動作するコンテナを CI上で別途作成している CI
で CDK を実行させるためのコンテナを CI で用意
インフラの差分を確認
インフラおよびアプリのデプロイ Dockerイメージのビルドを行うので Dockerデーモンにアクセスできるよう設定 cdk deploy コマンドで インフラとアプリをデプロイする
デプロイパイプラインを構築できた
まとめ 長所・良かったところ • AWS CDK は既存のプログラミング言語を用いた Infrastructure as Code ◦
Java に対応している、すなわち Scala でも使える ! • 抽象化されたモデルにより、少ないコードで必要なインフラリソースを定義できる ◦ 約 50 行ほどのコードで AWS Fargate を使った Web アプリのインフラを作れた • 静的型付けなのでリソース定義に必要なプロパティがわかりやすい ◦ リソース間の依存関係が型で表現されており、 普段の Scala プログラミングの感覚でインフラ定義が書けるため理解がはかどった
まとめ 短所・悪かったところ • ビルダーパターンを使ったインフラ定義が少し冗長 ◦ ラッパーライブラリや jsii の Scala 対応が来れば状況は変わる
…? • Java 版は新機能やユーザ製の Constructs ライブラリの提供が遅い ◦ プライマリの言語は TypeScript なため • 環境構築が少し面倒 ( 特に CI 環境 で ) ◦ CDK をフルで動かすには JVM, Node, Docker が動く環境が必要 ▪ いい方法あったら教えてください …