0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AzureAdvent Calendar 2021

Day 2

Terraform Cloud で AKS を作成する

Last updated at Posted at 2021-12-01

はじめに

Qiita の Azure Advent Calendar 2021 の 2 日目として投稿させていただきます!

Software Design 8月号の『DevOps エンジニアのための節約簡単時短レシピ』にて、Terraform Cloud で AWS 環境を構築する手順が解説されていました。

Terraform Cloud も触ってみたいなと思っていたので、AWS ではなく Azure、自分の好きな AKS (Azure Kubernetes Service) を作成する手順を実施してみましたので、公開しておこうと思います。

GitHub リポジトリの作成

まず、GitHub にて Terraform のコードを保存するリポジトリを作成します。

Terraform Cloud からアクセスできれば良いため、今回はプライベートリポジトリで作成しました。

Azure 側サービスプリンシパルの作成

Terraform Cloud から Azure リソースを操作する際に利用するサービスプリンシパルを作成しておきます。

az ad sp create-for-rbac -n '<SERVICE PRINCIPAL NAME>' --role Owner

上記を実行すると、下記の JSON が出力されますので控えておきます。

{
  "appId": "<A NEW GUID>",
  "displayName": <SERVICE PRINCIPAL NAME>,
  "name": "<SERVICE PRINCIPAL NAME>",
  "password": "<SECRET STRING>",
  "tenant": "<TENANT ID>"
}

Terraform Cloud の準備

Terraform Cloud の環境を作成します。とりあえず登録して組織名を決めれば OK です。

Workspace の作成

Choose Type にて Version control workflow を選択し、Connect VCS では GitHub を選択して、先ほど作成したリポジトリとの連携を作成します。

Azure 認証情報の登録

作成後の画面にて Variables タブから Azure への認証情報を登録していきます。

先ほどの手順で控えた文字列を利用し、Key と Value を Environment variable として登録します。最低でも ARM_CLIENT_SECRETSensitive にチェックを入れておきましょう。

Key Value
ARM_CLIENT_ID <appId>
ARM_CLIENT_SECRET <password>
ARM_TENANT_ID <tenant>
ARM_SUBSCRIPTION_ID <Subscription ID>

image.png

backend.tf の作成

GitHub リポジトリのフォルダにて、バックエンドにて Terraform Cloud を設定するよう backend.tf を作成します。

backend.tf
terraform {
  backend "remote" {
    organization = "<TERRAFORM CLOUD ORGANIZATION NAME>"

    workspaces {
      name = "<TERRAFORM CLOUD WORKSPACE NAME>"
    }
  }
}

リソースグループの作成

動作確認も兼ねて、リソースグループを Terraform Cloud から作成してみます。

provider.tf の作成

Terraform のプロバイダーを指定するため、provider.tf を作成します。

provider.tf
terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 2.0"
    }
    azuread = {
      source  = "hashicorp/azuread"
      version = ">= 2.0"
    }
  }
}

provider "azurerm" {
  features {}
}

az-rg.tf の作成

リソースグループを作成する tf ファイルを作成します。

provider.tf
resource "azurerm_resource_group" "rg" {
  name     = "rg-terracloudtest"
  location = "japaneast"
}

ここまでできたら、GitHub に push しておきます。

デプロイしてみる

Terraform Cloud 上で「Start new plan」をクリックします。
image.png
Plan チェックは OK っぽいですね。問題なさそうなら「Confirm & Apply」をクリックします。
image.png
実行が完了しました。

Azure portal 上で確認してみると…
image.png
ちゃんと作成されていました🤗

AKS の作成

いよいよ、AKS を作成してみます。AKS を作成する際のドキュメントは、下記のあたりを参考にします。

tf ファイルの作成

簡単なものですが、作成した tf ファイルは下記のようになりました。

provider.tf
resource "azurerm_kubernetes_cluster" "example" {
  name                = "ndsou-terracloud-aks1"
  location            = "japaneast"
  resource_group_name = rg.name
  dns_prefix          = "ndsou-terracloud-aks1"

  default_node_pool {
    name       = "default"
    node_count = 1
    vm_size    = "Standard_D2_v2"
  }

  identity {
    type = "SystemAssigned"
  }
}

output "client_certificate" {
  value = azurerm_kubernetes_cluster.example.kube_config.0.client_certificate
}

output "kube_config" {
  value = azurerm_kubernetes_cluster.example.kube_config_raw

  sensitive = true
}

GitHub リポジトリに push します。

デプロイ!

push すると、自動で Plan が開始されます。もし開始されていなければ、手動で開始しましょう。
image.png
Plan チェックは OK っぽいですね。問題なさそうなら「Confirm & Apply」をクリックします。
image.png
さすがに AKS クラスターを作成するので時間がかかりますが、しばらく経つと実行が完了しました。

Azure portal 上で確認してみると…

image.png
image.png
ちゃんと作成されていました🤗

おわりに

Azure 的な IaC は ARM Template とか Bicep とか色々と触っていますが、Terraform 良いですね。

Bicep も書きやすくて良いのですが、何より AWS なども使うマルチクラウドな場面でも統一的に利用できるのは嬉しいところです。Terraform 連携の Microsoft Docs も出てきていますし、エコシステム的にも連携は維持されていそうです。

基本 Azure しか使わないなら Bicep、他クラウドも色々使うなら Terraform、とかですかね。今のところ。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?