📘

IaCツールの比較

2022/11/29に公開

比較するツール

  • Cloudformation
  • Terraform
  • CDK for Cloudformation
  • CDK for Terraform

注意:現時点での比較です(2022/11/29)!

どれも新しく開発がかなり活発なので、あくまで現時点での情報です

  • Cloudformation: 2011年リリース
  • Terraform: v1がGA(一般提供)になったのは2021年
  • CDK for Cloudformation: v1がGAになったのは2019(goサポートは2022/6にGA)
  • CDK for Terraform: 2022/8リリース

CDK登場以前

Terraform Cloudformation
言語 HCL yaml (awsのif用の構文あり)
柔軟性、拡張性 ×
aws以外のパブリッククラウドへの対応(GCP,azureなど) ×
ステート管理の有無
学習コスト
  • ステートとは

    作成済のリソースが記述されているファイル

言語ごとの特徴

  • HCL

    • シンプルはloopやifは書ける

    • 複雑なロジックの記述は難しい

      resource "aws_s3_bucket" "sample" {
        bucket = "sample-bucket"
      
        versioning {
          enabled = true
        }
      }
      
  • yaml

    • loopなし(ifはawsが組み込みで提供してくれている)

      Resources:
        SampleBucket:
          Type: AWS::S3::Bucket
          Properties:
            BucketName: SampleBucket
      

CDK for Cloudformation登場以後

Terraform Cloudformation CDK for Cloudformation
言語 HCL yaml typescript,go,javascript,python,java,C#
マルチプラットフォーム対応(aws,gcp,azureなど) × ×
柔軟性、拡張性 ×
ステート管理
学習コスト 言語の学習コスト:低〜中、Cloudformationの学習コスト:低
情報量

CDK(go)とcoudformation,terraformの関係

  • CDK for Cloudformation ⇒ Cloudformationにコンパイルされる
  • CDK for Terraform ⇒Terraformにコンパイルされる
  • コードだけ見ると別物に見えるが、実行される言語は同じ

CDK for Terraform登場以後

背景

  • 開発元
    • cloudformation,cdk(for Cloudformation)はaws製
    • terraformはHashicorp社製
    • Hashicorp社とawsが共同開発したのがCDK for Terraform
Terraform Cloudformation CDK for Cloudformation CDK for Terraform
言語 HCL yaml typescript,go,javascript,python,java,C# typescript,go,python,java,C#
マルチプラットフォーム対応(aws,gcp,azureなど) × ×
柔軟性、拡張性 ×
ステート管理
学習コスト 言語の学習コスト:低〜高、Cloudformationの学習コスト:低 Terraformの学習コスト:低
情報量

どのツールを採用するのが良さそうか

すでにIaCツールを触っている人

Terraform,Cloudformationを半年ずつ触ってきた私の場合...(もちろんケースバイケースですが…)

  • CDKに挑戦していきたい
    • 情報量が少ないため、採用前に特殊な要件がないか確認
    • 参考になる情報、記事が十分にあるか下調べが必要
  • Terraformを選んでおくのが無難そう
    • 競合になるCloudformation単体だと、yaml(Cloudformation)は表現力が足りなすぎると感じてしまう
    • 情報量が多い
    • 拡張性も基本的には困らない

初めに触るツールを選ぶ人

個人的にはTerraform推しです

難易度順

  1. Cloudformation
  2. Terraform
  3. CDK for Cloudformation
  4. CDK for Terraform

判断基準

  • インフラをコード化するメリット > 各ツールの差 → Cloudformation
  • Terraformはいきなり入って困るほど難しくはないし、拡張性も高い
  • 下2つは現状ドキュメントなどが上の2つに依存するので、最初に使うツールとしては難しそう…

Discussion