このトピックでは、Terraformを使用して、スケーリンググループ、スケーリング設定、スケーリングルールなどのAuto Scalingリソースを作成する方法について説明します。
前提条件
Terraformを使用する前に、次の要件が満たされていることを確認してください。
AccessKeyペアとAlibaba Cloudアカウントが作成されます。 AccessKeyペアは、Alibaba Cloud管理コンソールのAccessKey管理ページで確認できます。 AccessKeyペアの作成方法の詳細については、「AccessKeyペアの作成」をご参照ください。
Terraformがインストールされ、設定されます。 Terraformのインストール方法の詳細については、「ローカルPCでのTerraformのインストールと設定」および「Cloud ShellでのTerraformの使用」をご参照ください。
背景情報
Terraformはオープンソースのコードとしてのインフラストラクチャツールで、クラウドのインフラストラクチャとリソースを安全かつ効率的にプレビュー、設定、管理するために使用できます。 Terraformでは、リソースを作成、削除、クエリ、および変更するためのコードを記述できます。 詳細については、「Terraformの概要」をご参照ください。
Terraformには、terraform applyやterraform showなどのリソースを管理するコマンド、リソースのステータスを管理するコマンド、その他の一般的なコマンドが用意されています。 詳細については、「リソース管理の一般的なコマンド」をご参照ください。
terraform apply: リソースを作成および変更します。 リソースのセキュリティを確保するには、コマンドの実行時に手動で操作する必要があります。 コマンドを続行するかどうかを手動で確認する必要があります。
terraform show: すべてのマネージドリソースとそのプロパティ値をTerraform状態で表示します。
手順
次のセクションでは、Terraformを使用してスケーリンググループ、スケーリング設定、およびスケーリングルールを作成する方法について説明します。 Terraformを使用して他のタイプのAuto Scalingリソースを管理する場合は、次の手順を繰り返すことができます。
仮想プライベートクラウド (VPC) とvSwitchを作成します。
この例では、cn-hangzhou-bゾーンにVPCとvSwitchが作成されます。
terraform.tfファイルを作成し、次のコードをファイルに追加して、ファイルを現在の作業ディレクトリに保存します。
次のコードでは、availability_zoneおよびcidr_blockパラメーターの値は参照専用です。 ビジネス要件に基づいてパラメーターを設定できます。 vSwitchが使用可能なゾーンを選択する方法については、「リージョンとゾーン」をご参照ください。 VPCとvSwitchを作成する前に、ネットワークプランを作成する必要があります。 詳細については、「ネットワークの計画」をご参照ください。
resource "alicloud_vpc" "vpc" { name = "tf_test_vpc" cidr_block = "172.16.0.0/12" // Specify a private CIDR block for the VPC. } resource "alicloud_vswitch" "vsw" { vpc_id = alicloud_vpc.vpc.id cidr_block = "172.16.0.0/21" // Specify a private CIDR block for the vSwitch. availability_zone = "cn-hangzhou-b" // Specify a zone for the vSwitch. }
terraform applyコマンドを実行して、VPCとvSwitchを作成します。
terraform showコマンドを実行して、VPCとvSwitchを表示します。
VPCコンソールでVPCとvSwitchのプロパティを表示することもできます。
前の手順で作成したVPCで、セキュリティグループを作成します。 次に、すべてのIPアドレスからのアクセスを許可するセキュリティグループルールを追加します。
terraform.tfファイルに次のコードを追加します。
resource "alicloud_security_group" "security" { name = "tf_test_security" 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.security.id cidr_ip = "0.0.0.0/0" }
terraform applyコマンドを実行してセキュリティグループを作成し、セキュリティグループルールを追加します。
terraform showコマンドを実行して、セキュリティグループとセキュリティグループルールを表示します。
Elastic Compute Service (ECS) コンソールでセキュリティグループとセキュリティグループルールを表示することもできます。
スケーリンググループを作成します。
この例では、最大100個のインスタンスを含むことができるスケーリンググループが作成されます。
terraform.tfファイルに次のコードを追加します。
resource "alicloud_ess_scaling_group" "group" { scaling_group_name="tf_test_scalinggroup" min_size=0 max_size=100 vswitch_ids=[alicloud_vswitch.vsw.id] }
terraform applyコマンドを実行して、スケーリンググループを作成します。
terraform showコマンドを実行して、スケーリンググループを表示します。
Auto scalingコンソールでスケーリンググループを表示することもできます。
スケーリング設定を作成します。
terraform.tfファイルに次のコードを追加します。
この例では、ECSインスタンスの作成に使用できるスケーリング設定が作成されています。
resource "alicloud_ess_scaling_configuration" "configuration" { scaling_group_id = alicloud_ess_scaling_group.group.id instance_type = "ecs.hfc7.xlarge" image_id = "aliyun_2_1903_x64_20G_alibase_20210120.vhd" security_group_id = alicloud_security_group.security.id scaling_configuration_name = "tf_test_scalingconfiguration" system_disk_category = "cloud_essd" spot_strategy = "SpotWithPriceLimit" force_delete = true }
terraform applyコマンドを実行して、スケーリング設定を作成します。
terraform showコマンドを実行して、スケーリング設定を表示します。
Auto scalingコンソールでスケーリング設定を表示することもできます。
スケーリングルールを作成します。
terraform.tfファイルに次のコードを追加します。
resource "alicloud_ess_scaling_rule" "rule" { scaling_group_id = alicloud_ess_scaling_group.group.id adjustment_type = "QuantityChangeInCapacity" adjustment_value = 1 }
terraform applyコマンドを実行して、スケーリングルールを作成します。
terraform showコマンドを実行して、スケーリングルールを表示します。
Auto scalingコンソールでスケーリングルールを表示することもできます。
例
次のサンプルコードは、Terraformを使用してスケーリンググループ、スケーリング設定、およびスケーリングルールを作成する方法の例を示しています。
resource "alicloud_vpc" "vpc" {
name = "tf_test_vpc"
cidr_block = "172.16.0.0/12"
}
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "172.16.0.0/21"
availability_zone = "cn-hangzhou-b"
}
resource "alicloud_security_group" "security" {
name = "tf_test_security"
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.security.id
cidr_ip = "0.0.0.0/0"
}
resource "alicloud_ess_scaling_group" "group" {
scaling_group_name="tf_test_scalinggroup"
min_size=0
max_size=100
vswitch_ids=[alicloud_vswitch.vsw.id]
}
resource "alicloud_ess_scaling_configuration" "configuration" {
scaling_group_id = alicloud_ess_scaling_group.group.id
instance_type = "ecs.hfc7.xlarge"
image_id = "aliyun_2_1903_x64_20G_alibase_20210120.vhd"
security_group_id = alicloud_security_group.security.id
scaling_configuration_name = "tf_test_scalingconfiguration"
system_disk_category = "cloud_essd"
spot_strategy = "SpotWithPriceLimit"
force_delete = true
}
resource "alicloud_ess_scaling_rule" "rule" {
scaling_group_id = alicloud_ess_scaling_group.group.id
adjustment_type = "QuantityChangeInCapacity"
adjustment_value = 1
}