はじめに
クラウドのインフラの運用コストとか管理コストとかの削減のために
インフラのコード化(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 コマンドを利用。 |
import機能がある。 |
CI/CD始めやすい。JenkinsやCircleCI等外部ツールとも連携しやすい | Code4兄弟と連携させてCI/CD化できる。 |
まとめ
AWSサービスのみの利用、1から作成するのであればCloudFormation
他のクラウドも使ってる、外部ツールの利用が多い、既存環境をコード化したいのであればTerraform
個人的にはTerraformを押します。自由度が高いため。
ちなみに個人環境ではterraform + cloudformationのハイブリット構成をとっています。
IAMの管理とかセキュリティに関わる部分はcloudformationにして
VPC、EC2等インフラに関わる部分はterraformにしています。
間違いあったらすみません。
いろんなご意見募集します!
追記(2019/11/18)
CloudFormationにインポート機能が追加されました。
参考:
https://dev.classmethod.jp/cloud/aws/cloudformation-import-existing-resources/
かなりイケてます。AWS強い。