過去に開発したプロジェクトの一部機能のLambda化を進めています。
その際にインフラを管理するIaC(Infrastructure as Code)を何にするか。
最終的にはTerraformを選択しました。その決めたポイントを書きます。
IaC候補
Terraform
HashiCorp社が提供するOSS。IaCのデファクトスタンダード。
HCLにてtfファイルを記述する。
SAM(AWS Serverless Application Model)
AWSが提供するSeverlessを構築するためのIaCフレームワーク。
CloudFormation記述で定義する。
Pulumi
普段使っているプログラミング言語でインフラが定義できる。
Terraformに決めた理由
Terraformさえ使えればAWSやGCP、Azureも定義でき、言語にも左右されない汎用さが魅力。
リソースをきっちり定義しないといけないが、ちゃんとすべて把握している事は大事。
インフラだけ定義し、アプリケーションのデプロイはawsコマンドを使用してインフラ定義後は疎結合にできる。
利用者が多く情報が多い。あと、マニュアルが見やすく定義したいリソースが探しやすい。
SAMの所感
Lambdaを構築する場合はSAMで定義ほうが記述量も少なく簡潔に書けるが、定義していないリソースも勝手に作られてしまう。
CloudFormationの記述方法で書ける、しかし細やかな定義はCloudFormationを使うことになる。
AWS用に作られているためAWSにロックインしてしまう。
インフラとアプリケーションが密結合になりやすいと感じた。
Pulumiの所感
好きな言語でインフラを定義できることは魅力的ではあるが、数種類の言語を使うことが多いため、プロジェクトによって定義する言語が異なってしまい秩序が保たれないと感じた。