OCIのTerraformとPulumiの比較、およびマルチクラウド・インフラストラクチャの導入と管理 (2023/12/21)

OCIのTerraformとPulumiの比較、およびマルチクラウド・インフラストラクチャの導入と管理 (2023/12/21)

https://blogs.oracle.com/cloud-infrastructure/post/compare-terraform-pulumi-oci-multicloud-manage

投稿者: Adina Nicolescu | Senior Cloud Engineer


PulumiおよびTerraformは、どちらもInfrastructure as Code (IaC)ツールであり、クラウド・インフラストラクチャやその他のリソースの自動化および管理に使用します。それらの選択は、多くの場合、チームの好み、既存のスキル、およびプロジェクトの特定のニーズに左右されます。


目的が似ている場合でも、ユース・ケースごとにどちらが優れているかを判断する際に、どのように異なるかを理解する必要があります。ほとんどの場合、お客様は複数の環境(すべてOracle Cloud Infrastructure(OCI)で本番環境、開発者環境、テスト環境またはマルチクラウド)を管理する必要があります。多くのお客様は、1つのクラウド・プロバイダのみを使用しなくなり、多くの場合、環境の移行を望んでおらず、マルチクラウド構成に拡張しているため、OCIやその他のクラウド・プロバイダーのリソースを同時に簡単に導入し、特に管理するために、マルチクラウド・ソリューションを理解することも重要です。決定する前に、要件に基づいて両方のツールを評価することをお薦めします。そのため、情報に基づいた意思決定を行うには、次の考慮事項を確認してください。



ファイル管理の構成


最も関連する違いの1つは、これらのツールが宣言および管理するリソースを集中管理する方法です。


Terraformは、成熟した複雑なIaCツールであり、多数のプロバイダも使用できます。これは、リソース・マネージャ・サービスとしてOCIと統合されており、ユーザーにかわって既存のリソースのコードを生成し、ドリフト検出レポートを作成することもできます。開発環境と本番環境を個別に作成する場合は、異なるスタックからコードを複数回デプロイする必要があります。ワークスペースを使用することもできます。これにより、1つの構成ディレクトリで複数の状態を使用できます。Terraformでは、異なるプロバイダを使用してマルチクラウドのインフラストラクチャを作成することもできます。この構成では、クラウド・プロバイダごとに個別の構成ファイル・セットを作成および管理します。


別の方法として、Pulumiでは、同じ構成ファイルからOCIの複数の環境(devおよびprod)のインフラストラクチャを作成および管理できます。同じように、複数のプロバイダとそれぞれのリソースを単一のファイル・セットで管理できるため、マルチクラウド構成で役立ちます。これらを一緒に管理することに加えて、Pulumiでは、管理する各環境または各クラウド・プロバイダのスタックを定義でき、そのスタックの下では、宣言されたリソースが管理されます。


次の簡略化されたPythonの例では、Pulumiは、OCIでのProdおよびDev、およびAmazon Web Services (AWS)用の3つの環境のネットワークを作成します。

import pulumi
from pulumi import Output
from pulumi_oci import core
from pulumi_aws import ec2

# Define OCI Stack
oci_prod_stack = pulumi.Stack('oci-prod-stack')

# Create a VCN in OCI (Production)
oci_vcn_prod = core.VirtualNetwork('oci-vcn-prod',
    cidr_block="10.0.0.0/16",
    display_name="oci-vcn-prod",
    compartment_id=oci_stack.output("compartment_id"))

# Define OCI Dev Stack
oci_dev_stack = pulumi.Stack('oci-dev-stack')

# Create a VCN in OCI (Dev)
oci_vcn_dev = core.VirtualNetwork('oci-vcn-dev',
    cidr_block="10.0.0.0/16",
    display_name="oci-vcn-dev",
    compartment_id=oci_dev_stack.output("compartment_id"))

# Define AWS Stack
aws_stack = pulumi.Stack('aws-stack')

# Create a VPC in AWS
aws_vpc = ec2.Vpc('aws-vpc',
    cidr_block="10.0.0.0/16",
    tags={"Name": "aws-vpc"})

# Export OCI and AWS network information
pulumi.export('oci_vcn_prod_id', oci_vcn_prod.id)
pulumi.export('oci_vcn_dev_id', oci_vcn_dev.id)
pulumi.export('aws_vpc_id', aws_vpc.id)


これらのスタックは、同じファイルで定義されていますが、コマンド行とは独立して初期化できます。スタックを個別にデプロイするには、次のコマンドを実行します:

pulumi up --stack oci-prod-stack
pulumi up --stack oci-dev-stack
pulumi up --stack aws-stack


これらのコマンドは、OCI本番、OCI開発者およびAWSネットワークを、同じPulumiプログラム内の個別のスタックとしてデプロイします。



言語と構成


これらのツールは、構成ファイルの扱い方が異なります。Terraformでは、HashiCorp構成言語(HCL)を使用します。これは、Terraform専用に設計された宣言言語です。構成ファイルの書込みにはHCLを使用します。これは人間が読めるように設計されており、宣言的な方法でインフラストラクチャをコードとして定義するために使用されます。HCLはクラシック・ループおよびコンディショナルの実装は行いませんが、他の方法でそのようなロジックを実装できるほど柔軟です。


次の例は、TerraformでのOCIコンピュート・インスタンス定義を示しています:


resource "oci_core_instance" "test" {
  availability_domain = "ad"
  compartment_id     = "comp"
  # Other configuration parameters
}


Pulumiは多言語ツールです。TypeScript、JavaScript、Python、Go、.NET、Java、マークアップ言語(YAMLなど)などの既存の使い慣れたプログラミング言語と、そのネイティブ・エコシステムを使用して、Pulumiソフトウェア開発者キット(SDK)を通じてクラウド・リソースと対話します。この構成では、ループ、条件、ライブラリなど、これらのプログラミング言語のフルパワーを使用できます。


次の例は、PulumiでのOCIコンピュート・インスタンス定義を示しています。


import pulumi
import pulumi_oci as oci

test = oci.core.Instance(
    'test',
    availability_domain='ad',
    compartment_id='comp',
    # Other configuration parameters
)


宣言型と必須型


Terraformは、主に宣言型です。インフラストラクチャの必要な状態を指定すると、Terraformによって、その状態と一致するようにリソースを作成または変更する方法が判断されます。


プルミは宣言的と必須の両方とみなされます。インフラストラクチャを定義するコードを記述し、リソースを作成または変更するための正確なステップを指定し、使用する言語が必須であるため、これは必須です。インフラストラクチャを記述するよりも、プログラムを記述する方が近いです。 必然的な側面は、フードとプログラミング側で何が起こるかに関連しています。言語ホストは、対象インフラストラクチャを満たすためにエンジンにリクエストを送信します。宣言的な部分は、インフラストラクチャ管理に役立ちます。エンジンでは、言語ホストから受信したインフラストラクチャの意図したモデル、状態バックエンドに記録された現在の状態、および実際のリソース状態を組み合せて、実際の状態を意図したモデルと一致させるために実行する必要があるアクションを計算します。



状態管理


Terraformは、状態ファイルを使用してインフラストラクチャの現在の状態を追跡します。この状態ファイルは、ローカルまたはリモートでOCI Object Storageに格納できるため、ユーザーが自己管理できます。OCIリソース・マネージャを使用してインフラストラクチャを管理する場合、状態もサービスによってリモートで管理されます。Terraformでは、この状態を使用して変更を計画および適用します。


Pulumiでは、スタックベースのアプローチを使用して、開発、ステージング、本番などの様々な環境に対して複数のスタックを定義できます。各スタックは独自の状態を維持し、様々なバックエンドに格納できます。Terraformと同様に、状態はPulumi Cloudでクラウド管理することも、ローカルで自己管理することも、OCI Object Storageなどの異なるクラウド・ストレージ・オプションで行うこともできます。



ワークフロー


Terraformは、コードの記述、計画(適用前の変更のプレビュー)、適用(インフラストラクチャのプロビジョニング)の3つのステップに従います。


Pulumiはコードを実行するため、計画および適用フェーズはありません。コードと値を使用してプロジェクトを構成したら、コマンド「pulumi up」を使用してすべてをデプロイします。



ツールの成熟度


Terraformは長期間使用されています。成熟度が高く、さまざまなクラウド・プラットフォームやサービス向けのプロバイダやモジュールが幅広くなっています。そのため、すぐに利用できる幅広いクラウド・リソースをサポートしています。


Pulumiは新しく、現在はTerraformと比較してエコシステムが小さくなっています。現在は、サポートするクラウド・プロバイダとサービスを直接減らしています。間接的に、必要に応じて、独自のプロバイダを記述できます。OCIを使用して、Pulumiで使用可能な次のリソース(pulumi_ociライブラリなど)のいずれかをプロビジョニングできます。



まとめ


次の表に、2つのツールの機能の比較の概要を示します。

Feature Terraform Pulumi
Language HashiCorp Configuration Language (HCL) Support for multiple languages, including JavaScript, TypeScript, Python, Go, and .NET
Deployment model Declarative Imperative and declarative
Ease of learning Generally considered easy to learn, more difficult to master complex aspects Depends on familiarity and experience with programming languages and concepts
Community support Large and active community Community smaller than Terraform, growing
Providers Rich provider ecosystem (OCI, AWS, Azure, GCP, and K8s) Supports multiple cloud providers and services but may have fewer providers compared to Terraform
State management Uses local and remote state files (OCI Object Storage, AWS S3) Can use remote state storage or local state files
Code reusability Modules (reusable code) Uses standard programming language features for code organization and reusability
Dynamic configuration Limited support for dynamic values Uses programming language features for dynamic configuration
Tooling integration Well-integrated with Terraform CLI and GUI and Resource Manager in OCI Integrated with existing infrastructure tooling but might require extra setup
Updates & drift detection OCI has drift detection feature in the Resource Manager. Terraform plans and detects updates based on state Can detect and manage resource drift
Commercial support Offered by HashiCorp, integrated in the Resource Manager managed service in OCI Pulumi offers commercial support
Maturity Mature, well-developed, widely adopted Newer than Terraform, still developing, gaining traction in industry
Serverless support Good support for serverless services Supports serverless services
Multicloud support Excellent multicloud support through multiple deployments Might have fewer providers than Terraform but can deploy to multiple clouds from same configuration files


PulumiとTerraformの選択は、お客様の具体的な要件およびプリファレンスによって異なります。あなたが開発者であり、プログラミング言語に精通している場合、Pulumiはあなたが採用することは非常に簡単です。プログラミングが強みではない場合、Terraformは、OCIまたは複数のクラウドのインフラストラクチャを快適に管理できるレベルまで簡単に選択できます。Pulumiは、OCIのみを実行し、1つ以上の環境を管理する場合や、プログラミング言語を使用して構成する場合でも、Terraformと競合できます。ただし、マルチクラウド環境でスタックを簡単な方法で管理する必要がある場合に最も役立ちます。


今すぐOracle Cloud Infrastructureテナンシから始めて、この2つのIaCソリューションをテストしましょう。


詳細は、次のリソースを参照してください。

コメント

このブログの人気の投稿

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle Cloud Infrastructure Secure Desktopsを発表: デスクトップ仮想化のためのOracleのクラウドネイティブ・サービス (2023/06/28)

Oracle Cloudのデータベースをオブジェクト・ストレージにバックアップする3つの方法 (2021/12/13)