すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Terraform リファレンス

最終更新日:Mar 21, 2025

Terraform は、開発者が宣言型言語を使用してインフラストラクチャ構成を定義および管理するために使用できる、オープンソースの Infrastructure as Code(IaC)ツールです。 Terraform は、Elastic Compute Service(ECS)リソースを作成、変更、または削除するための簡単な方法を提供します。 Terraform は、手動操作の複雑さとエラーを軽減し、インフラストラクチャの管理性と保守性を向上させます。 このトピックでは、Terraform をインストールおよび構成し、Terraform を使用して ECS インスタンスを作成する方法について説明します。

Terraform の基本機能

Terraform は、IT インフラストラクチャの自動オーケストレーションをサポートするツールです。 Terraform を使用すると、コードを使用して IT リソースを管理および保守できます。 詳細については、「Terraform とは」をご参照ください。

  • Terraform は、使いやすい CLI を提供します。この CLI を使用すると、Alibaba Cloud またはサードパーティクラウドに構成ファイルをデプロイし、構成ファイルのバージョンを管理できます。 Terraform を使用すると、構成ファイルでクラウドトポロジを構築するために必要なインフラストラクチャリソースを定義できます。 リソースには、仮想マシン(VM)、ストレージアカウント、ネットワークインターフェースなどが含まれます。

  • Terraform は、Alibaba Cloud プロバイダーと統合して、新しいインフラストラクチャをサポートできます。 テンプレートを使用して Alibaba Cloud プロバイダーを構成し、Alibaba Cloud 上でクラウドインフラストラクチャを定義、プレビュー、およびデプロイできます。

  • Terraform を使用して、複数の Alibaba Cloud サービスのリソースを作成、変更、および削除できます。

Alibaba Cloud サービスと Terraform の統合方法については、Alibaba Cloud プロバイダー を参照してください。

Terraform のインストール

Cloud Shell を使用する

Alibaba Cloud の Cloud Shell は、Terraform が付属する無料の O&M サービスです。 Cloud Shell で Terraform コマンドを直接実行できます。

関連する権限を持つ有効な Alibaba Cloud アカウントを持っていることを確認してください。

ブラウザを開き、アドレスバーに https://shell.alibabacloud.com/ と入力して Cloud Shell にアクセスします。

Cloud Shell にログインした後、次のコマンドを実行します。

terraform

次の図に示すコマンド出力は、Terraform が Cloud Shell で使用可能であり、直接使用できることを示しています。

image

Cloud Shell の使用方法については、「Cloud Shell の使用」をご参照ください。

手動インストール

プリコンパイル済みパッケージを使用する

Terraform 公式 Web サイト にログインし、お使いのオペレーティングシステムに基づいて ZIP パッケージを見つけ、ダウンロードします。

ダウンロードしたパッケージを /usr/local/bin ディレクトリに解凍します。 ダウンロードしたパッケージは、解凍後に削除できます。 これは Terraform の動作には影響しません。

PATH 環境変数に Terraform ディレクトリが定義されていることを確認してください。 PATH 環境変数の値は、オペレーティングシステムによって異なります。

Windows

  1. [コントロールパネル] > [システム] > [システム設定] > [環境変数] を選択します。

  2. システム変数で PATH が見つかるまで下にスクロールします。

  3. [編集] をクリックして、PATH 環境変数の値を変更します。

  4. ディレクトリはセミコロン(;)で区切ります。 例:c:\path;c:\path2。

  5. 設定を有効にするには、コマンドラインツールを起動します。

詳細については、「Windows で .exe を作成するためのパスを設定できる場所」をご参照ください。

macOS または Linux

PATH 環境変数の値を表示します。

echo $PATH

Terraform のバイナリファイルを、PATH 環境変数の値にあるディレクトリのいずれかに移動します。 mv コマンドで、ソースディレクトリとデスティネーションディレクトリを指定できます。 たとえば、Terraform のバイナリファイルが Downloads フォルダにあり、PATH 環境変数の値に /usr/local/bin ディレクトリが含まれている場合は、次のコマンドを実行できます。

mv ~/Downloads/terraform /usr/local/bin/

詳細については、以下のトピックをご参照ください。

ソースコードを使用する

ソースコードからバイナリファイルをコンパイルする場合は、次のコマンドを実行して HashiCorp Terraform リポジトリ をクローンします。

git clone https://github.com/hashicorp/terraform.git

次の図のコマンド出力は、クローンの進行状況を示しています。 クローンが完了するまで待ちます。

image

リポジトリのクローンが作成されると、install コマンドを実行するディレクトリに terraform という名前のディレクトリが追加されます。 cd コマンドを実行して /terraform ディレクトリに移動します。

cd terraform

install コマンドを実行してディレクトリをコンパイルし、コンパイルされたパッケージを $GOPATH/bin/terraform ディレクトリに移動します。

go install

次の図に示すコマンド出力は、コンパイルが進行中であることを示しています。 コンパイルが完了するまで待って、次の手順に進みます。

image

「zsh: command not found: go」というエラーメッセージが表示された場合は、最初に Go 環境をインストール する必要があることに注意してください。

PATH 環境変数に Terraform ディレクトリが定義されており、使用可能であることを確認してください。 PATH 環境変数の値は、オペレーティングシステムによって異なります。

macOS または Linux

PATH 環境変数の値を表示します。

echo $PATH

Terraform のバイナリファイルを、PATH 環境変数の値にあるディレクトリのいずれかに移動します。 mv コマンドでソースディレクトリとデスティネーションディレクトリを指定できます。 たとえば、Terraform のバイナリファイルが Downloads フォルダにあり、PATH 環境変数の値に /usr/local/bin ディレクトリが含まれている場合は、次のコマンドを実行できます。

mv ~/Downloads/terraform /usr/local/bin/

詳細については、以下のトピックをご参照ください。

Windows

  1. [コントロールパネル] > [システム] > [システム設定] > [環境変数] を選択します。

  2. システム変数で PATH が見つかるまで下にスクロールします。

  3. [編集] をクリックして、PATH 環境変数の値を変更します。

  4. ディレクトリはセミコロン(;)で区切ります。 例:c:\path;c:\path2。

  5. 設定を有効にするには、コマンドラインツールを起動します。

詳細については、「Windows で .exe を作成するためのパスを設定できる場所」をご参照ください。

macOS Homebrew

Homebrew は、macOS にパッケージをインストールするためによく使用されるツールです。 Homebrew を使用して、いくつかのコマンドで Terraform をインストールできます。

手順 1:HashiCorp tap をインストールします。これは、HashiCorp のすべての Homebrew パッケージのリポジトリです。

brew tap hashicorp/tap

手順 2:次のコマンドを実行して Terraform をインストールします。

brew install hashicorp/tap/terraform
重要

このコマンドは、Terraform の最新バージョンをインストールします。 Terraform のインストール後に新しいバージョンが利用可能な場合は、upgrade コマンドを実行して Terraform を更新できます。

Terraform を更新する前に、まず次のコマンドを実行して Homebrew を更新する必要があります。

brew update

次のコマンドを実行して、Terraform を最新バージョンに更新します。

brew upgrade hashicorp/tap/terraform

Linux

Alibaba Cloud Linux

yum install -y dnf-plugin-releasever-adapter
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum install terraform

image

image

Windows Chocolatey

Chocolatey は、Windows にパッケージをインストールするためによく使用されるツールです。 Chocolatey を使用して、いくつかのコマンドで Terraform をインストールできます。

choco install terraform

Terraform の認証

特定の環境変数にアクセス認証情報を保存し、その環境変数を使用して Terraform を認証できます。 Terraform コマンドを実行する際に、構成テンプレートでアクセス認証情報が明示的に宣言されていない場合、Terraform は環境変数からアクセス認証情報を取得できます。 オペレーティングシステムに基づいて環境変数を構成します。

Windows

  1. Windows デスクトップで、[この PC] を右クリックし、[プロパティ] を選択します。表示されるページで、[システムの詳細設定] をクリックします。 [システムのプロパティ] ダイアログボックスで、[詳細設定] タブの [環境変数] をクリックします。 [環境変数] ダイアログボックスが表示され、[ユーザー環境変数] セクションと [システム環境変数] セクションで構成されています。

  2. [システム環境変数] セクションまたは [ユーザー環境変数] セクションで、[新規] をクリックします。 表示されるダイアログボックスで、次の表に示す環境変数を作成します。

    変数

    説明

    ALICLOUD_ACCESS_KEY

    AccessKey ID。

    例: LTAIUrZCw3********

    ALICLOUD_SECRET_KEY

    AccessKey シークレット。

    例: zfwwWAMWIAiooj14GQ2*************

    ALICLOUD_SECURITY_TOKEN

    オプション。 セキュリティトークンサービス (STS) トークンを使用する場合は、この変数を指定する必要があります。

    例: sts.fr2nlrnlwnelr3*******

Linux

重要

export コマンドを使用して構成された一時的な環境変数は、現在のセッションでのみ有効です。 セッションを終了すると、構成された環境変数は無効になります。 永続的な環境変数を構成するには、export コマンドをオペレーティングシステムの起動構成ファイルに追加します。

# Access Key Id
$ export ALICLOUD_ACCESS_KEY="<Your AccessKey ID>" // アクセスキー ID
# Access Key Secret
$ export ALICLOUD_SECRET_KEY="<Your AccessKey secret>" // アクセスキーシークレット
# If you use an STS token, set the ALICLOUD_SECURITY_TOKEN environment variable to the STS token.
$ export ALICLOUD_SECURITY_TOKEN="<Your STS token>" // STS トークンを使用する場合は、ALICLOUD_SECURITY_TOKEN 環境変数を STS トークンに設定します。

環境変数を構成した後、アクセス認証情報を明示的に宣言する必要はありません。または、構成テンプレートのプロバイダーコードブロックでリージョン ID のみ宣言できます。

provider "alicloud" {
  region = "cn-hangzhou"
}

ALICLOUD_REGION 環境変数を使用してリージョン ID を指定することもできます。 リージョン ID が宣言されておらず、 ALICLOUD_REGION 環境変数が構成されていない場合は、リージョンパラメーターの値として cn-beijing が使用されます。

サポートされているリソース

説明

各リソースは、インフラストラクチャコンポーネントを定義するために使用される新しいリソース(ECS インスタンス、仮想マシン(VM)、セキュリティグループなど)です。

リソース

alicloud_auto_provisioning_group: プリエンティブルインスタンスと従量課金インスタンスをプロビジョニングしてクラスターを迅速にデプロイする ECS 自動プロビジョニンググループを提供します。

alicloud_ecs_disk_attachment: データディスクまたはシステムディスクを ECS インスタンスにアタッチまたはデタッチします。

alicloud_ecs_activation: アクティベーションコードを提供し、次の引数を構成できます。アクティベーションコードの説明、アクティベーションコードを使用してマネージドインスタンスを登録できる最大回数、デフォルトのインスタンス名プレフィックス、アクティベーションコードを使用できるホストの IP アドレス、およびアクティベーションコードの有効期間。アクティベーションコードを使用して、Alibaba Cloud によって提供されていないサーバーを Alibaba Cloud マネージドインスタンスとして登録できます。

alicloud_ecs_auto_snapshot_policy: 自動スナップショットポリシーを提供し、次の引数を構成できます。自動スナップショットを作成する曜日、自動スナップショットを作成する時刻、自動スナップショットの保持期間、クロスリージョンレプリケーション関連の引数、およびクロスリージョンスナップショットレプリケーションの暗号化設定。

alicloud_ecs_auto_snapshot_policy_attachment: 自動スナップショットポリシーをディスクに関連付け、自動スナップショットポリシーの ID を指定する auto_snapshot_policy_id 引数と、ディスクの ID を指定する disk_id 引数を構成できます。

alicloud_ecs_capacity_reservation: キャパシティ予約を提供します。キャパシティ予約を作成して、特定のインスタンスタイプのキャパシティを予約し、予約済みのキャパシティを使用して必要に応じて特定の数のインスタンスを作成できます。

alicloud_ecs_command: クラウドアシスタントコマンドを提供し、次の引数を構成できます。コマンドの Base64 エンコードされたコンテンツ、コマンドの説明、コマンドにカスタムパラメータを含めるかどうか、コマンドの名前、コマンド実行のタイムアウト期間、およびコマンドのタイプ。 ECS インスタンスでコマンドを実行できます。

alicloud_ecs_dedicated_host: 専用ホストを提供し、専用ホストのタイプ、課金方法、自動更新期間、名前、説明などの引数を構成できます。

alicloud_ecs_dedicated_host_cluster: 専用ホストクラスターを提供し、専用ホストクラスターの名前、説明、ゾーン、タグなどの引数を構成できます。専用ホストクラスターを使用して、専用ホストをまとめて整理および管理できます。

alicloud_ecs_deployment_set: デプロイメントセットを提供し、デプロイメントセットのデプロイメント戦略、名前、説明などの引数を構成できます。デプロイメントセットを使用して、ECS インスタンスの分散を整理および管理し、高可用性を実現したり、レイテンシを削減したりできます。

alicloud_ecs_disk: ディスク(データディスク)を提供し、次の引数を構成できます。ディスクカテゴリ、ディスクサイズ、ディスクを暗号化するかどうか、ディスクの作成に使用するスナップショットの ID、企業向け SSD(ESSD)のパフォーマンスレベル、およびディスクに追加するタグ。ディスクを使用して、さまざまなシナリオでビジネス要件に基づいてデータを保存できます。

alicloud_ecs_disk_attachment: ディスクを ECS インスタンスにアタッチまたはデタッチし、次の引数を構成できます。ディスクをアタッチする ECS インスタンスの ID、アタッチするディスクの ID、ECS インスタンスの解放時にディスクを解放するかどうか、およびディスクをシステムディスクとしてアタッチするかどうか。

alicloud_ecs_elasticity_assurance: 弾力性保証を提供します。弾力性保証を作成して、特定のリージョンで特定のインスタンスタイプの特定の数のインスタンスの計算容量を予約できます。

alicloud_ecs_hpc_cluster: 高性能コンピューティング(HPC)クラスターを提供し、クラスターの名前と説明を構成できます。

alicloud_ecs_image_component: イメージコンポーネントを提供し、次の引数を構成できます。イメージコンポーネントのタイプ、イメージコンポーネントのコンテンツ、イメージコンポーネントでサポートされているオペレーティングシステムのタイプ、およびイメージコンポーネントのその他のメタデータ。イメージコンポーネントを使用して、カスタムイメージを作成できます。

alicloud_ecs_image_pipeline: イメージテンプレートを提供し、ソースイメージ、イメージテンプレートのコンテンツ、インスタンスタイプなどの引数を構成できます。イメージテンプレートを使用して、カスタムイメージの作成と管理を自動化できます。

alicloud_ecs_image_pipeline_execution: イメージテンプレートに基づいてカスタムイメージを作成するために実行されるイメージビルドタスクを提供します。イメージテンプレートの ID を指定してイメージビルドタスクをトリガーし、イメージビルドタスクのステータスと結果をクエリできます。

alicloud_ecs_invocation: クラウドアシスタントコマンドタスクを提供します。 1 つ以上の ECS インスタンスとクラウドアシスタントコマンドを指定して、インスタンスでコマンドを実行し、対応するコマンドタスクの実行結果をクエリできます。

alicloud_ecs_key_pair: キーペアを提供します。

alicloud_ecs_key_pair_attachment: キーペアを ECS インスタンスにバインドします。

alicloud_ecs_launch_template: 事前に定義されたインスタンス作成構成を含む起動テンプレートを提供します。起動テンプレートから同一の ECS インスタンスを迅速に作成およびデプロイできます。

alicloud_ecs_network_interface: 弾性ネットワークインターフェース(ENI)を提供します。 ENI を使用して、ECS インスタンスのネットワーク接続を構成および管理し、プライベート IP アドレスを柔軟に割り当てることができます。 ENI は、複雑なネットワーク環境と高可用性アーキテクチャに最適です。

alicloud_ecs_network_interface_attachment: ENI を ECS インスタンスにバインドして、追加の IP アドレスの割り当てや複雑なネットワーク構成の実行など、インスタンスのネットワーク機能を拡張します。

alicloud_ecs_network_interface_permission: ENI に対する権限を提供します。

alicloud_ecs_prefix_list: プレフィックスリストを提供します。

alicloud_ecs_session_manager_status: セッションマネージャーのステータスを提供し、セッションマネージャーを有効または無効にできます。

alicloud_ecs_snapshot: スナップショットを提供し、ディスクのスナップショットを作成してディスクデータをバックアップできます。

alicloud_ecs_snapshot_group: スナップショット整合性グループを提供し、複数のディスクのスナップショットを同時に作成できます。

alicloud_ecs_storage_capacity_unit: ストレージキャパシティユニット(SCU)を提供します。

alicloud_image: 既存の ECS インスタンスから作成されたイメージを提供します。

alicloud_image_copy: カスタムイメージをあるリージョンから別のリージョンにコピーします。

alicloud_image_export: カスタムイメージを同じリージョンのオブジェクトストレージサービス(OSS)バケットにエクスポートします。

alicloud_image_import: イメージを ECS にインポートします。

alicloud_image_share_permission: イメージの共有権限を管理します。

alicloud_instance: ECS インスタンスを提供します。

alicloud_ecs_key_pair: キーペアを提供します。

alicloud_ecs_key_pair_attachment: キーペアを複数の ECS インスタンスにバインドします。

alicloud_ecs_launch_template: 起動テンプレートを提供します。

alicloud_ecs_network_interface: ENI を提供します。

alicloud_ecs_network_interface_attachment: ENI を ECS インスタンスにバインドまたはバインド解除します。

alicloud_ram_role_attachment: インスタンスの Resource Access Management(RAM)ロールを複数の ECS インスタンスにアタッチします。

alicloud_reserved_instance: リザーブドインスタンスを提供します。

alicloud_security_group: セキュリティグループを提供します。

alicloud_security_group_rule: セキュリティグループルールを提供します。

alicloud_ecs_snapshot: ECS スナップショットを提供します。

alicloud_ecs_auto_snapshot_policy: ECS 自動スナップショットポリシーを提供します。

Terraform を使用して ECS リソースを作成および管理する

このセクションでは、Terraform を使用して ECS インスタンスを作成する方法について説明します。

  1. 作業ディレクトリと、そのディレクトリに main.tf という名前の構成ファイルを作成します。次のコードは、ECS インスタンスと、ECS インスタンスの作成に必要な VPC(Virtual Private Cloud)、セキュリティグループ、および vSwitch を作成するために使用されます。次のコードを main.tf 構成ファイルにコピーします。

    # Alibaba Cloud リージョンを表す region という名前の変数を定義します。この変数のデフォルト値は cn-beijing です。
    variable "region"{
      default = "cn-beijing"
    }
    
    # Alibaba Cloud プロバイダーを構成し、region 変数で定義されたリージョンを指定します。
    provider "alicloud"{
      region = var.region
    }
    
    # ECS インスタンスタイプを表す instance_type という名前の文字列変数を定義します。この変数のデフォルト値は ecs.e-c1m1.large です。
    variable "instance_type" {
      type    = string
      default = "ecs.e-c1m1.large"
    }
    
    # データソースを使用して、指定されたインスタンスタイプ、リソースタイプ(vSwitch など)、およびディスクカテゴリをフィルターとして構成し、ECS インスタンスを作成できるゾーンをクエリします。
    data "alicloud_zones" "default" {
      available_instance_type     = var.instance_type
      available_resource_creation = "VSwitch"
      available_disk_category     = "cloud_essd"
    }
    
    # VPC に関連付ける CIDR ブロックを表す vpc_cidr_block という名前の変数を定義します。この変数のデフォルト値は 172.16.0.0/16 です。
    variable "vpc_cidr_block" {
      default = "172.16.0.0/16"
    }
    
    # vSwitch に関連付ける CIDR ブロックを表す vsw_cidr_block という名前の変数を定義します。この変数のデフォルト値は 172.16.0.0/24 です。
    variable "vsw_cidr_block" {
      default = "172.16.0.0/24"
    }
    
    # 特定のリソース名の一意性を確保するために、10000 から 99999 までのランダムな整数を生成します。
    resource "random_integer" "default" {
      min = 10000
      max = 99999
    }
    
    # vpc-test という名前の VPC を作成し、ランダムな整数を使用して名前の一意性を確保します。
    resource "alicloud_vpc" "vpc" {
      vpc_name   = "vpc-test_${random_integer.default.result}"
      cidr_block = var.vpc_cidr_block
    }
    
    # 作成された VPC にセキュリティグループを作成し、ランダムな整数を使用してセキュリティグループ名の一意性を確保します。
    resource "alicloud_security_group" "group" {
      security_group_name = "test_${random_integer.default.result}"  # test_$ を実際の値に置き換えます。
      vpc_id              = alicloud_vpc.vpc.id
    }
    
    # 作成されたセキュリティグループ内のすべての TCP トラフィックを許可するセキュリティグループのインバウンドルールを作成します。
    resource "alicloud_security_group_rule" "allow_all_tcp" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"  # nic_type パラメーターを 'intranet' に設定します。
      policy            = "accept"
      port_range        = "1/65535"
      priority          = 1
      security_group_id = alicloud_security_group.group.id
      cidr_ip           = "0.0.0.0/0"
    }
    
    # 指定されたゾーンと作成された VPC に vSwitch を作成し、ランダムな整数を使用して vSwitch 名の一意性を確保します。
    resource "alicloud_vswitch" "vswitch" {
      vpc_id       = alicloud_vpc.vpc.id
      cidr_block   = var.vsw_cidr_block
      zone_id      = data.alicloud_zones.default.zones[0].id
      vswitch_name = "vswitch-test-${random_integer.default.result}"
    }
    
    # ゾーン、セキュリティグループ、インスタンスタイプなどの複数のパラメーターを指定して ECS インスタンスを作成し、ランダムな整数を使用してインスタンス名の一意性を確保します。
    resource "alicloud_instance" "instance" {
      availability_zone          = data.alicloud_zones.default.zones[0].id
      security_groups            = [alicloud_security_group.group.id]
      instance_type              = var.instance_type
      system_disk_category       = "cloud_essd"
      system_disk_name           = "test_foo_system_disk_${random_integer.default.result}"
      system_disk_description    = "test_foo_system_disk_description"
      image_id                   = "aliyun_2_1903_x64_20G_alibase_20240628.vhd"
      instance_name              = "test_ecs_${random_integer.default.result}"
      vswitch_id                 = alicloud_vswitch.vswitch.id
      internet_max_bandwidth_out = 10
      password                   = "Terraform@Example" # ECS インスタンスのパスワードを構成します。Terraform@Example を実際の値に置き換えます。
    }
  2. Terraform ランタイム環境を初期化するには、次のコマンドを実行します。

    terraform init

    次のコマンド出力は、Terraform が初期化されたことを示しています。

    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
  3. コードを実行するには、次のコマンドを実行します。

    terraform apply

    コードの実行中に、プロンプトが表示されたら yes と入力し、[enter] キーを押します。実行が完了するまで待ちます。次のコマンド出力は、コードが実行されたことを示しています。

    You can apply this plan to save these new output values to the Terraform state, without changing any real infrastructure.
    
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes
    
    
    Apply complete!  Resources: 6 added, 0 changed, 0 destroyed.

  4. 結果を確認します。

terraform show コマンドを実行する

作業ディレクトリで次のコマンドを実行して、Terraform によって作成されたリソースの詳細をクエリします。

terraform show

image

ECS コンソールにログインする

ECS コンソール にログインします。左側のナビゲーションウィンドウで、[インスタンスとイメージ] > [インスタンス] を選択します。上部のナビゲーションバーで、ECS インスタンスが作成されたリージョンを選択します。この例では、[中国 (北京)] を選択して、作成された ECS インスタンスを表示します。

image

参考資料