近年、インフラをコード化する技術であるIaCの手段として、CloudFormationとTerraformが注目を集めています。
ですが、CloudFormationとTerraformにはそれぞれに特徴があり、どちらを選択すべきか悩む場合も多いでしょう。
そこで、本記事ではCloudFormationとTerraformの特徴や、どのような場合にどちらのツールを使用すべきかを判断するための基準についてお伝えします。
そもそもIaCとは
まずは、IaCについて説明します。
IaCとは「Infrastructure as Code」の略で、サーバーなどのシステムインフラの構築を、コードを用いて行うことを表します。このIaCを利用することで、必要なソフトウェアのインストールや、各種設定を自動的に行えるようになります。
IaCのメリットとデメリットとしては、以下のものがあげられます。
IaCのメリット |
|
---|---|
IaCのデメリット |
|
CloudFormationとは
CloudFormationはプログラミング言語やテキストファイルを使用してAWSリソースを自動で構築するIaCツールです。
CloudFormationでは、JSON/YAML形式のテキストファイルであるテンプレート(設計図)を使用するため、プログラミングコードが書けなくても使用できます。一方で、プログラミング的な書き方ができないため、たとえば100個同じものを作成するような場合、100個同じものを並べる必要があります。
ただし、AWS CDKを使えばその問題も解決できます。
AWS CDKとは、AWS上のリソースをコンポーネント化して提供し、AWS上でのアプリケーション開発を支援するサービスです。プログラミング言語で書いたコードが、CloudFormationのリソースとして出力されます。
AWS CDKでは、一般的なCloudFormationのように明示的にすべてのリソースを記述できるほか、数行で複数のリソースを作れるモジュールも提供されています。なお、AWS CDKはJavaScript、TypeScript、Python、Java、C#で利用が可能です。
Terraformとは
Terraformとは、HashiCorp社が手がけるオープンソースのIaCツールです。
Providerを独自で用意することができ、HCL(HashiCorp Configuration Language)でインフラを記述します。AWS以外にもGCP、Azure、DigitalOcean、CloudFlareなどが対応しています。
ですが、ローカルPCなどのマシン上で実行するため、キーの管理を検討する必要があります。
CloudFormationとTerraformのメリットとデメリット
CloudFormation | Terraform | 備考 | |
---|---|---|---|
UI | ◯ | △ | CloudFormation:
Terraform:
|
異なるリージョンへのデプロイ | ◯ | △ | CloudFormation:
Terraform:
|
異なるIaaSへのデプロイ | × | ○ | CloudFormation:
Terraform:
|
差分検出 | ◯ | △ | CloudFormation:
Terraform:
|
ロジック | ◯ | △ | CloudFormation:
Terraform:
|
排他制御 | ◯ | △ | CloudFormation:
Terraform:
|
バージョン管理 | × | ◯ | CloudFormation:
Terraform:
|
開発ツール | ◯ | ◯ | CloudFormation:
Terraform:
|
状態の管理 | ◯ | △ | CloudFormation:
Terraform:
|
リソースのタグ付け | ◯ | △ | CloudFormation:
Terraform:
|
変更内容のチェック | △ | ◯ | CloudFormation:
Terraform:
|
一部リソースの再作成 | △ | ○ | CloudFormation:
Terraform:
|
適用失敗時のロールバック | ◯ | × | CloudFormation:
Terraform:
|
手動作成リソースの取り込み | ◯ | △ | CloudFormation:
Terraform:
|
なお、CloudFormationとTerraformを選ぶ際には、以下の基準に照らし合わせる必要があります。
- 納品物として指定があるか
- 採用した技術の特性をチームで理解し運用していけるか
- それぞれのメリット、デメリットが案件にマッチしているか
まとめ
今回は、CloudFormationとTerraformについて解説しました。
Terraformのすごい部分は、アプリはGCP、データベースはAWSといったように、異なるプラットフォームのサービスを組み合わせたインフラ構成の実現ができるところにあります。
しかしながら、AWSのみで構築する場合にはAWSの手厚いサポートを受けられるという大きなメリットがあるため、普段使用するサービスとしてはCloudformationのみで十分だと思います。
そのため、記事内でも述べましたが、案件の状況に合わせて使用するサービスを選定しましょう。