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

Auto Scaling:Terraform を使用して Auto Scaling リソースを作成する

最終更新日:Mar 28, 2025

このトピックでは、Terraform テンプレートを使用して、スケーリンググループ、スケーリング設定、スケーリングルール、およびその他の Auto Scaling リソースを初めて Auto Scaling を使用するときに作成する方法について説明します。

説明

サンプルコードは数クリックで実行できます。サンプルコードを実行する

始める前に

  • Resource Access Management (RAM) ユーザーと AccessKey ペアを作成します。Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対する完全な権限を持っています。Alibaba Cloud アカウントの認証情報が漏洩した場合、セキュリティリスクが発生する可能性があります。RAM ユーザーを使用し、RAM ユーザーの AccessKey ペアを作成することをお勧めします。詳細については、「RAM ユーザーを作成する」および「AccessKey ペアを作成する」をご参照ください。

  • RAM ユーザーに権限を付与します。RAM は、クラウドリソースの権限を効率的に制御し、安全なマルチユーザーコラボレーションをサポートします。最小権限の原則 (PoLP) を適用することにより、必要なアクセスのみをユーザーに付与し、過剰な権限によるセキュリティリスクを軽減できます。詳細については、「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 Explorer を提供しています。Terraform Explorer にログインすれば、Terraform をインストールすることなく Terraform を使用できます。この方法は、追加費用なしで Terraform を迅速かつ便利に使用およびデバッグしたい場合に適しています。

    • Cloud Shell で Terraform を使用します。Terraform は Cloud Shell にプリインストールされており、ID 資格情報が構成されています。Cloud Shell で Terraform コマンドを直接実行できます。この方法は、低コストで Terraform を迅速かつ便利に使用およびデバッグしたい場合に適しています。

    • オンプレミスマシンに Terraform をインストールして構成する。この方法は、ネットワークの状態が悪い場合や、カスタム開発環境を使用する場合に適しています。

必要なリソース

Terraform を使用して Auto Scaling リソースを作成する

この例では、Terraform を使用して、スケーリンググループ、スケーリング設定、スケーリングルールなどの 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 ブロックを計画します。
    }
    
    # VPC 内に 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 = "新しいセキュリティグループ"
      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"
    }
    
    # この例では、最大 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

    次の情報が返された場合、Terraform は初期化されています。

    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

    image

    Auto Scaling コンソールにログインする

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

    image

リソースをクリアする

Terraform を使用して作成または管理された上記の不要になったリソースを解放するには、次のコマンドを実行します。詳細については、「共通コマンド」をご参照ください。

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 ブロックを計画します。
}

# VPC 内に 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 = "新しいセキュリティグループ"
  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"
}

# この例では、最大 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
}