Terraform と Bicep の比較

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

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

状態とバックエンド

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

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

Bicep と Terraform を比較してクラウド インフラストラクチャを管理する場合は、対象となるクラウド環境を考慮することが重要です。

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

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

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

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

Terraform は、他のクラウド プロバイダーまたは プロバイダー というプラグインを使用した API に対応しています。 Azure インフラストラクチャの管理を有効にする Terraform Azure プロバイダー は複数あります。 Terraform 構成をコーディングする場合は、使用する必須プロバイダーを指定します。 Terraform init を実行すると、指定したプロバイダーがインストールされ、コードから使用できるようになります。

CLI ツール

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

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

  • az bicep: az bicep コマンドを使用すると、Bicep のインストール、Bicep ファイルのビルドと発行などのタスクを実行できます。
  • az deployment: Bicep と Azure CLI を使用してリソースをデプロイする方法 に関する記事では、Bicep ファイルで Azure CLI を使用してリソースを Azure にデプロイする方法について説明しています。

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

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

処理

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

認証

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

Azure の統合

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

ポータルの統合

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

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

帯域外の変更

帯域外構成の変更は、ツールのコンテキスト外でデバイス構成に加えられた変更です。 たとえば、Bicep または Terraform を使用して Virtual Machine Scale Set をデプロイするとします。 ポータルを使用して Virtual Machine Scale Set を変更すると、変更は 「帯域外」になり、IaC ツールには不明となります。

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

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

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

クラウド フレームワーク

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

まとめ

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