さくらのクラウドでRHELが使えるようになったのでTerraformで構築してみた

はじめに

はじめまして、さくらインターネット SRE室のアルビです。

先日、さくらのクラウドでRed Hat Enterprise Linux(RHEL)が使えるようになったという発表がありましたので、早速Terraformとcloud-initを使ってサーバ構築を試してみました。

前提条件

さくらのクラウド上に構築しますので、さくらのクラウドを利用するための準備が必要です。具体的には以下のものをご用意ください。

  • さくらインターネットの会員ID
  • さくらのクラウドのアカウント名
  • さくらのクラウドのAPIキー
    • APIキーの作成方法については、さくらのクラウドのマニュアルをご覧ください
    • ”作成・削除”の権限で作成してください
    • あとで必要になるので、アクセストークンとアクセストークンシークレットは控えておいてください

また、さくらのクラウドにおけるRHELは、以下のスペックでのみ利用可能ですので、ご注意ください。

  • 東京第2ゾーン
  • コア専有プラン(Intel Xeon Processor)
  • 2〜8コア

Terraformの環境構築

Terraformの環境構築については、さくナレに良い記事がありますので、そちらをご参照ください。

さくらのクラウドでTerraformを使ってみる

上記の記事のうち、「準備」の項に記載されている内容(「Terraformのインストール」「Terraform Provider for SakuraCloudをインストールする」)を行ってから、以降の作業に進みます。

構成ファイルの作成

環境構築ができたら、Terraformの構成ファイル(tfファイル)を記述します。今回は以下のようなファイルを作成してください。

# Configure the SakuraCloud Provider
terraform {
  required_providers {
    sakuracloud = {
      source = "sacloud/sakuracloud"

      # We recommend pinning to the specific version of the SakuraCloud Provider you're using
      # since new versions are released frequently
      version = "2.25.4"
      #version = "~> 2"
    }
  }
}

provider "sakuracloud" {
  # More information on the authentication methods supported by
  # the SakuraCloud Provider can be found here:
  # https://docs.usacloud.jp/terraform/provider/

  # profile = "..."
  token = "アクセストークンを記載"
  secret = "アクセストークンシークレットを記載"
  zone = "tk1b" #東京第2ゾーンに設定する必要があります
}

variable "password" {
  default = "パスワードを記載"
}

data sakuracloud_archive "rhel9" {
  filter {
    tags = ["distro-rhel", "distro-ver-9.3", "cloud-init"]
  }
}

resource "sakuracloud_disk" "example" {
  name              = "example"
  source_archive_id = data.sakuracloud_archive.rhel9.id
}

resource "sakuracloud_server" "example" {
  name       = "example"
  disks      = [sakuracloud_disk.example.id]
  core       = 2
  memory   = 4
  commitment = "dedicatedcpu" #コア専有プランを指定する必要があります

  description = "description"
  tags        = ["app=web", "stage=staging"]

  network_interface {
    upstream = "shared"
  }

  user_data = join("\n", [
    "#cloud-config",
    yamlencode({
      hostname: "example",
      password: local.password,
      chpasswd: {
        expire: false,
      }
      ssh_pwauth: false,
      ssh_authorized_keys: [
        file("~/.ssh/id_rsa.pub"),
      ],
    }),
  ])
}

上記のtfファイルの要点を解説します。

まず、アーカイブリソースの指定は以下の箇所で行っています。

data sakuracloud_archive "rhel9" {
  filter {
    tags = ["distro-rhel", "distro-ver-9.3", "cloud-init"]
  }
}

通常、tfファイルにおいてはos_typeを使用してアーカイブの指定を行いますが、これは基本的にディスクの修正を行うアーカイブ向けの設定であり、今回のような設定においてはこの書き方は非対応です。今回の場合、filterパラメータ内にtagsで指定する必要がありますのでご注意ください。

また、利用可能なアーカイブはusacloudコマンドで確認できます。以下は実行例です。(なお、usacloudコマンドを実行するには、事前にインストールと設定が必要です。くわしくはUsacloud導入ガイドをご覧ください)

$ usacloud archive ls --tags distro-rhel --zone=tk1b
+------+--------------+-----------------------------------+-------------------------+--------+-------------------------+
| Zone |      ID      |               Name                |          Tags           | Scope  |       Description       |
+------+--------------+-----------------------------------+-------------------------+--------+-------------------------+
| tk1b | 113601433593 | Red Hat Enterprise Linux 9.4 6... | [@size-extendable ar... | shared | <div class="lang ja"... |
| tk1b | 113601433594 | Red Hat Enterprise Linux 8.10 ... | [@size-extendable ar... | shared | <div class="lang ja"... |
+------+--------------+-----------------------------------+-------------------------+--------+-------------------------+

(上記の実行結果は2024年7月現在のものです。結果に表示されるRHELのバージョンは随時更新されます)

Terraformの実行

構成ファイルが書けたらTerraformを実行します。

まずは、Terraformの初期化を行います。

terraform init

次に、設定ファイルを適用してインフラを構築します。

terraform plan
terraform apply

プロンプトに対してyesと入力し処理を進めます。

結果確認

Terraformが正常に実行されると、指定したゾーンにRHELのサーバーが作成されます。結果はコントロールパネルから確認できます。もしくは、サーバーのIPアドレスに対してSSH経由でアクセスすることでも確認できます。

注意点

  • さくらのクラウドにおけるRHELは、日割・時間割による料金設定はなく、月額のみの提供となります。
  • RHELのライセンス料金はディスクに対して課金されます。そのためサーバーを起動していなくともRHELがディスクにインストールされている状態であればライセンス料金が発生します。なお、アーカイブとして保管されているものについてライセンス料金は発生しません。

参考情報