Terraform を使用して Container Service for Kubernetes (ACK) クラスターをコードとしてプロビジョニングおよび管理し、再現性とバージョン管理が可能なインフラストラクチャを実現します。
基本概念
リソースとデータソース
Terraform は、クラウドインフラストラクチャを管理するために 2 種類のオブジェクトタイプを使用します。
-
リソース — Terraform が作成および管理するオブジェクトです。各リソースブロックは、ACK クラスターやノードプールなど、1 つのインフラストラクチャオブジェクトを定義します。
-
データソース — 現在の構成外で作成されたリソースの属性を取得する読み取り専用クエリです。
例:
### データソース
# 2 vCPU と 4 GB のメモリを持つインスタンスタイプを一覧表示します。
# 参照: https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/instance_types
data "alicloud_instance_types" "c2g4" {
cpu_core_count = 2
memory_size = 4
}
### リソース
# Server Load Balancer (SLB) インスタンスを作成します。
# 参照: https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/slb
resource "alicloud_slb" "default" {
name = var.name
specification = "slb.s2.small"
vswitch_id = alicloud_vswitch.default.id
}
完全なリストについては、「Terraform で ACK を使用する」をご参照ください。
プラグイン
Terraform には 2 つのカテゴリのプラグインがあります。
-
[Terraform CLI] — 構成の計画、適用、破棄を行うためのコマンドラインツールです。
-
Terraform プロバイダー — Terraform 構成を特定のクラウド向けの API コールに変換するプラグインで、Terraform Registry で公開されています。
Alibaba Cloud は、中国で初めて Terraform を統合したクラウドプロバイダーです。Alibaba Cloud プロバイダー (terraform-provider-alicloud) は、コンピューティング、ストレージ、ネットワーキング、負荷分散、CDN、ミドルウェア、アクセス制御、データベースを含む 35 のサービスにわたって、163 のリソースと 113 のデータソースをサポートしています。
Alibaba Cloud プロバイダーをセットアップするには、「ローカル PC に Terraform をインストールして構成する」または「Cloud Shell で Terraform を使用する」をご参照ください。
ACK に Terraform を使用する理由
Terraform には、コンソール、CLI、または API を介して直接 ACK クラスターを管理する場合と比較して、いくつかの利点があります。
-
マルチクラウドデプロイメント — Alibaba Cloud、その他のクラウド、オンプレミスデータセンターにわたるインフラストラクチャを、1 つのツールチェーンと構成言語で管理できます。
-
自動化された再現可能なプロビジョニング — クラスター構成を一度定義すれば、開発、ステージング、本番環境全体で一貫して適用でき、構成ドリフトを排除します。
-
コードとしてのインフラストラクチャ (IaC) — クラスター構成をアプリケーションコードと一緒にバージョン管理に保存できます。変更を追跡し、プルリクエストで変更をレビューし、必要に応じてロールバックできます。
-
コスト削減 — 開発環境とテスト環境をオンデマンドで起動し、アイドル時には削除できます。変更を適用する前にコストへの影響を評価できます。
Terraform で ACK を使用する
ACK は、以下の Terraform リソースとデータソースをサポートしています。
リソース
| リソース | 説明 |
|---|---|
| alicloud_cs_managed_kubernetes | ACK マネージドクラスターを管理します |
| alicloud_cs_kubernetes | ACK 専用クラスターを管理します |
| alicloud_cs_serverless_kubernetes | ACK サーバーレスクラスターを管理します |
| alicloud_cs_edge_kubernetes | ACK エッジクラスターを管理します |
| alicloud_cs_kubernetes_node_pool | ノードプールを管理します |
| alicloud_cs_kubernetes_permissions | ロールベースアクセス制御 (RBAC) 権限を管理します |
| alicloud_cs_kubernetes_addon | クラスターアドオンを管理します |
データソース
| データソース | 説明 |
|---|---|
| alicloud_ack_service | ACK を有効化します |
| alicloud_cs_managed_kubernetes_clusters | すべての ACK マネージドクラスターを一覧表示します |
| alicloud_cs_kubernetes_clusters | すべての ACK 専用クラスターを一覧表示します |
| alicloud_cs_serverless_kubernetes_clusters | すべての ACK サーバーレスクラスターを一覧表示します |
| alicloud_cs_edge_kubernetes_clusters | すべての ACK エッジクラスターを一覧表示します |
| alicloud_cs_kubernetes_permissions | 指定された RAM ユーザーの権限を一覧表示します |
| alicloud_cs_kubernetes_addon_metadata | クラスターアドオンのメタデータを一覧表示します |
| alicloud_cs_kubernetes_addons | 利用可能なクラスターアドオンを一覧表示します |
| alicloud_cs_kubernetes_version | 利用可能な Kubernetes バージョンを一覧表示します |
クラスターインフラストラクチャ (VPC、ノードプール、RBAC) は、Kubernetes ワークロード (Deployments、Services) とは別の Terraform プロジェクトで管理してください。これらは変更の頻度が異なり、通常は異なるチームが管理しています。