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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takumi Kadowaki
September 25, 2020
Technology
4.8k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS CDK on Scala ~ Scalaでインフラ管理してみたはなし / Manage infrastructure with AWS CDK on Scala
https://scala-tokyo.connpass.com/event/187140/
Takumi Kadowaki
September 25, 2020
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
140
Reckoner における Datadog Browser Test の活用事例 / Datadog Browser Test at Reckoner
nomadblacky
0
580
Scala アプリケーションのビルドを改善してデプロイ時間を 1/4 にした話 | How I improved the build of my Scala application and reduced deployment time by 4x
nomadblacky
1
1.3k
Reckoner の Scala プロジェクトにおける オブザーバビリティの取り組み / Observability Initiatives in Reckoner's Scala Project
nomadblacky
0
2.7k
Slinky で Scala.js 製 React Webアプリケーションを つくったはなし / How to build a Scala.js React web application in Slinky
nomadblacky
1
5.4k
面倒なことはScalaスクリプトにやらせよう / let scala scripts do the troublesome things
nomadblacky
0
1.2k
Other Decks in Technology
See All in Technology
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
6
2.2k
JavaScript 研修 (2026)
recruitengineers
PRO
1
460
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
200
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
3
1.2k
メルカリのグローバルアプリで挑んだ AlloyDB 運用と課題解決の実践記
hatappi
0
240
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
450
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
420
個人OSSが、机の上から世界に広がるまでの話
shinyasaita
1
370
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.1k
名古屋の市バスGTFS-JPデータ×スガキヤ 最寄りバス停検索をAmazon ElastiCache Serverless for Valkeyで最適化する
usanchuu
1
490
Digitization部 紹介資料
sansan33
PRO
2
7.7k
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
5
1.4k
Featured
See All Featured
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
630
Believing is Seeing
oripsolob
1
180
Designing Experiences People Love
moore
143
24k
Practical Orchestrator
shlominoach
191
12k
エンジニアに許された特別な時間の終わり
watany
108
250k
How to train your dragon (web standard)
notwaldorf
97
6.7k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
520
Exploring anti-patterns in Rails
aemeredith
3
460
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
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 が動く環境が必要 ▪ いい方法あったら教えてください …