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 に組み込まれており、すぐに使用できることを示しています。

Cloud Shell の使用方法の詳細については、「Cloud Shell の使用」をご参照ください。
手動インストール
コンパイル済みパッケージの使用
Terraform 公式サイトにアクセスします。お使いのオペレーティングシステム用の ZIP パッケージを見つけてダウンロードします。
ダウンロードが完了したら、パッケージを /usr/local/bin に展開します。コピーが完了したら、Terraform の実行に影響を与えることなく、他のファイルを削除できます。
最後に、Terraform の展開先ディレクトリが PATH 環境変数に追加されていることを確認してください。この手順は、オペレーティングシステムによって異なります。
Windows
-
[コントロールパネル] > [システム] > [システムの詳細設定] > [環境変数] に移動します。
-
[システム変数] で、
PATHが見つかるまで下にスクロールします。 -
[編集] をクリックして変更を加えます。
-
セミコロン (;) を使用してエントリを区切ります。例:
c:\path;c:\path2 -
新しいコンソールを起動して変更を反映させます。
詳細については、「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
進捗情報が表示されます。プロセスが完了するまで待ちます。

コマンドが実行されると、現在のディレクトリに terraform という名前の新しいディレクトリが作成されます。cd コマンドを使用してこのディレクトリに移動します。
cd terraform
次に、go install コマンドを実行します。このコマンドはソースコードをコンパイルし、terraform という名前の実行可能バイナリファイルを $GOPATH/bin ディレクトリに作成します。
go install
次の情報は、コンパイルが進行中であることを示しています。続行する前に、プロセスが終了するまで待ちます。

注:zsh: command not found: go というメッセージが表示された場合は、Go 環境をインストールする必要があります。
最後に、$GOPATH/bin ディレクトリがシステムの PATH 環境変数に含まれていることを確認してください。PATH を設定する方法は、オペレーティングシステムによって異なります。
macOSまたはLinux
go install コマンドは、terraform 実行可能ファイルを $GOPATH/bin ディレクトリにインストールします。このディレクトリが PATH 環境変数に含まれていることを確認する必要があります。
echo $PATHTerraform バイナリファイルを、PATH に含まれるディレクトリに移動してください。次のコマンドは、バイナリファイルがお客様の Downloads フォルダーにあり、PATH に /usr/local/bin が含まれていることを前提としています。設定が異なる場合は、コマンド内のディレクトリを適宜変更してください。
export PATH=$PATH:$(go env GOPATH)/bin
詳細については、以下をご参照ください。
Windows
-
[コントロールパネル] > [システム] > [システムの詳細設定] > [環境変数] に移動します。
-
[システム変数] セクションで、下にスクロールして
PATH変数を見つけます。 -
[編集] をクリックして変更を加えます。
-
セミコロン (;) を使用してエントリを区切ります (例:
c:\path;c:\path2)。 -
新しいコンソールを開いて変更を反映させます。
詳細については、「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


Windows の Chocolatey
Chocolatey は、Windows で人気のあるパッケージマネージャーです。Chocolatey を使用すると、簡単なコマンドで Terraform をインストールできます。
choco install terraform
Terraform の認証
アクセス認証情報を環境変数に保存することで、Terraform を認証できます。 Terraform コマンドを実行すると、設定テンプレートで認証情報が明示的に宣言されていない場合、Terraform はこれらの変数から認証情報を取得しようとします。以下のセクションでは、環境変数を設定する方法について説明します。
Windows
-
デスクトップで、[This PC] を右クリックし、 を選択します。
-
[システム変数] または [ユーザー変数] セクションで、作成 をクリックして、次の環境変数を作成します。
変数名
変数の説明
値
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)、セキュリティグループなど、インフラストラクチャコンポーネントを定義するために使用される新しいオブジェクトです。
Terraform による ECS リソースの作成と管理
このセクションでは、Terraform を使用して Elastic Compute Service (ECS) リソースを作成および管理する例を紹介します。
-
作業ディレクトリを作成します。このディレクトリに、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" # 要件に合わせてパスワードを変更してください。 } -
次のコマンドを実行して、Terraform ランタイム環境を初期化します。
terraform initTerraform が正常に初期化されると、次の出力が表示されます。
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. -
次のコマンドを実行して、設定を適用します。
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. -
結果の確認
terraform show コマンドの実行
作業ディレクトリで、次のコマンドを実行して、Terraform が作成したリソースの詳細をクエリします。
terraform show

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

リファレンス
-
その他のチュートリアルについては、「Terraform チュートリアル」をご参照ください。
-
一般的な Terraform コマンドの詳細については、「一般的なコマンド」をご参照ください。
-
Terraform は ROS でマネージドサービスとして利用できます。 ROS コンソール で Terraform テンプレートをデプロイできます。詳細については、「Terraform スタックを作成する」をご参照ください。