Terraform と Bicep の比較

DevOps チームは、スケーリングを実現するために、信頼された反復可能なプロセスを使用してコードをすばやくデプロイする方法を常に探しています。 クラウドとインフラストラクチャに関しては、コードとしてのインフラストラクチャ (IaC) を使用してこのプロセスをますます実現できます。 IaC ツールは、汎用ツールから特定の環境向けのツールまで多岐に及びます。 Terraform は前者の例ですが、Bicep は Azure 関連のタスクを処理するように設計されています。

この記事では、Bicep と Terraform の 9 つのインフラストラクチャと統合機能を比較します。 これらの違いを理解することは、インフラストラクチャとプロセスを最も適切にサポートするツールを決定するのに役立ちます。

状態とバックエンド

Terraform と Bicep はどちらも望ましい状態構成 (DSC) であり、IT および開発インフラストラクチャをコードとして簡単に管理できます。 Terraform には、マネージド インフラストラクチャと構成に関する状態が格納されます。 Terraform では、この情報を使用して、実際のリソースを構成にマップし、メタデータを追跡し、大規模なインフラストラクチャのパフォーマンスを向上させます。 状態は terraform.tfstate という名前のローカル ファイルに格納されますが、 リモートで格納することもできます。 状態ファイルをバックアップしてセキュリティで保護することが重要です。 Terraform と同様に、Bicep は宣言型であり、目標を求めています。 ただし、Bicep は状態を格納しません。 代わりに Bicep は増分デプロイに依存します。

インフラストラクチャのターゲット

クラウド インフラストラクチャを管理するためにBicepと Terraform を比較する場合は、対象のクラウド環境を検討してください。

  • Azure のみ
  • マルチクラウドまたはハイブリッド クラウド

Bicep は Azure 固有であり、他のクラウド サービスと連携するようには設計されていません。

次のいずれかの環境へのデプロイを自動化することが目的の場合は、Terraform の方が適している可能性があります。

  • 仮想化環境
  • Azureやその他のクラウドなどのマルチクラウド シナリオ
  • オンプレミスのワークロード

Terraform は、プロバイダーと呼ばれるプラグインを使用して、他のクラウド プロバイダーまたは API と対話 します。 いくつかの Terraform Azure プロバイダーにより、Azure インフラストラクチャの管理が可能になります。 Terraform 構成をコーディングするときは、使用している必要なプロバイダーを指定します。 terraform init を実行すると、指定されたプロバイダーがインストールされ、コードから使用できるようになります。

CLI ツール

コマンド ライン インターフェイス (CLI) ツールは、オートメーション テクノロジの実装と管理を通じてオーケストレーションにおいて重要な役割を果たします。 Bicep と Terraform の両方に CLI ツールが用意されています。

Bicep は Azure CLI と統合されているため、開発者は次のような az コマンドを使用できます。

Terraform CLI を使用すると、Terraform コードの検証と書式設定、実行プランの作成と適用などのタスクを実行できます。

Bicep には、Bicep と Azure Pipelines を簡単に統合できる機能も用意されています。 Terraform にも同様の機能がありますが、 Visual Studio 用の Azure Pipelines Terraform Tasks 拡張機能をダウンロードしてインストールする必要があります。 インストールが完了したら、Azure Pipelines から Terraform CLI コマンドを実行できます。 さらに、Terraform と Bicep の両方で GitHub Actions が サポートされ、ソフトウェアのビルド、テスト、デプロイが自動化されます。

加工

Bicep と Terraform には、デプロイの効率と最適化に関して重要な違いがいくつかあります。 Bicep では、コア Azure インフラストラクチャ サービス側で処理が行われます。 この機能には、ポリシーを確認するためのプリフライト処理や、リージョン内に複数のインスタンスをデプロイするための可用性などの利点があります。 Terraform では、Terraform クライアント内で処理が行われます。 そのため、必要な変更を判断するために状態と HCL (HashiCorp Language) を使用するため、前処理では Azure への呼び出しは必要ありません。

認証

Azure 認証機能は、Bicep と Terraform によって異なります。 Bicepでは、Bicep ファイルと ARM テンプレートを送信する要求中に承認トークンを指定します。 ARM を使用すると、指定したテンプレート内でデプロイを作成し、リソースをデプロイする両方のアクセス許可が付与されます。 Terraform は、プロバイダーの資格情報 (Azure CLI、サービス プリンシパル、Azure リソースのマネージド ID など) に基づいて各 API を認証します。 さらに、1 つの構成で複数のプロバイダー資格情報を使用できます。

Azure の統合

Azure PolicyなどのAzure機能の使用と、各ツールが他のツールや言語とどのように対話するかを検討してください。 Bicep のプレフライト検証では、デプロイ前に失敗するようにリソースがポリシーに準拠していないかどうかを判断します。 したがって、開発者は、提供された ARM テンプレートを使用して、ポリシーを使用してリソースを修復できます。 ARM テンプレートを使用して、自動修復のために別のリソースへのポリシー割り当てを作成できます。 ただし、Terraform は、ポリシーのために許可されていないリソースがデプロイされると失敗します。

ポータルの統合

Bicep が Terraform よりも大きな利点の 1 つは、ポータルアクションを自動化できることです。 Bicep を使用すると、Azure portal を使用してテンプレートをエクスポートできます。 テンプレートをエクスポートすると、リソースをデプロイする構文とプロパティを理解するのに役立ちます。 エクスポートされたテンプレートから始めて、ニーズに合わせて変更することで、将来のデプロイを自動化できます。 Terraform テンプレートがサポートされるまでは、エクスポートしたテンプレートを手動で翻訳する必要があります。

Terraform では、Bicepと同じポータル統合は提供されませんが、Terraform の Azure Export を使用して、Terraform 管理の下で既存のAzure インフラストラクチャを使用できます。 (Azure Export for Terraform は、Microsoft が Azure /aztfexport GitHub リポジトリで所有および管理しているオープンソース ツールです)。

帯域外の変更

帯域外構成の変更は、ツールのコンテキスト外でデバイス構成に加えた変更です。 たとえば、Bicepまたは Terraform を使用して仮想マシン スケール セットをデプロイするとします。 ポータルを使用してその仮想マシン スケール セットを変更した場合、その変更は "帯域外" であり、IaC ツールでは不明です。

Bicepを使用している場合は、Bicepと ARM テンプレート コードを使用して帯域外の変更を調整し、次のデプロイでこれらの変更が上書きされないようにします。 これらの変更によってデプロイがブロックされることはありません。

Terraform を使用している場合は、帯域外の変更を Terraform 状態にインポートし、HCL を更新します。

Note

Azure Storage アカウントの変換では、サポート対象の帯域外変更が発生し、Terraform がストレージ アカウントの置換を計画する原因となることがあります。 これらの変換中に予期しない再作成を防ぐ方法については、ステートフルなAzure リソースの Terraform ドリフトの防止に関するページを参照してください。

したがって、環境に頻繁に帯域外の変更が必要な場合は、Bicep の方が使いやすいです。 Terraform を使用する場合は、帯域外の変更を最小限に抑えます。

クラウド フレームワーク

クラウド導入フレームワーク (CAF) は、クラウド体験全体を通じてクラウド導入を促進するためのドキュメント、ベスト プラクティス、ツールのコレクションです。 Azure には、ランディング ゾーンをデプロイするためのネイティブ サービスが用意されています。 Bicep は、ARM テンプレートとランディング ゾーンの実装に基づくポータル エクスペリエンスを使用して、このプロセスを簡略化します。 Terraform では、 Enterprise-Scale ランディング ゾーン モジュール を利用して、Azure をデプロイ、管理、運用化します。

概要

Bicep と Terraform には、ユーザーフレンドリなインフラストラクチャと統合機能が多数用意されています。 これらの機能により、自動化テクノロジの実装と管理が容易になります。 環境に最適なツールを決定する場合は、複数のクラウドにデプロイするか、インフラストラクチャがマルチクラウド環境またはハイブリッド クラウド環境で構成されているかを検討します。 また、この記事で説明する 9 つの機能を検討して、組織に最適な選択を行います。