Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AWS CDK on Scala ~ Scalaでインフラ管理してみたはなし / Manage infrastructure with AWS CDK on Scala

KADOWAKI Takumi
September 25, 2020

AWS CDK on Scala ~ Scalaでインフラ管理してみたはなし / Manage infrastructure with AWS CDK on Scala

KADOWAKI Takumi

September 25, 2020
Tweet

More Decks by KADOWAKI Takumi

Other Decks in Technology

Transcript

  1. Takumi Kadowaki 株式会社セプテーニ・オリジナル所属 自称 : Full "stuck" Scala Engineer Scala

    でなんでもやりたいひと おしごと : データ基盤の SRE • GitHub: NomadBlacky • Twitter: @nomadblacky Ammonite で Scala スクリプトに入門する本出しました→ だれ?
  2. • 株式会社セプテーニ・オリジナルについて • AWS CDK の簡単な概要 • AWS CDK を

    Scala プロジェクトで扱う方法 • GitLab CI を使った Continuous Deployment の実現方法 やってみたレベルの話なので深い話はあまりしません 今回話すこと
  3. Scalaの使いどころ • バックエンド ◦ Play Framework, Akka HTTP • データ取得バッチ

    ◦ Akka Stream • ETL ◦ AWS Glue (Spark) • インフラ (new??) ◦ AWS CDK
  4. AWS CDK について • 既存のプログラミング言語を使って AWS のクラウドリソースを定義、 プロビジョニングするためのツール ◦ いわゆる

    Infrastructure as Code • 対応言語 ◦ TypeScript, Python, .NET, Java ← Scala から使える ! • 各言語で定義したモデルが CloudFormation のテンプレートに変換される • アプリケーションを一緒にデプロイする機能 ◦ インフラのプロビジョニング → アプリケーションのデプロイ という 2 段階の手順を踏む必要がなくなる ◦ CDK のデプロイが完了した時点でアプリケーションが動作する完全な状態になる
  5. 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: これらのリソースを定義するのにどれだけのコード量が必要 ?
  6. AWS CDK では Construct Library という APIを使ってリソースを定義していく。 この Vpc は

    CloudFormation のリソース定義を抽象 化した High Level Construct と呼ばれる。 VPC そのものの作成以外にも、 複数の Availability Zone に対して Public Subnet や Private Subnet の作成も行ってくれる。 ECS Cluster の定義 リソース定義に必要な設定などは Props として引数に 渡す。 CDK アプリケーションを実装する
  7. Fargate の定義 ApplicationLoadBalancedFargateService は Patterns と呼ばれる、一般的なインフラの パターンが定義された API。 ここでは ALB,

    Service, TaskDefinition など、 冗長化構成となるようなリソースを 一括で定義することが可能。 CDK アプリケーションを実装する
  8. Fargate で動作させるコンテナの設定 Assets と呼ばれるローカルのファイルなどのリ ソースをデプロイに含めることのできる機能。 ここでは Dockerfile のあるディレクトリを指定し ている。 これによりデプロイ時に、

    コンテナのビルド、ECRへコンテナのプッシュな どをCDK側でよしなに行ってくれる sbt-native-packager で生成されたDockerfile を指定している CDK アプリケーションを実装する
  9. GitLab CI による Continuous Deployment の実現 GitLab CI でデプロイを自動化したい おおまかな手順

    • アプリケーションのビルド • インフラの差分を確認 • インフラおよびアプリのデプロイ
  10. まとめ 長所・良かったところ • AWS CDK は既存のプログラミング言語を用いた Infrastructure as Code ◦

    Java に対応している、すなわち Scala でも使える ! • 抽象化されたモデルにより、少ないコードで必要なインフラリソースを定義できる ◦ 約 50 行ほどのコードで AWS Fargate を使った Web アプリのインフラを作れた • 静的型付けなのでリソース定義に必要なプロパティがわかりやすい ◦ リソース間の依存関係が型で表現されており、 普段の Scala プログラミングの感覚でインフラ定義が書けるため理解がはかどった
  11. まとめ 短所・悪かったところ • ビルダーパターンを使ったインフラ定義が少し冗長 ◦ ラッパーライブラリや jsii の Scala 対応が来れば状況は変わる

    …? • Java 版は新機能やユーザ製の Constructs ライブラリの提供が遅い ◦ プライマリの言語は TypeScript なため • 環境構築が少し面倒 ( 特に CI 環境 で ) ◦ CDK をフルで動かすには JVM, Node, Docker が動く環境が必要 ▪ いい方法あったら教えてください …