次の方法で共有


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

帯域外の変更

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

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

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

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

クラウド フレームワーク

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

概要

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