自己紹介
渋谷 充宏 @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への応募内容
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お待ちしてます★