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

Auto Scaling:Terraform を使用した Auto Scaling リソースの作成

最終更新日:Jun 25, 2026

このトピックでは、Terraform を使用して、スケーリンググループ、スケーリング設定、スケーリングルールなどの初めての Auto Scaling リソースを作成する方法を説明します。

説明

このトピックのサンプルコードは、ワンクリックで実行できます。 サンプルコードを実行

前提条件

  • Alibaba Cloud アカウントはすべてのリソースに対する完全な権限を持っているため、アカウントの認証情報が漏洩すると重大なセキュリティリスクが生じます。RAM ユーザーを使用し、そのユーザーの AccessKey を作成することを推奨します。詳細については、「RAM ユーザーの作成」および「AccessKey の作成」をご参照ください。

  • RAM 認可により、クラウドリソースへのアクセス権限を管理できます。複数ユーザーによる共同作業をサポートし、過剰な権限によるセキュリティ脆弱性を防ぐため、ユーザーに必要最小限の権限のみを付与できます。詳細については、「RAM ユーザー権限の管理」をご参照ください。

    {
        "Version": "1",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ecs:CreateSecurityGroup",
                    "ecs:ModifySecurityGroupPolicy",
                    "ecs:DescribeSecurityGroups",
                    "ecs:ListTagResources",
                    "ecs:DeleteSecurityGroup",
                    "ecs:DescribeSecurityGroupAttribute",
                    "ecs:AuthorizeSecurityGroup",
                    "ecs:RevokeSecurityGroup"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "vpc:DescribeVpcAttribute",
                    "vpc:DescribeRouteTableList",
                    "vpc:DescribeVSwitchAttributes",
                    "vpc:DeleteVpc",
                    "vpc:DeleteVSwitch",
                    "vpc:CreateVpc",
                    "vpc:CreateVSwitch"
                ],
                "Resource": "*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "ess:CreateScalingGroup",
                    "ess:DescribeScalingGroups",
                    "ess:ListTagResources",
                    "ess:DeleteScalingGroup",
                    "ess:ModifyScalingGroup",
                    "ess:CreateScalingConfiguration",
                    "ess:DescribeScalingConfigurations",
                    "ess:ModifyScalingConfiguration",
                    "ess:CreateScalingRule",
                    "ess:DescribeScalingRules",
                    "ess:DeleteScalingRule"
                ],
                "Resource": "*"
            }
        ]
    }
  • Terraform ランタイム環境をセットアップします。次のいずれかの方法を使用できます。

    • Terraform Explorer で Terraform を使用する:Alibaba Cloud は Terraform 用のオンラインランタイム環境を提供しています。ログイン後、インストール不要でオンラインで Terraform を試すことができます。この無料の方法は、Terraform を素早く試し、デバッグするのに最適です。

    • Terraform を使用したリソースの迅速な作成:Terraform は Alibaba Cloud Cloud Shell にプリインストールされており、お客様の認証情報で設定済みです。Cloud Shell で直接 Terraform コマンドを実行できます。この方法は、迅速で便利、かつ低コストで Terraform にアクセスできます。

    • Terraform をローカルにインストールして設定する:この方法は、ネットワーク接続が不安定な場合や、カスタム開発環境が必要な場合に適しています。

使用するリソース

Auto Scaling リソースの作成

この例では、スケーリンググループ、スケーリング設定、スケーリングルールといった Auto Scaling リソースを作成します。

  1. 作業ディレクトリを作成し、main.tf という名前の設定ファイルを作成してから、次のコードを main.tf にコピーします。

    variable "region" {
      default = "cn-heyuan"
    }
    variable "instance_type" {
      default = "ecs.hfc7.xlarge"
    }
    variable "image_id" {
      default = "aliyun_2_1903_x64_20G_alibase_20210120.vhd"
    }
    variable "zone_id" {
      default = "cn-heyuan-b"
    }
    provider "alicloud" {
      region = var.region
    }
    # VPC を作成します。
    resource "alicloud_vpc" "vpc" {
      vpc_name   = "tf-test-vpc-wjt"
      cidr_block = "172.16.0.0/12" # VPC のプライベート CIDR ブロックを指定します。
    }
    # vSwitch を作成します。
    resource "alicloud_vswitch" "vsw" {
      vpc_id       = alicloud_vpc.vpc.id
      cidr_block   = "172.16.0.0/21" # vSwitch のプライベート CIDR ブロックを指定します。
      zone_id      = var.zone_id     # vSwitch のゾーンを選択します。
      vswitch_name = "tf-test-vswitch-wjt"
    }
    # セキュリティグループを作成します。
    resource "alicloud_security_group" "security" {
      name        = "tf_test_security"
      description = "New security group"
      vpc_id      = alicloud_vpc.vpc.id
    }
    # すべての IP アドレスからのトラフィックを許可するセキュリティグループルールを追加します。
    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"
    }
    # この例では、最大インスタンス数 100 のスケーリンググループを作成します。
    resource "alicloud_ess_scaling_group" "group" {
      scaling_group_name = "tf_test_scalinggroup"
      min_size           = 0
      max_size           = 100
      vswitch_ids        = [alicloud_vswitch.vsw.id]
    }
    # この例では、ECS インスタンス用のスケーリング設定を作成します。
    resource "alicloud_ess_scaling_configuration" "configuration" {
      scaling_group_id           = alicloud_ess_scaling_group.group.id
      instance_type              = var.instance_type
      image_id                   = var.image_id
      security_group_id          = alicloud_security_group.security.id
      scaling_configuration_name = "tf_test_scalingconfiguration"
      system_disk_category       = "cloud_essd"
      spot_strategy              = "SpotWithPriceLimit"
      active                     = true
      force_delete               = true
    }
    # スケーリングルールを作成します。
    resource "alicloud_ess_scaling_rule" "rule" {
      scaling_group_id = alicloud_ess_scaling_group.group.id
      adjustment_type  = "QuantityChangeInCapacity"
      adjustment_value = 1
    }
  2. 次のコマンドを実行して、Terraform ランタイム環境を初期化します。

    terraform init

    次の出力は、初期化が成功したことを示しています。

    Initializing the backend...
    Initializing provider plugins...
    - Checking for available provider plugins...
    - Downloading plugin for provider "alicloud" (hashicorp/alicloud) 1.90.1...
    ...
    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 plan
  4. 次のコマンドを実行して、リソースを作成します。

    terraform apply

    プロンプトが表示されたら、yes と入力し、Enter キーを押します。コマンドが完了するまで待ちます。次の出力は、Auto Scaling リソースが作成されたことを示しています。

    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
    ...
    alicloud_security_group_rule.allow_all_tcp: Creation complete after 0s [id=sg-f8z1mes******:ingress:tcp:1/65535:intranet:0.0.0.0/0:accept:1]
    alicloud_vswitch.vsw: Creation complete after 3s [id=vsw-f8ztgc4******]
    alicloud_ess_scaling_group.group: Creating...
    alicloud_ess_scaling_group.group: Creation complete after 2s [id=asg-f8z9mo******]
    ...
    Apply complete! Resources: 7 added, 0 changed, 0 destroyed.
  5. 結果の検証

    Terraform show

    次のコマンドを実行して、Terraform が作成したリソースの詳細を表示します。

    terraform show
    D:\tf>terraform show
    # alicloud_ess_scaling_configuration.configuration:
    resource "alicloud_ess_scaling_configuration" "configuration" {
        active                         = true
        credit_specification           = null
        force_delete                   = true
        host_name                      = null
        id                             = "xxx"
        image_id                       = "aliyun_2_1903_x64_20G_alibase_20210120.vhd"
        image_name                     = null
        instance_name                  = "ESS-Instance"
        instance_type                  = "ecs.hfc7.xlarge"
        internet_charge_type           = "PayByBandwidth"
        internet_max_bandwidth_in      = 0
        internet_max_bandwidth_out     = 0
        key_name                       = null
        override                       = false
        password_inherit                = false
        resource_group_id              = null
        role_name                      = null
        scaling_configuration_name     = "tf_test_scalingconfiguration"
        scaling_group_id               = "xxx"
        security_group_id              = "xxx"
        spot_strategy                  = "SpotWithPriceLimit"
        ...
        system_disk_auto_snapshot_policy_id = null
        system_disk_category           = "cloud_essd"
        system_disk_description        = null
        system_disk_encrypted          = false
        system_disk_name               = null
        system_disk_performance_level  = null
        system_disk_size               = 0
    }
    # alicloud_ess_scaling_group.group:
    resource "alicloud_ess_scaling_group" "group" {
        allocation_strategy                    = null
        az_balance                             = false
        default_cooldown                       = 300
        desired_capacity                       = 0
        group_deletion_protection              = false
        group_type                             = "ECS"
        health_check_type                      = "ECS"
        id                                     = "asg-xxx"
        launch_template_id                     = null
        launch_template_version                = null
        max_size                               = 100
        min_size                               = 0
        multi_az_policy                        = "PRIORITY"
        on_demand_base_capacity                = 0
        on_demand_percentage_above_base_capacity = 0
        removal_policies                       = [
            "OldestScalingConfiguration",
            "OldestInstance",
        ]
        resource_group_id                      = "xxx"
        scaling_group_name                     = "tf_test_scalinggroup"
        scaling_policy                         = "release"
        spot_allocation_strategy               = null
        spot_instance_remedy                   = false
        vswitch_ids                            = [
            "vsw-f8ztgc4ad3e7ft9evy38z",
        ]
    }

    Auto Scaling コンソール

    Auto Scaling コンソールにログインして、作成したスケーリンググループを表示します。

    上部メニューのリージョンセレクターで 中国 (河源) を選択します。[スケーリンググループ] ページで、tf_test_scalinggroup という名前のスケーリンググループを見つけ、そのステータスが 無効、タイプが ECS、最大インスタンス数が 100 であることを確認します。

リソースのクリーンアップ

Terraform で作成・管理しているリソースが不要になった場合は、次のコマンドを実行して破棄します。terraform destroy の詳細については、「一般的なコマンド」をご参照ください。

terraform destroy

サンプルコード

説明

このトピックのサンプルコードは、ワンクリックで実行できます。 サンプルコードを実行

サンプルコード

variable "region" {
  default = "cn-heyuan"
}
variable "instance_type" {
  default = "ecs.hfc7.xlarge"
}
variable "image_id" {
  default = "aliyun_2_1903_x64_20G_alibase_20210120.vhd"
}
variable "zone_id" {
  default = "cn-heyuan-b"
}
provider "alicloud" {
  region = var.region
}
# VPC を作成します。
resource "alicloud_vpc" "vpc" {
  vpc_name   = "tf-test-vpc-wjt"
  cidr_block = "172.16.0.0/12" # VPC のプライベート CIDR ブロックを指定します。
}
# vSwitch を作成します。
resource "alicloud_vswitch" "vsw" {
  vpc_id       = alicloud_vpc.vpc.id
  cidr_block   = "172.16.0.0/21" # vSwitch のプライベート CIDR ブロックを指定します。
  zone_id      = var.zone_id     # vSwitch のゾーンを選択します。
  vswitch_name = "tf-test-vswitch-wjt"
}
# セキュリティグループを作成します。
resource "alicloud_security_group" "security" {
  name        = "tf_test_security"
  description = "New security group"
  vpc_id      = alicloud_vpc.vpc.id
}
# すべての IP アドレスからのトラフィックを許可するセキュリティグループルールを追加します。
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"
}
# この例では、最大インスタンス数 100 のスケーリンググループを作成します。
resource "alicloud_ess_scaling_group" "group" {
  scaling_group_name = "tf_test_scalinggroup"
  min_size           = 0
  max_size           = 100
  vswitch_ids        = [alicloud_vswitch.vsw.id]
}
# この例では、ECS インスタンス用のスケーリング設定を作成します。
resource "alicloud_ess_scaling_configuration" "configuration" {
  scaling_group_id           = alicloud_ess_scaling_group.group.id
  instance_type              = var.instance_type
  image_id                   = var.image_id
  security_group_id          = alicloud_security_group.security.id
  scaling_configuration_name = "tf_test_scalingconfiguration"
  system_disk_category       = "cloud_essd"
  spot_strategy              = "SpotWithPriceLimit"
  active                     = true
  force_delete               = true
}
# スケーリングルールを作成します。
resource "alicloud_ess_scaling_rule" "rule" {
  scaling_group_id = alicloud_ess_scaling_group.group.id
  adjustment_type  = "QuantityChangeInCapacity"
  adjustment_value = 1
}