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

Elastic Compute Service:Terraform リファレンス

最終更新日:Aug 21, 2026

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

Terraform の基本機能

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

  • Terraform のコマンドラインインターフェイス (CLI) を使用すると、設定ファイルを Alibaba Cloud またはその他のサポートされているクラウドに簡単にデプロイし、そのバージョンを管理できます。仮想マシン、ストレージアカウント、ネットワークインターフェイスなどのインフラストラクチャを、クラウド リソース トポロジを記述する設定ファイルで定義できます。

  • Terraform はプロバイダーを通じて新しいインフラストラクチャをサポートしており、シンプルなテンプレート言語を使用して、Alibaba Cloud 上のクラウドインフラストラクチャを簡単に定義、プレビュー、デプロイできます。

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

Alibaba Cloud と Terraform の統合に関する詳細については、「Alibaba Cloud Provider」 をご参照ください。

Terraform のインストール

Cloud Shell

Alibaba Cloud Shell は、Terraform がプリインストールされた無料の運用保守 (O&M) 製品です。Cloud Shell で Terraform コマンドを直接実行できます。

まず、必要な権限を持つ有効な Alibaba Cloud アカウントがあることを確認してください。

次に、ブラウザを開き、Cloud Shell の URL にアクセスします: https://shell.alibabacloud.com

ログオン後、次のコマンドを実行します。

terraform

この出力は、Terraform が Cloud Shell に組み込まれており、すぐに使用できることを示しています。

image

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

手動インストール

コンパイル済みパッケージの使用

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

ダウンロードが完了したら、パッケージを /usr/local/bin に展開します。コピーが完了したら、Terraform の実行に影響を与えることなく、他のファイルを削除できます。

最後に、Terraform の展開先ディレクトリが PATH 環境変数に追加されていることを確認してください。この手順は、オペレーティングシステムによって異なります。

Windows

  1. [コントロールパネル] > [システム] > [システムの詳細設定] > [環境変数] に移動します。

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

  3. [編集] をクリックして変更を加えます。

  4. セミコロン (;) を使用してエントリを区切ります。例:c:\path;c:\path2

  5. 新しいコンソールを起動して変更を反映させます。

詳細については、「Windows でグローバルパスを定義する」をご参照ください。

macOSまたはLinux

PATH の設定を出力します。

echo $PATH

Terraform バイナリファイルをリストされている場所のいずれかに移動します。このコマンドは、バイナリファイルが Downloads フォルダーにあり、PATH に /usr/local/bin が含まれていることを前提としています。場所が異なる場合は、コマンド内のディレクトリをカスタマイズしてください。

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

詳細については、以下をご参照ください。

ソースコードの使用

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

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

進捗情報が表示されます。プロセスが完了するまで待ちます。

image

コマンドが実行されると、現在のディレクトリに terraform という名前の新しいディレクトリが作成されます。cd コマンドを使用してこのディレクトリに移動します。

cd terraform

次に、go install コマンドを実行します。このコマンドはソースコードをコンパイルし、terraform という名前の実行可能バイナリファイルを $GOPATH/bin ディレクトリに作成します。

go install

次の情報は、コンパイルが進行中であることを示しています。続行する前に、プロセスが終了するまで待ちます。

image

注:zsh: command not found: go というメッセージが表示された場合は、Go 環境をインストールする必要があります。

最後に、$GOPATH/bin ディレクトリがシステムの PATH 環境変数に含まれていることを確認してください。PATH を設定する方法は、オペレーティングシステムによって異なります。

macOSまたはLinux

go install コマンドは、terraform 実行可能ファイルを $GOPATH/bin ディレクトリにインストールします。このディレクトリが PATH 環境変数に含まれていることを確認する必要があります。

echo $PATH

Terraform バイナリファイルを、PATH に含まれるディレクトリに移動してください。次のコマンドは、バイナリファイルがお客様の Downloads フォルダーにあり、PATH に /usr/local/bin が含まれていることを前提としています。設定が異なる場合は、コマンド内のディレクトリを適宜変更してください。

export PATH=$PATH:$(go env GOPATH)/bin

詳細については、以下をご参照ください。

Windows

  1. [コントロールパネル] > [システム] > [システムの詳細設定] > [環境変数] に移動します。

  2. [システム変数] セクションで、下にスクロールして PATH 変数を見つけます。

  3. [編集] をクリックして変更を加えます。

  4. セミコロン (;) を使用してエントリを区切ります (例:c:\path;c:\path2)。

  5. 新しいコンソールを開いて変更を反映させます。

詳細については、「Windows でグローバルパスを定義する」をご参照ください。

macOS Homebrew

Homebrew は、macOS で人気のあるパッケージマネージャーです。Homebrew を使用すると、簡単なコマンドで Terraform をインストールできます。

ステップ 1. すべての HashiCorp Homebrew パッケージのリポジトリである HashiCorp タップをインストールします。

brew tap hashicorp/tap

ステップ 2. install コマンドを実行して Terraform をインストールします。

brew install hashicorp/tap/terraform
重要

install コマンドは、最新バージョンをインデックス化してインストールします。後で最新バージョンにアップグレードする場合は、upgrade コマンドを実行できます。

Terraform を最新バージョンにアップグレードするには、まず Homebrew を更新する必要があります。

brew update

次に、upgrade コマンドを実行して最新バージョンにアップグレードします。

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. デスクトップで、[This PC] を右クリックし、タイプ > [システムの詳細設定] > [環境変数] > [システム環境変数]/[ユーザー環境変数] を選択します。

  2. [システム変数] または [ユーザー変数] セクションで、作成 をクリックして、次の環境変数を作成します。

    変数名

    変数の説明

    値

    ALICLOUD_ACCESS_KEY

    AccessKey ID

    <yourAccessKeyID>

    ALICLOUD_SECRET_KEY

    AccessKey シークレット

    <yourAccessKeySecret>

    ALICLOUD_SECURITY_TOKEN (オプション)

    Security Token Service (STS) 認証情報を使用する場合、この変数を設定する必要があります。

    <yourSTSToken>

Linux

重要

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

# AccessKey ID
$ export ALICLOUD_ACCESS_KEY="<yourAccessKeyID>"
# AccessKey シークレット
$ export ALICLOUD_SECRET_KEY="<yourAccessKeySecret>"
# STS 認証情報を使用する場合は、ALICLOUD_SECURITY_TOKEN を設定する必要があります。
$ export ALICLOUD_SECURITY_TOKEN="<yourSTSToken>"

環境変数を設定した後は、プロバイダーブロックで認証情報を宣言する必要はありません。リージョンのみを宣言できます。

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

リージョンは、ALICLOUD_REGION 環境変数を使用して設定することもできます。リージョンが明示的に宣言されておらず、この環境変数も設定されていない場合、デフォルト値は cn-beijing です。

サポートされるリソース

説明

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

リソース

alicloud_auto_provisioning_group: ECS 自動プロビジョニンググループを管理します。スポットインスタンスと従量課金インスタンスを使用してクラスターを迅速にデプロイできます。

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

alicloud_ecs_activation: ECS アクティベーションコードを管理します。説明、登録可能なインスタンスの最大数、デフォルトのインスタンス名プレフィックス、コードを使用できるホストの IP アドレス範囲、コードの有効期間などのパラメータを設定して、マネージドインスタンスを一括登録できます。

alicloud_ecs_auto_snapshot_policy: ECS 自動スナップショットポリシーを管理します。自動スナップショットを作成する曜日と時刻、スナップショット保持期間などのパラメータを設定できます。このリソースは、スナップショットのクロスリージョンレプリケーションと暗号化もサポートしています。

alicloud_ecs_auto_snapshot_policy_attachment: 自動スナップショットポリシーを指定されたディスクにアタッチします。自動スナップショットポリシー ID とディスク ID を指定して、事前定義されたポリシーをディスクに適用できます。

alicloud_ecs_capacity_reservation: Alibaba Cloud でキャパシティ予約を管理します。特定のインスタンスタイプのリソースを予約して、必要なときに指定された数のインスタンスを起動できるようにします。

alicloud_ecs_command: Alibaba Cloud ECS インスタンスでコマンドを管理します。Base64 でエンコードされたコマンドコンテンツ、説明、カスタムパラメータの有効化、コマンド名、タイムアウト期間、コマンドタイプなどのパラメータを指定して、事前定義されたスクリプトコマンドを実行できます。

alicloud_ecs_dedicated_host: Alibaba Cloud で専用ホストを管理します。ホストタイプ、課金方法、自動更新サイクル、ホスト名、説明などのパラメータを設定できます。

alicloud_ecs_dedicated_host_cluster: Alibaba Cloud で専用ホストクラスターを管理します。クラスター名、説明、ゾーン、タグなどのパラメータを設定して、専用ホストリソースを一元的に管理および整理できます。

alicloud_ecs_deployment_set: Alibaba Cloud でデプロイメントセットを管理します。デプロイメント戦略、デプロイメントセット名、説明などのパラメータを指定して、高可用性や低レイテンシなどの特定の目標に合わせて ECS インスタンスの分散を管理できます。

alicloud_ecs_disk: Alibaba Cloud でディスク (データディスク) を管理します。ディスクタイプ、サイズ、暗号化ステータス、スナップショット ID、パフォーマンスレベル、タグなどのパラメータを設定して、さまざまなシナリオのストレージ要件を満たすことができます。

alicloud_ecs_disk_attachment: Alibaba Cloud ECS インスタンスでのディスクのアタッチメントとデタッチを管理します。インスタンス ID とディスク ID を指定して関連付けることができます。インスタンスと一緒にディスクをリリースしたり、ディスクをシステムディスクとしてアタッチしたりすることもできます。

alicloud_ecs_elasticity_assurance: Alibaba Cloud で弾力性保証を管理します。これにより、特定のリージョンで指定されたインスタンスタイプに対して一定量のコンピューティングリソースキャパシティが予約されます。

alicloud_ecs_hpc_cluster: Alibaba Cloud でハイパフォーマンスコンピューティング (HPC) クラスターを管理します。名前と説明を指定して、HPC クラスターの基本情報を設定できます。

alicloud_ecs_image_component: Alibaba Cloud でイメージコンポーネントを管理します。ビルドまたはテストコンポーネントのコンテンツ、タイプ、適用可能なオペレーティングシステム、その他のメタデータを定義できます。これらのコンポーネントは、カスタムイメージを作成する際に再利用できます。

alicloud_ecs_image_pipeline: Alibaba Cloud でイメージパイプラインを管理します。ベースイメージ、ビルドコンテンツ、インスタンスタイプ、その他の設定を指定して、カスタムイメージの作成と管理を自動化できます。

alicloud_ecs_image_pipeline_execution: Alibaba Cloud でイメージパイプラインタスクを実行して、定義されたイメージパイプラインからカスタムイメージを作成します。イメージパイプライン ID を指定してイメージビルドタスクをトリガーし、タスクのステータスと結果を監視できます。

alicloud_ecs_invocation: ECS インスタンスでのコマンドの呼び出しを管理、実行します。1 つまたは複数の ECS インスタンスで指定されたコマンドを実行し、実行結果を取得できます。

alicloud_ecs_key_pair: ECS インスタンスのキーペアを管理、作成します。

alicloud_ecs_key_pair_attachment: ECS キーペアを指定された ECS インスタンスにアタッチします。

alicloud_ecs_launch_template: ECS 起動テンプレートを管理します。事前定義された設定を使用して ECS インスタンスを迅速に作成およびデプロイすることで、効率を向上させ、一貫性を確保できます。

alicloud_ecs_network_interface: ECS ネットワークインターフェイスを管理します。インスタンスのネットワーク接続を設定および管理できます。柔軟なプライベート IP 割り当てポリシーをサポートし、複雑なネットワーク環境と高可用性設計に適しています。

alicloud_ecs_network_interface_attachment: Elastic Network Interface (ENI) を Alibaba Cloud ECS インスタンスにアタッチします。これにより、インスタンスのネットワーク機能が拡張され、複数の IP アドレスの追加や、より複雑なネットワーク設定の実装が可能になります。

alicloud_ecs_network_interface_permission: ECS ネットワークインターフェイスの権限を管理します。

alicloud_ecs_prefix_list: Alibaba Cloud ECS サービスのプレフィックスリストを管理します。

alicloud_ecs_session_manager_status: Alibaba Cloud ECS サービスのセッションマネージャーのステータスを管理します。セッション管理機能を有効または無効にして、ECS インスタンスへのアクセスと管理を制御できます。

alicloud_ecs_snapshot: Alibaba Cloud でディスクスナップショットを管理します。指定されたディスクからデータをバックアップして、将来の復旧やアーカイブに使用できます。

alicloud_ecs_snapshot_group: Alibaba Cloud でディスクグループのスナップショットを管理します。

alicloud_ecs_storage_capacity_unit: Alibaba Cloud ECS サービスのストレージ容量ユニットを管理します。

alicloud_image: 既存の ECS インスタンスから作成された、Alibaba Cloud のカスタムイメージを管理します。

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

alicloud_image_export: カスタムイメージと同じリージョンの Object Storage Service (OSS) バケットにカスタムイメージをエクスポートします。

alicloud_image_import: ECS へのイメージのインポートを管理します。

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

alicloud_instance: ECS インスタンスリソースを管理します。

alicloud_ecs_key_pair: ECS キーペアリソースを管理します。

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

alicloud_ecs_launch_template: ECS 起動テンプレートリソースを管理します。

alicloud_ecs_network_interface: ECS ネットワークインターフェイスリソースを管理します。

alicloud_ecs_network_interface_attachment:ECS ネットワークインターフェイスアタッチメントリソースを管理します。

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

alicloud_reserved_instance: リザーブドインスタンスリソースを管理します。

alicloud_security_group: ECS セキュリティグループリソースを管理します。

alicloud_security_group_rule: セキュリティグループルールリソースを管理します。

alicloud_ecs_snapshot:ECS スナップショットリソースを管理します。

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

Terraform による ECS リソースの作成と管理

このセクションでは、Terraform を使用して Elastic Compute Service (ECS) リソースを作成および管理する例を紹介します。

  1. 作業ディレクトリを作成します。このディレクトリに、main.tf という名前の設定ファイルを作成します。次のコードで、ECS インスタンスと、必要な VPC、セキュリティグループ、vSwitch リソースを作成します。コードを main.tf ファイルにコピーします。

    # Alibaba Cloud リージョンを指定するため、変数 "region" を定義します。デフォルト値は "cn-beijing" です。
    variable "region"{
      default = "cn-beijing"
    }
    
    # "region" 変数で定義されたリージョンを使用するよう、Alibaba Cloud プロバイダーを設定します。
    provider "alicloud"{
      region = var.region
    }
    
    # ECS インスタンスタイプを指定するため、文字列変数 "instance_type" を定義します。デフォルト値は "ecs.e-c1m1.large" です。
    variable "instance_type" {
      type    = string
      default = "ecs.e-c1m1.large"
    }
    
    # データソースを使用してアベイラビリティーゾーン情報をクエリします。指定されたインスタンスタイプ、リソース作成タイプ (vSwitch など)、ディスクカテゴリで結果をフィルタリングします。
    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}"
      vpc_id              = alicloud_vpc.vpc.id
    }
    
    # すべてのインバウンド TCP トラフィックを許可するセキュリティグループルールを作成し、以前に作成したセキュリティグループに関連付けます。
    resource "alicloud_security_group_rule" "allow_all_tcp" {
      type              = "ingress"
      ip_protocol       = "tcp"
      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"
    }
    
    # vSwitch を作成し、一意性を確保するために名前にランダムな整数を含め、VPC とアベイラビリティーゾーンに関連付けます。
    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" # 要件に合わせてパスワードを変更してください。
    }
  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 インスタンスを表示します。

image

リファレンス