Help us understand the problem. What is going on with this article?

Scalaによるtype-safeなCloudFormation DSL

More than 1 year has passed since last update.

Scalaによるtype-safeなCloudFormation DSL

by mshibuya
1 / 17

自己紹介

渋谷 充宏 @m4buya

  • 株式会社オプト テクノロジー開発部 チームマネージャー
  • Ruby / Scala / インフラ
  • https://github.com/mshibuya
  • RailsAdmin/CarrierWave committer
  • ADPLAN SREチームリーダー(New!)

SREチームを立ち上げました

が、人が足りてません…

株式会社オプトではSREを含めエンジニアを積極採用中です!


アジェンダ

  • 前提知識
  • ScalaMatsuriへの応募内容
  • cloudformal
    • 特長
    • 実際のコード
  • 今後の展望
  • まとめ

前提知識

  • CloudFormationとは

JSON(やYAML)でAWSインフラが作れるやつです!


LoadBalancerを作る

"Resources" : {
  "ApplicationLoadBalancer" : {
    "Type" : "AWS::ElasticLoadBalancingV2::LoadBalancer",
    "Properties" : {
      "Subnets" : {
        "Ref" : "Subnets"
      }
    }
  }
}

条件分岐

"Size" : {
  "Fn::If" : [
    "CreateLargeSize",
    "100",
    "10"
  ]},

これ、つらくない…?

生で書くと死ぬやつなので、いろんなDSLがあります

  • kumogata
  • troposphere
  • cloudformation-template-generator
  • cloudform

ScalaMatsuriへの応募内容

cfp.png


cloudformal

https://github.com/mshibuya/cloudformal


特長

  • CloudFormationの更新に簡単に追従
  • 静的な型チェック
  • Object-Orientedなモデリング

CloudFormationの更新に簡単に追従

Cloudformalのコードの大半はAWSが公開しているCloudFormation Resource Specificationより自動生成されており、コマンド一発で追従できます。


静的な型チェック

def blockDeviceMappings: Property[Seq[BlockDeviceMapping]] = Empty
def creditSpecification: Property[CreditSpecification] = Empty
def disableApiTermination: Property[Boolean] = Empty
def ebsOptimized: Property[Boolean] = Empty
def elasticGpuSpecifications: Property[Seq[ElasticGpuSpecification]] = Empty

Object-Orientedなモデリング

trait ServerInstance extends aws.ec2.Instance {
  def image: AMIImage
  def imageId: String = image.id
}

case class BatchServerInstance(
  image: BatchServerImage
) extends ServerInstance

case class WebServerInstance(
  image: WebServerImage
) extends ServerInstance

今後の展望

  • CLIが全然しょぼいので整備したい
  • テストコード書きたい
  • ドキュメント整備したい

まとめ

  • インフラ×型安全、意外といけるのでは
  • とはいえ実用はこれから
  • 可能性を感じていただけたら、ぜひ使ってみてください!

最後に

Starお待ちしてます★

https://github.com/mshibuya/cloudformal

mshibuya
六本木でSREチームのマネージャーしてます。Ruby, Scala好き、最近はインフラ。RailsAdminとCarrierWaveのコミッタ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした