Terraform は、宣言的な設定ファイルを使用して Alibaba Cloud リソースの完全なライフサイクルを管理できるオープンソースの Infrastructure as Code (IaC) ツールです。このトピックでは、ビジュアルインターフェイスまたはコマンドラインを使用して、最初の Alibaba Cloud リソースを作成するための Terraform のクイックスタート方法について説明します。
方法の選択
Terraform には、ビジュアルとコマンドラインの 2 つの方法があります。ニーズに合った方法を選択してください。
|
方法 |
シナリオ |
メリット |
制限 |
|
初回使用、パラメーターに不慣れな場合、迅速なデバッグ |
グラフィカルなフォームを使用してリソースを設定します。コーディングは不要です。 |
単一リソースの操作のみをサポートします。 |
|
|
迅速な評価、本番環境、複雑なオーケストレーション |
複数リソースのオーケストレーションと状態管理をサポートします。 |
CLI 環境が必要です。 |
CLI 方式を選択した場合は、Cloud Shell またはローカルインストールを使用して環境を準備します。
Terraform Explorer の使用
Terraform Explorer は、Terraform をベースに構築された Alibaba Cloud のオンラインデバッグツールです。フォームから Terraform の設定ファイルを生成し、オンラインで実行します。詳細については、「Explorer の概要」をご参照ください。
このセクションでは、Virtual Private Cloud (VPC) の作成を例に、Terraform Explorer を使用する 2 つの方法、カスタムパラメーターとサンプルテンプレートについて説明します。
カスタムパラメーターを使用したリソースの作成
ニーズに基づいてパラメーターを設定するには、次の手順を実行します:
-
Terraform Explorer にログインします。[Product] と Resource Type を選択します。[Resource Documentation] を参照してパラメーターを入力し、Initiate をクリックします。
VPC を作成するための主要なパラメーターを以下に示します。パラメーターの詳細については、「alicloud_vpc」をご参照ください。
パラメーター名
説明
値の例
vpc_name
VPC 名
tf-test-vpc
cidr_block
VPC のプライベート CIDR ブロック
192.168.0.0/16
description
VPC の説明
Terraform を使用して作成された VPC です。
-
Template Details タブで、パラメーターが正しいことを確認し、Plan をクリックして実行計画を表示します。
terraform { required_providers { alicloud = { source = "aliyun/alicloud" version = "1.231.0" } } } provider "alicloud" { region = "cn-beijing" } resource "alicloud_vpc" "default" { cidr_block = "192.168.0.0/16" description = "Terraform を使用して作成された VPC です。" vpc_name = "tf-test-vpc" } -
プレビューの詳細 タブで、作成されるリソースに関する情報を確認し、[Execute] をクリックします。
プレビュー結果には [Success] ステータスとメッセージ
Plan: 1 to add, 0 to change, 0 to destroyが表示されます。これは、alicloud_vpc.defaultリソースが作成されることを示します。cidr_blockは192.168.0.0/16で、descriptionはTerraform を使用して作成された VPC です。となります。Terraform は実行後に他の属性を生成します。 -
実行の詳細 タブで結果を表示します。実行が成功すると、メッセージ「
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.」が表示されます。実行が失敗した場合は、エラーメッセージに基づいてパラメーターを修正し、再試行してください。 -
Resource Details タブで、作成されたリソースに関する情報を表示します。
リソースアドレスは
alicloud_vpc.defaultです。このページには、以下を含む VPC のさまざまな属性が表示されます:-
cidr_block:
192.168.0.0/16 -
name:
tf-test-vpc -
description:
Terraform を使用して作成された VPC です。 -
create_time: VPC が作成された時刻。
-
classic_link_enabled や enable_ipv6 などのネットワーク設定。
-
resource_group_id、route_table_id、router_id などの関連リソース情報。
-
-
(任意) リソースの変更:パラメーターを調整して Plan & Apply をクリックし、手順 2 から 4 を繰り返します。更新が成功すると、メッセージ「
Apply complete! Resources: 0 added, 1 changed, 0 destroyed.」が表示されます。 -
(任意) リソースの破棄:実行の詳細 タブで Destroy Resources をクリックします。次に、プレビューの詳細 タブで [Execute] をクリックします。
操作が完了すると、[Execution Details] タブに [Success] ステータスとメッセージ
Apply complete! Resources: 0 added, 0 changed, 1 destroyedが表示され、1 つの VPC リソースが破棄されたことを確認できます。
サンプルテンプレートを使用したリソースの作成
リソースのパラメーターに不慣れな場合や、すぐに始めたい場合は、Terraform Explorer のサンプルテンプレートを使用できます。
-
Terraform Explorer にログインします。対応する [Product]、Resource Type、[Sample Template] を選択し、Initiate をクリックします。右側の [Sample Template] タブでテンプレートの詳細を表示できます。
左側の [Input Parameters] エリアで、テンプレートで必要なパラメーターを表示および変更できます。たとえば、[name] パラメーターを
terraform-exampleに設定できます。また、[Add Parameter] をクリックして、さらにパラメーターを追加することもできます。 -
Template Details タबで、Plan & Apply をクリックします。
このサンプルテンプレートは Terraform 形式です。このテンプレートは
alicloud_vpcリソースを定義しており、ipv6_ispを BGP に、cidr_blockを10.0.0.0/8に、enable_ipv6を true に設定するなどのパラメーターが含まれています。 -
実行の詳細 タブで、実行結果を表示できます。
-
(任意) 作成したリソースを破棄するには、Destroy Resources タブの 実行の詳細 をクリックします。次に、プレビューの詳細 タブで [Execute] をクリックします。
Continue や Destroy Resources などの操作は、[Call History] からも実行できます。
Terraform CLI の使用
コマンドラインから Terraform を使用するには、CLI 環境を準備し、設定ファイルを記述し、コマンドを実行してリソースを作成します。次のいずれかの方法を選択して、Terraform CLI 環境をセットアップします:
-
Cloud Shell (推奨):インストール不要。迅速な評価や学習に最適です。
-
ローカルインストール:本番環境、継続的インテグレーション、長期的な使用に最適です。
Cloud Shell
Alibaba Cloud Cloud Shell は無料の運用保守ツールです。Terraform がプリインストールされており、ID 認証情報も設定済みです。Terraform コマンドを直接実行できます。
Cloud Shell へのログイン
ブラウザを開き、Cloud Shell にアクセスします。詳細については、「Cloud Shell の使用」をご参照ください。
RAM ユーザーとしてログインしてください。Alibaba Cloud アカウントのセキュリティを確保するため、必要な場合を除き、Alibaba Cloud アカウントを使用してクラウドリソースにアクセスすることは避けてください。
Terraform バージョンの切り替え
Cloud Shell のデフォルトの Terraform バージョンは古い場合があります。すべての機能が正しく動作するように、バージョン 1.2 以降に切り替えてください。
-
現在の Terraform バージョンを確認します:
terraform versionshell@Alicloud:~$ terraform version Terraform v0.12.31 Your version of Terraform is out of date! The latest version is 1.12.2. You can update by downloading from https://www.terraform.io/downloads.html -
Cloud Shell で利用可能な Terraform のバージョンを一覧表示します:
tfenv listshell@Alicloud:~$ tfenv list 1.12.2 1.9.5 1.5.7 1.3.7 * 0.12.31 (set by /usr/local/tfenv/version) -
特定のバージョン (例:1.12.2) に切り替えます:
tfenv use 1.12.2shell@Alicloud:~$ tfenv use 1.12.2 Switching default version to v1.12.2 Switching completed
ローカルインストール
本番環境や複雑なオーケストレーションに最適です。まず Terraform をインストールし、ID 認証情報を設定します。
パッケージマネージャーを使用したインストール (推奨)
macOS
Homebrew を使用してインストールします:
# Homebrew でパッケージの場所を定義するために、HashiCorp のタップを追加します
brew tap hashicorp/tap
# Terraform をインストールします
brew install hashicorp/tap/terraform
最新バージョンに更新します:
# Homebrew を更新します
brew update
# Terraform をアップグレードします
brew upgrade hashicorp/tap/terraform
Windows
Chocolatey を使用してインストールします:
choco install terraform
Linux
たとえば、yum パッケージマネージャーを使用する場合:
yum install -y yum-utils
yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
yum install terraform
手動インストール
パッケージマネージャーが利用できない場合は、手動でインストールします。
コンパイル済みバイナリの使用
-
Terraform のウェブサイトからお使いのオペレーティングシステム用の ZIP ファイルをダウンロードします。アーカイブを展開します。
-
terraformバイナリファイルをシステムのPATHにあるディレクトリに移動します:-
macOS または Linux
mv ~/Downloads/terraform /usr/local/bin/ -
Windows
-
[コントロールパネル] > [システム] > [システムの詳細設定] > [環境変数] を開きます。
-
[システム環境変数] で PATH を選択し、[編集] をクリックします。
-
Terraform ディレクトリへのパスを追加します。他のエントリとはセミコロンで区切ります (例:
c:\path;c:\path2)。 -
変更を有効にするために、新しいコマンドラインウィンドウを開きます。
-
-
ソースからのコンパイル
まず Go 開発環境をインストールする必要があります。
-
Terraform のソースリポジトリをクローンします:
git clone https://github.com/hashicorp/terraform.git -
ディレクトリに移動し、ソフトウェアをコンパイルしてインストールします。
cd terraform go installコンパイル後、バイナリは
$GOPATH/bin/ディレクトリに配置されます。 -
$GOPATH/binがシステムの PATH に追加されていることを確認してください。コンパイル済みバイナリの使用の手順 2 と同じ手順です。
インストールの確認
このコマンドを実行して、Terraform が正しくインストールされていることを確認してください:
terraform version
コマンドが正常に実行され、バージョン番号が表示されれば、インストールは完了です。
例:ECS インスタンスの作成
この例では、ECS インスタンスを作成することで、VPC の作成 → vSwitch の作成 → セキュリティグループの作成 → ECS インスタンスの作成という、Terraform の完全なリソースオーケストレーションのワークフローを示します。
-
作業ディレクトリを作成し、Terraform 設定ファイル
main.tfを作成します:mkdir tf-demo && cd tf-demo vim main.tf次のコードを
main.tfにコピーします:provider "alicloud" { region = var.region } # リソース作成のリージョン variable "region" { default = "cn-beijing" } # ECS インスタンス名 variable "instance_name" { default = "tf-cloudshell-test" } # ECS インスタンスタイプ variable "instance_type" { default = "ecs.n2.small" } # アウトバウンドパブリック帯域幅。値が 0 の場合は、パブリックネットワークアクセスがないことを意味します。 variable "internet_bandwidth" { default = 10 } # ECS OS イメージ variable "image_id" { default = "ubuntu_18_04_64_20G_alibase_20190624.vhd" } # ECS システムディスクタイプ variable "disk_category" { default = "cloud_efficiency" } # ECS インスタンスのログインパスワード variable "password" { default = "TF-test@1234" } # VPC の作成 resource "alicloud_vpc" "vpc" { vpc_name = "tf_test_foo" cidr_block = "172.16.0.0/12" } # インスタンスタイプとディスクカテゴリに基づいてアベイラビリティーゾーンを検索 data "alicloud_zones" "default" { available_disk_category = var.disk_category available_resource_creation = "VSwitch" available_instance_type = var.instance_type } # vSwitch の作成 resource "alicloud_vswitch" "vsw" { vpc_id = alicloud_vpc.vpc.id cidr_block = "172.16.0.0/21" zone_id = data.alicloud_zones.default.zones.0.id } # セキュリティグループの作成 resource "alicloud_security_group" "default" { security_group_name = "default" vpc_id = alicloud_vpc.vpc.id } # インバウンドセキュリティグループルールの作成 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.default.id cidr_ip = "0.0.0.0/0" } resource "alicloud_instance" "instance" { # セキュリティグループのアタッチ security_groups = [alicloud_security_group.default.id] instance_type = var.instance_type system_disk_category = var.disk_category image_id = var.image_id instance_name = var.instance_name # vSwitch の指定 vswitch_id = alicloud_vswitch.vsw.id internet_max_bandwidth_out = var.internet_bandwidth password = var.password }重要この例のセキュリティグループルールは、すべての TCP ポート (1–65535) を開き、任意の IP アドレス (0.0.0.0/0) からのトラフィックを許可します。これはテスト環境でのみ使用してください。本番環境では、必要に応じてポートとソース IP アドレスを制限してください。
-
Terraform の作業ディレクトリを初期化します:
terraform init -
実行計画をプレビューして、作成されるリソースを確認します:
terraform planshell@Alicloud:~/tf-demo$ terraform plan data.alicloud_zones.default: Reading... data.alicloud_zones.default: Read complete after 1s [id=1373912221] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # alicloud_instance.instance will be created + resource "alicloud_instance" "instance" { + availability_zone = (known after apply) + cpu = (known after apply) + create_time = (known after apply) + credit_specification = (known after apply) + deployment_set_group_no = (known after apply) + description = (known after apply) + dry_run = false + enable_jumbo_frame = (known after apply) + expired_time = (known after apply) + host_name = (known after apply) + http_endpoint = (known after apply) + http_put_response_hop_limit = (known after apply) + http_tokens = (known after apply) + id = (known after apply) + image_id = "ubuntu_18_04_64_20G_alibase_20190624.vhd" + instance_charge_type = (known after apply) + instance_name = "tf-cloudshell-test" + instance_type = "ecs.n2.small" + internet_charge_type = (known after apply) + internet_max_bandwidth_in = (known after apply) + internet_max_bandwidth_out = 10 + io_optimized = (known after apply) + ipv6_address_count = (known after apply) + ipv6_addresses = (known after apply) + key_name = (known after apply) + maintenance_action = (known after apply) + memory = (known after apply) + network_interface_id = (known after apply) + network_interface_traffic_mode = (known after apply) + os_name = (known after apply) + os_type = (known after apply) + password = (sensitive value) + period = (known after apply) + primary_ip_address = (known after apply) -
リソースを作成します。出力「
Apply complete!」は成功を意味します:terraform applyApply complete! Resources: 5 added, 0 changed, 0 destroyed. -
これらのリソースを解放するには、次を実行します:
terraform destroy