AKIBA.AWS ONLINE #03 -「TerraformとCloudFormationどちらを採用すべき?」というタイトルで登壇しました

2021.05.19

こんにちは(U・ω・U)
AWS事業部の深澤です。

タイトルの通りですが、AKIBA.AWS ONLINE #03 -「TerraformとCloudFormationどちらを採用すべき?」というタイトルで登壇してきましたので資料を公開します。

資料

まとめ

まずは大前提として状況と比較しましょう。新しい技術にはどうしても学習コストが伴います。新しくて最新の技術がチームにとって必ずしも最適解であるとは限りません。また作って終わりではなく運用が大切です。それぞれの特徴をチームで理解し運用していけるかというのも大切な観点です。

発表で取り上げた観点と特徴を表にまとめるとこんな感じです。

観点 Terraform Cloudformation
異なるリージョンへのデプロイ デプロイ先に応じてProviderを用意する Stack SetsというAWSの機能がある
異なるIaaSへのデプロイ AWS以外にもAzureやGCPにもデプロイ可能 AWSのみ
差分検出 コマンドで行うので自動化するならコーディングが必要 ドリフト検出というAWSの機能を使い、ノーコードで通知まで作れる
ロジック 構造体を取りながらの繰り返し処理といったプログラミングのような記述が可能 関数が用意されており単純な分岐処理は行えるが複雑な処理は不向き
排他制御 Stateの置き場所によってはDynamoDB lockを用いることができる 実行中はCREATE_IN_PROGRESSステータスになり変更不可になる
バージョン管理 Terraform本体とProviderのバージョン管理が必要 AWSサービスなので考慮する必要なし
開発ツール コマンドオプションで自動補正可能。linterやVSCode、Pycharmのプラグインがある linterツールとVSCodeのプラグインがある

上記のTerraformとCloudformationの特徴、それぞれ比較し違いをまとめました。

  • Cloudformation
    • 複雑な処理の記述は難しい
      • あまり複雑にしてしまうと見にくくなることも(個人的な経験)
    • AWSとの親和性が高く、関連サービスも多い
      • 異なるリージョンへのデプロイ、環境との乖離検出等
  • Terraform
    • 同じ構文で違うIaaSにデプロイできる
      • Providerが切り替えられる故のメリット
    • 構文やバージョン管理がプログラミング言語に近い
      • プログラム経験のある方は馴染みやすいかも

両者ともそれぞれメリットデメリットがあるので僕も検討する際はとても慎重になります。皆さんが悩まれた際の手助けになれば幸いです。皆さんの素敵な IaCライフを応援してます!

以上、深澤(@shun_quartet)でした!

資料の中で紹介した参考リンク

  • StackSets

  • Terrafrom Provider

  • ドリフト検出

  • Terraform Planコマンド

  • Terraform Stateの置き場所について(Backend)

  • TerraformのState lockについて

  • Cloudformationのテンプレートバージョン

  • tfenv

  • Providerのバージョン指定(Provider Requirements)

  • Dependency Lock File

  • Cloudformationのlintツール

  • CloudformationのVSCodeプラグイン

  • Terraformの構文自動補正コマンド

  • Terraformのlintツール

  • Terraformのコードセキュリティチェック