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

Container Compute Service:Terraform を使用して ACS クラスターを作成する

最終更新日:Nov 09, 2025

このトピックでは、Terraform を使用して ACS クラスターを作成する方法について説明します。

前提条件

  • Container Compute Service (ACS) が有効化されている

  • ログインしているResource Access Management (RAM) ユーザー用にAccessKey ペアが作成されている。

    説明

    デフォルトでは、Alibaba Cloud アカウントは、このアカウントに属するすべてのリソースに対する完全な権限を持っています。RAM アカウントを使用することをお勧めします。RAM アカウントはリソース権限が制限されているため、認証情報が漏洩した場合の潜在的なセキュリティリスクを最小限に抑えることができます。

  • Terraform でコマンドを実行するために使用する RAM ユーザーに、次のポリシーがアタッチされている。このポリシーには、Terraform でコマンドを実行するために必要な最小限の権限が含まれています。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

    このポリシーにより、RAM ユーザーは ACS クラスターと依存するクラウドリソースを作成、表示、削除できます。

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "cs:CreateCluster",
            "cs:DescribeTaskInfo",
            "cs:DescribeClusterDetail",
            "cs:GetClusterCerts",
            "cs:CheckControlPlaneLogEnable",
            "cs:DeleteCluster",
            "cs:GetClusterAuditProject",
            "cs:ModifyCluster",
            "vpc:DescribeNatGateways"
          ],
          "Resource": "*"
        }
      ]
    }
  • Terraform 環境を準備します。Terraform を使用するには、次のいずれかの方法を使用できます。

    • Terraform Explorer で Terraform を使用する: Alibaba Cloud は Terraform のためのオンライン環境を提供します。Terraform をインストールする必要はありません。オンラインでログインして Terraform を使用できます。この方法は、ゼロコストで効率的かつ便利に Terraform を使用およびデバッグする必要があるシナリオに適しています。

    • Cloud Shell: Terraform コンポーネントは Alibaba Cloud Cloud Shell にプリインストール済みで、認証情報も設定されています。Cloud Shell で Terraform コマンドを直接実行できます。この方法は、低コストで効率的かつ便利に Terraform を使用およびアクセスする必要があるシナリオに適しています。

      • RAM ユーザーまたはロールが Cloud Shell を使用するには、Alibaba Cloud アカウントが RAM ユーザーまたはロールに権限を付与する必要があります。詳細については、「ID 管理」をご参照ください。

    • Resource Orchestration Service (ROS) で Terraform を使用する: ROS は Terraform のマネージド機能を提供します。Terraform テンプレートを作成して、Alibaba Cloud、AWS、または Azure のリソースを定義し、リソースパラメーターとリソース間の依存関係を設定できます。

    • Terraform をローカルにインストールして設定する: この方法は、ネットワーク接続が悪い場合や、開発環境をカスタマイズする必要があるシナリオに適しています。

    重要

    Terraform 0.12.28 以降をインストールする必要があります。現在のバージョンを確認するには、terraform --version コマンドを実行します。

リソース

説明

この例では、特定のリソースに対して料金が発生します。不要になったリソースはリリースまたはサブスクライブ解除してください。

Terraform を使用して ACS クラスターを作成する

この例では、いくつかのデフォルトコンポーネントがインストールされた ACS クラスターを作成します。これには、managed-csiprovisioner (ストレージコンポーネント)、ebs-token-controller (ストレージコンポーネント)、alibaba-log-controller (ログ収集コンポーネント)、および arms-prometheus (モニタリングコンポーネント) が含まれます。

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

provider "alicloud" {
  region      = var.region_id
}
variable "region_id" {
  type        = string
  default     = "cn-guangzhou"
}
variable "availability_zone" {
  type        = list(string)
  description = "The availability zones of vswitches."
  default     = ["cn-guangzhou-a", "cn-guangzhou-b"]
}
variable "k8s_name_prefix" {
  description = "The name prefix used to create ACS cluster."
  default     = "acs-example"
}
variable "acs_version" {
  type        = string
  description = "Desired Kubernetes version. "
  default     = "1.31.1-aliyun.1"      # 必要に応じて変更
}
variable "service_cidr" {
  type        = string
  description = "The Kubernetes services CIDR. "
  default     = "10.13.0.0/16"      # 必要に応じて変更
}

# ACS クラスターにインストールするコンポーネントを指定します。alibaba-log-controller (ログ収集コンポーネント)、arms-prometheus (モニタリングコンポーネント)、managed-coredns、managed-metrics-server を含みます。
variable "cluster_addons" {   # 必要に応じて変更
  type = list(object({
    name   = string
    config = string
  }))
  default = [
    {
      "name"   = "arms-prometheus",
      "config" = "",
    },
    {
      "name"   = "alibaba-log-controller",
      "config" = "",
    },
    {
      "name"   = "managed-coredns",
      "config" = "",
    },
    {
      "name"   = "managed-metrics-server",
      "config" = "",
    }
  ]
}
# デフォルトのリソース名。
locals {
  k8s_name_acs     = substr(join("-", [var.k8s_name_prefix, "acs"]), 0, 63)
  log_project_name = "log-for-${local.k8s_name_acs}"
}

# ACS クラスターを作成します。
resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = local.k8s_name_acs   # Kubernetes クラスターの名前。
  cluster_spec                 = "ack.pro.small"
  profile                      = "Acs"
  version                      = var.acs_version # 作成するクラスターのバージョンに置き換えます。
  zone_ids                     = var.availability_zone
  is_enterprise_security_group = true
  control_plane_log_ttl        = "30"    
  new_nat_gateway              = true   # Kubernetes クラスターの作成時に新しい NAT Gateway を作成するかどうかを指定します。デフォルト値: true。                                                           
  control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"] # コントロールプレーンのログ。
  deletion_protection          = true
  # Service Account の RAM ロール (RRSA) 機能を有効にして、サービスアカウントを設定します。
  enable_rrsa                  = true
  timezone                     = "Asia/Shanghai"
  service_cidr                 = var.service_cidr  # 必要に応じて変更
  slb_internet_enabled         = false  # API サーバー用のインターネット向け Server Load Balancer を作成するかどうかを指定します。デフォルト値: false。
  dynamic "addons" {  # コンポーネント管理。
    for_each = var.cluster_addons
    content {
      name   = lookup(addons.value, "name", var.cluster_addons)
      config = lookup(addons.value, "config", var.cluster_addons)
    }
  }
}
説明

この設定ファイルは参照用です。実際のニーズに応じて変更してください。

  1. 次のコマンドを実行して Terraform を初期化します。

terraform init

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

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.
  1. 実行計画を作成し、変更をプレビューします。

terraform plan
  1. 次のコマンドを実行してクラスターを作成します。

terraform apply

実行中に、プロンプトが表示されたら yes と入力し、[Enter] を押します。コマンドが完了するのを待ちます。次の情報が表示された場合、ACS クラスターは正常に作成されています。

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_cs_managed_kubernetes.default: Creation complete after 5m48s [id=ccb53e72ec6c447c990762800********]
...

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
  1. 結果を検証する

terraform show コマンドを実行する

次のコマンドを使用して、Terraform によって作成されたリソースの詳細情報をクエリできます。

terraform show

ACS コンソールにログインする

Container Compute Service コンソールにログインして、作成されたクラスターを表示します。

リソースのリリース

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

terraform destroy