IaCツールを理解する:CloudformationとTerraform

公開: 2022-03-10

AWS CloudFormationとTerraform–どちらを選択すればよいかわからない? この記事は、賢明な決断を下すのに役立ちます。

クラウドコンピューティングは、DevOpsの世界に革命をもたらしました。 それはもはや単なる流行語ではありません。 それはここにあり、アプリケーションの開発と保守の方法を変えるためにここにあります。 あらゆる規模のビジネスにクラウドコンピューティングを使用する必要がある理由は無数にありますが、わずかな制限がありますが、インフラストラクチャを手動でプロビジョニングする必要があります。

クラウドプロバイダーのコンソールに移動して、必要なものを正確に伝える必要があります。 これは小さなユースケースではうまく機能しますが、コンソールで構成を変更する人が異なる場合はどうでしょうか。 最終的には、保守がますます困難になる非常に複雑なインフラストラクチャになってしまう可能性があります。 クラウドのインフラストラクチャへの変更を共同で追跡したり、追跡したりする効率的な方法はありません。 まあ、実際にあります。 コードとしてのインフラストラクチャ。

コードとしてのインフラストラクチャは、クラウドコンピューティングで非常に一般的な用語です。 これは、コードを使用してITインフラストラクチャを管理するプロセスです。 はいそうです。 コンソールに移動してすべてを手動で行う代わりに、 コードとしてのインフラストラクチャ(別名IAACまたはIAC)を使用すると、構成ファイルを記述して、クラウドインフラストラクチャをプロビジョニングできます。 IACは、一貫性、簡単で迅速なメンテナンス、人的エラーの余地がないなどの利点を提供します。

アマゾンウェブサービスでのIACの使用

AWSは、世界をリードするクラウドコンピューティングサービスであり、次のクラウドプロバイダーの2倍の市場シェアを誇っています。 AWSには、数百、数千のユースケースに対応できる200を超えるサービスがあります。

AWSでIACの使用を開始するときは、多くの場合、AWSCloudFormationとオープンソースツールのTerraformに選択肢を絞り込みます。 2つのツールのどちらかを選択しようとすると、両方のツールが提供する多数の機能を理解するのは非常に困難です。 この記事では、AWS CloudFormationとTerraformの違いを見て、ニーズに適したツールを決定するのに役立てます。

TerraformとAWSCloudFormation:違い

モジュール性

大規模な組織でIACを使用する場合、モジュール性は適切なツールを選択するための大きな要因になる可能性があります。

CloudFormation

CloudFormationは、モジュールをネイティブでサポートしていません。 これにより、ネストされたスタックと呼ばれるものをモジュールとして使用できます。

たとえば、組織でS3バケットをプロビジョニングする方法の標準構成を設定できます。 したがって、S3バケットを作成する標準のCloudFormationテンプレートを作成します。 これで、エンドユーザーがS3バケットを作成したい場合、このCloudFormationテンプレートをネストされたスタックとして使用して、標準のS3バケットを作成できます。

AWSのあまり知られていないサービスであるAWSServiceCatalogもあり、AWSCloudFormationのモジュール性を支援します。 サービスカタログは、コンプライアンス、セキュリティ、コスト、またはパフォーマンスの要件を満たすためにAWSサービスの範囲を制限したい組織向けに特別に設計されたAWSサービスです。 そして、何を推測しますか? AWS Service Catalogは、バックエンドでCloudFormationテンプレートを使用します。

例を挙げて、これを簡単に理解しましょう。 S3バケットは、適切に使用されない場合、すぐに機密データに壊滅的な影響を与える可能性があります。 同じ例を見てみましょう。組織でS3をどのように使用するかについての標準的な方法が必要です。 最初のオプションは、ネストされたスタックテンプレートを作成することです。これは、他のCloudFormationスタック内で使用でき、同様に優れています。

ユーザーがこの標準テンプレートをネストされたスタックとして使用する必要がない場合は、AWSサービスカタログを使用できます。 サービスカタログを使用すると、ユーザーはコンソールのUIからこの標準テンプレートを使用し、わずかなカスタマイズのためにいくつかのパラメーターを指定できます。 これにより、AWSアカウントでインフラストラクチャをプロビジョニングする方法を制御し、不要なシナリオを防ぐことができます。

テラフォーム

Terraformはモジュールをネイティブでサポートしています。 これにより、AWS CloudFormationのような標準構成を作成し、他のテラフォーム構成で使用できます。

Terraformはオープンソースツールであるため、Terraformレジストリでいくつかの既成のオープンソースモジュールを見つけて使用することもできます。 独自の構成で独自のモジュールを作成し、プライベートモジュールレジストリでホストすることもできます。

個人的には、モジュール性が大きな要件である場合は、CloudFormationよりもTerraformを使用したいと思います。

CloudFormationでネストされたスタックを使用することは、Terraformでモジュールを使用することほど簡単ではありません。 主な要因は、CFNテンプレートからネストされたスタックへのデータの受け渡しがかなり複雑になる可能性があることです。

CloudFormationテンプレートを共有できる標準的な場所はありません。 AWSサービスカタログがありますが、これは、コンソールを介してインフラストラクチャを作成するためのいくつかのルールを適用するための方法にすぎません。 私たちはすべてコードについてです。 サービスカタログを使用する場合、一部の複雑なタスクはCloudFormationファイルによってカプセル化されますが、インフラストラクチャを作成するには、コンソールに移動してパラメーターを指定するという手動のタスクを実行する必要があります。

一方、Terraformには、モジュールを作成、保守、および共有するための一連の方法があります。 Terraform Module Registryでモジュールの正確な要件を確認し、Terraformファイルでそれらを非常に簡単に使用できます。

インフラストラクチャの制御とガバナンス

従業員がAWSアカウントで作成できるリソースを制限したい場合:AWS CloudFormationとTerraformの両方が、そうするための手段を提供します。

まずCloudFormationについてお話ししましょう。 CloudFormation自体は、テンプレートの使用方法を制御できませんが、AWS IAMポリシーを使用して、AWSアカウントのユーザーがリソースの作成に標準のCloudFormationテンプレートのみを使用できるようにすることができます。 S3バケットの例では、ユーザーのすべての「S3作成」権限を制限し、AWSサービスカタログまたはネストされたスタックからのS3バケットの作成のみを許可することができます。

Terraformを使用すると、ポリシーをコードツールSentinelとして使用して、ユーザーが作成できるリソースを制御できます。 Sentinelを使用すると、きめ細かいロジックベースのポリシーを適用して、Terraformを介したユーザーアクションを許可または拒否できます。 たとえば、S3バケットを作成するすべてのリソースを拒否し、ユーザーが標準モジュールからS3バケットを作成することのみを許可することができます。

状態管理

AWS CloudFormationとTerraformはどちらも、維持しているリソースを追跡する必要があります。

Terraformは、インフラストラクチャの状態を状態ファイルに保存します。 このファイルはデフォルトでローカルに保存されますが、S3などのリモートバックエンドに保存して、複数のユーザーに同じインフラストラクチャのセットに変更を加えることができます。

CloudFormationは状態ファイルを維持しません。少なくとも私たちが見ることができるものは維持しません。 CloudFormationはマネージドサービスであるため、すべての状態のメンテナンスとチェックをバックグラウンドで実行します。

AWS CloudFormationとTerraformの両方に、インフラストラクチャにどのような変更が加えられるかを確認する手段があります。 Terraformでは、コマンド「terraformplan」とTerraformが構成変更の適用をどのように計画しているかを実行できます。 CloudFormationでは、ユーザーは変更セットを介してこの情報を表示できます。

言語

Terraformは、HashiCorpによって作成された言語であるHashiCorp構成言語HCLを使用します。 これはJSONと非常によく似ていますが、追加の機能が組み込まれています。

CloudFormationテンプレートはYAMLまたはJSON形式で記述されています

ロギングとロールバック

AWSCloudFormationとTerraformの両方に優れたロギング機能があります。 私の経験では、エラーと問題は(ほとんどの場合)簡単でした。

CloudFormation:デフォルトでは、スタックの変更に失敗した場合、CloudFormationはすべての変更をロールバックします。 これは優れた機能であり、デバッグ目的で無効にすることができます。

Terraform: Terraformは、失敗した場合に変更を自動的にロールバックしません。 いつでもterraformdestroyコマンドを実行して、半分プロビジョニングされた構成を削除し、Terraformの実行を再開できるため、これは問題ではありません。

範囲

TerraformはAWSクラウドに限定されません。 TerraformとCloudFormationのどちらかを選択する際の最も重要な要素は、Terraformが他のクラウドプロバイダーとサービスをサポートしていることです。

したがって、複数のクラウドプラットフォームにIACを使用する場合は、Terraformが最適です。 CloudFormationは強力なツールですが、AWSに限定されています。 Terraformを使用することで、インフラストラクチャをセットアップし、アプリケーションを複数のクラウドプラットフォームにデプロイできるため、アプリケーションの可用性と堅牢性が向上します。

機能のサポート

通常、AWSが新しいサービスと機能を展開すると、CloudFormationはAWSサービスであるため、Terraformの前に更新されます。 現在のところ、両方のツールがこれらのサービスのほとんどのサービスと機能をカバーしています。 これはTerraformを使用することのわずかな欠点になる可能性がありますが、解決策はあります。

Terraformコード内にCloudFormationスタックを作成する可能性もあります。 したがって、Terraformを使用していて、機能がない場合は、Terraformコード内にCloudFormationスタックを一時的に設定できます。

技術サポート

有料のAWSテクニカルサポートプランには、CloudFormationサポートも含まれています。

HashiCorpは、Terraformの技術サポートの計画も支払っています。

結論

AWS CloudFormationとTerraformはどちらも、強力で完全に開発されたツールです。 上記の違いは、要件に基づいてツールを選択するための情報に基づいた決定を下すのに役立ちます。 個人的な提案として、将来的に複数のクラウドプラットフォームを使用する予定がある場合、または現在複数のクラウドを使用している場合は、すべてのニーズに対応するワンストップショップとしてTerraformを使用する必要があります。 AWS専用のIACツールをお探しの場合、AWSCloudFormationとTerraformはどちらも公正なゲームです。

Terraformの学習に興味がある場合は、これらのオンラインコースを確認してください。