コードとしてのインフラストラクチャ(IaC)の理解に基づいて、このトピックでは Terraform について詳しく説明します。
概要
Terraform は、HashiCorp によって開発されたオープンソースの IaC ツールです。Terraform を使用すると、宣言型構成ファイルを使用して Alibaba Cloud リソースを定義できます。
Terraform で管理できるリソースは、VM、コンテナー、ストレージリソース、ネットワークリソースなどの基本コンポーネントから、セキュリティグループルール、ドメインネームシステム(DNS)エントリ、ポリシーなどの構成コンポーネントまで、多岐にわたります。 Terraform を使用すると、特定の Software as a Service(SaaS)機能を管理することもできます。
Terraform は、HashiCorp Configuration Language(HCL)と呼ばれるシンプルで人間が読める言語を使用して、インフラストラクチャの設計図をコードに変換します。 Terraform はコード構成ファイルを読み取り、提案された変更の概要を示す実行計画を生成します。 この計画は、プレビュー、検証、そして最終的には Alibaba Cloud 上のインフラストラクチャをプロビジョニングおよび管理するために適用できます。
Alibaba Cloud は専用の Terraform プロバイダーを提供しており、O&M エンジニアは Alibaba Cloud リソースのデプロイを定義、コード化、および自動化できます。
Terraform の機能
Terraform には次の機能があります。
マルチクラウドおよびマルチ API サポート: Alibaba Cloud に加えて、Terraform はすべての主要なクラウド サービス プロバイダーをサポートしています。 Terraform は、GitHub や Kubernetes などのプラットフォームの API とも統合されています。
オープンコアアーキテクチャ: Terraform は、セルフマネージドからフルマネージドまでの 3 つのエディションで利用でき、エンタープライズグレードの機能を提供します。
大規模コミュニティ: Terraform は、Alibaba Cloud を含むすべてのプロバイダーとモジュールのオンライン登録と管理をサポートするオープンレジストリを提供します。
インフラストラクチャ構成: Terraform は、インフラストラクチャリソースの作成、変更、削除、検査を含むライフサイクルを管理します。 Terraform は、サービスの開始、依存関係のインストール、アプリケーションのインストール、更新の実行など、インフラストラクチャシステムの構成は管理しません。
Alibaba Cloud 上の Terraform は、次の機能を提供します。
リソースの構成: Terraform を使用して、Alibaba Cloud リソースを定義および構成できます。 リソースブロックを使用して、VM、ネットワークリソース、ストレージリソース、ファイアウォールなどのインフラストラクチャリソースを定義できます。
リソース関係の作成: リソース間に明示的な依存関係を作成して、リソースが指定された順序で作成されるようにすることができます。
モジュールの標準化: 再利用可能なモジュールを作成して、特定のリソースの作成方法を標準化できます。 Alibaba Cloud はいくつかの標準化されたモジュールを提供しています。 これらのモジュールを直接参照できます。
IaC ワークフロー
このセクションでは、標準の IaC ワークフローについて説明します。
必要なリソースの範囲を定義する
Terraform ワークフローを開始する前に、プロジェクトまたは アプリケーション に必要なリソースの範囲を定義する必要があります。 たとえば、一般的な 2 層アーキテクチャでは、データベース作成用の Web サーバープールが必要です。 したがって、このスコープ定義フェーズでは、必要な Alibaba Cloud リソースを特定し、それらの相互接続を計画する必要があります。
テンプレートを作成する
Terraform ワークフローの最初のステップは、main.tf、variables.tf、.tfvars ファイルなどの構成ファイルに必要なインフラストラクチャをコードとして定義することにより、テンプレートを作成することです。
Terraform の作業ディレクトリを初期化する
初期化中に、Terraform はコード構成に必要なプラグインまたはモジュールを自動的にダウンロードしてインストールします。 terraform init コマンドを実行して、Terraform の作業ディレクトリを初期化し、Alibaba Cloud Terraform プロバイダーをインストールする必要があります。
実行計画をプレビューする
実行計画のプレビューフェーズでは、terraform plan コマンドを実行する必要があります。 このコマンドは、テンプレート作成フェーズで定義されたリソース構成に基づいてリソースを作成、変更、または破棄する実行計画をプレビューするために使用されます。 実行計画を Alibaba Cloud インフラストラクチャに適用する前に、実行計画を確認して、実行計画が期待どおりであることを確認できます。
実行計画を実行する
実行計画で説明されているリソース構成を確認した後、terraform apply コマンドを実行して、実際のインフラストラクチャリソースを作成するか、既存のインフラストラクチャリソースを更新または破棄する必要があります。 コマンドを実行すると、対応するステータスファイルが作成されるか、既存のステータスファイルが変更されます。
このチュートリアルを進めていくと、Terraform ワークフローをより深く理解できます。
シナリオ
このセクションでは、Terraform の一般的なシナリオについて説明します。
インフラストラクチャ管理
Terraform は、不変のメソッドを使用してインフラストラクチャを管理します。 作成するコードは、サービスとインフラストラクチャのアップグレードまたは変更の複雑さを軽減するのに役立ちます。
変更の追跡
Terraform を使用して、インフラストラクチャの変更を追跡できます。 新しいインフラストラクチャの変更がプレビューまたは実行されると、Terraform はインフラストラクチャのステータスが変更される前に変更の確認を求めます。 インフラストラクチャを作成すると、Terraform は自動的にステータスファイルを生成します。 ステータスファイルは、インフラストラクチャの現在のステータスを反映し、構成テンプレートで変更された Alibaba Cloud リソースの数と種類を表示します。
変更の自動化
Terraform を使用して変更を自動化できます。 テンプレート構成ファイルは宣言型です。 したがって、インフラストラクチャを作成するための詳細なコマンドを記述する代わりに、インフラストラクチャの最終ステータスのみを定義する必要があります。 その後、Terraform は依存関係を自動的に管理し、インフラストラクチャリソースを作成します。
構成の標準化
Terraform を使用して構成を標準化できます。 カスタムモジュールまたは Terraform レジストリで提供されているパブリックモジュールを使用して、効率を向上させ、ベストプラクティスを実装できます。 Terraform は、チームが構成および使用できるリソースの種類を制限する自動適用ポリシーをサポートしています。