Posted at

【AWS】terraformとCloudformationを比較してみた【IaC】


はじめに

クラウドのインフラの運用コストとか管理コストとかの削減のために

インフラのコード化(Infrastructure as Code)の重要性がどんどん上がってきています。

AWSでそれを実現するツールとして有名なのが

terraform、cloudformationあたりだと思います。

IaC導入したい、けどどっちを使ったらいいの?っていうのが疑問としてずっとありました。

ただ調べてもなかなか理解できなかったので

実際にどっちも使ってみて、その比較をしてみました。あくまで感想です。

今回ツールそのものの使い方については記載していません。


感想

terraform
cloudformation

OSSである。情報が多い
バージョンが上がるごとにどんどん使いやすくなっている。機能も増えている
コミュニティmoduleの存在
AWSのサービスである。サポートをしっかり受けられる

基本的にCLIで実行terraformコマンド terraform plan terraform applyだけ覚えておけばなんとかなる
基本的にGUIで実行。aws cloudformationコマンドもあるが、オプションが多いので学習コストが高い。

IAMの認証で実行する。
それぞれのローカル環境で実行することが基本のためセキュリティを意識する必要がある。
AWSで閉じられるのでセキュリティで考えることが少ない

少しずつ始められる
最初の設計が大事
stackの連携、管理する範囲をしっかり決めておく必要がある
一度stack化すると削除⇒作成という流れを踏まなければいけないため

独自のスクリプト言語(.tf)を用いる
json、yaml形式を用いる

複数プラットフォームに対応
AWSに縛られない
AWS専用サービス
他のAWSサービスと連携がスムーズ

インポートが簡単。terraform importコマンドを利用。
既存環境のインポートに弱い?
CloudFormerというツールがあるがあまりいけてない。取り込めるリソースも網羅されてない。

CI/CD始めやすい。JenkinsやCircleCI等外部ツールとも連携しやすい
Code4兄弟と連携させてCI/CD化できる。


まとめ

AWSサービスのみの利用、1から作成するのであればCloudFormation

他のクラウドも使ってる、外部ツールの利用が多い、既存環境をコード化したいのであればTerraform

個人的にはTerraformを押します。自由度が高いため。

ちなみに個人環境ではterraform + cloudformationのハイブリット構成をとっています。

IAMの管理とかセキュリティに関わる部分はcloudformationにして

VPC、EC2等インフラに関わる構成に関わる部分はterraformにしています。

間違いあったらすみません。

いろんなご意見募集します!