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

Container Compute Service:Terraform を使用した ACS クラスターの作成

最終更新日:Jun 04, 2026

Terraform を使用してコードとしてのインフラストラクチャ (IaC) を定義し、ACS クラスターを作成します。

前提条件

  • Container Compute Service (ACS) が有効化されている必要があります。

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

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

    このポリシーは、ACS クラスターとそれに依存するクラウドリソースを作成、表示、削除する権限を RAM ユーザーに付与します。

    {
      "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 0.12.28 以降が必要です。terraform --version を実行してバージョンを確認してください。

使用するリソース

説明

予期しない料金の発生を避けるため、不要になったリソースは解放してください。

  • alicloud_cs_managed_kubernetes:ACS クラスターを作成します。このリソースは、ACK マネージドクラスターを作成するためのリソースに基づいています。

Terraform を使用した ACS クラスターの作成

以下の例では、デフォルトのアドオンである alibaba-log-controller (ロギング)、arms-prometheus (モニタリング)、managed-coredns (DNS)、および managed-metrics-server (メトリクス) を備えた ACS クラスターを作成します。

  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 = "vSwitch のアベイラビリティーゾーン。"
  default     = ["cn-guangzhou-a", "cn-guangzhou-b"]
}
variable "k8s_name_prefix" {
  description = "ACS クラスターの作成に使用される名前のプレフィックス。"
  default     = "acs-example"
}
variable "acs_version" {
  type        = string
  description = "対象の Kubernetes バージョン。"
  default     = "1.31.1-aliyun.1"      # 必要に応じて値を変更します。
}
variable "service_cidr" {
  type        = string
  description = "Kubernetes Service の 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 ゲートウェイを作成するかどうかを指定します。デフォルト値:true。                                                           
  control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"] # ログ収集の対象となるコントロールプレーンコンポーネント。
  deletion_protection          = true
  # RRSA を使用した ServiceAccount の設定。
  enable_rrsa                  = true
  timezone                     = "Asia/Shanghai"
  service_cidr                 = var.service_cidr  # 必要に応じて値を変更します。
  slb_internet_enabled         = false  # API サーバー用にインターネット向けのロードバランサーを作成するかどうかを指定します。デフォルト値:false。
  dynamic "addons" {  # アドオン管理。
    for_each = var.cluster_addons
    content {
      name   = addons.value.name
      config = addons.value.config
    }
  }
}
説明

この設定は参考用です。必要に応じて変更してください。

  1. Terraform ランタイム環境を初期化します。

terraform init

成功した場合の期待される出力:

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 キーを押してください。成功した場合の期待される出力:

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 destroy を実行してください。terraform destroy コマンドについては、「共通コマンド」をご参照ください。

terraform destroy