Terraform を使って ROSA HCP をデプロイする ( Black Belt Sample 版)

# 0.はじめに

`ROSA` には `Classic` ( Control Plane node がユーザーの AWS アカウント内に作られるもの) と、`HCP` (Hosted Control Plane: Compute Node だけがユーザーのAWSアカウントに作られるもの）の2種類のタイプがあります。

この記事は、`ROSA HCP` に関する記事です。
過去に ROSA クラスターを作成していない綺麗な環境での実行を想定しています。

(ROSA Classic を Terraform でインストールする記事は[こちら](https://qiita.com/Yuhkih/items/38a8ea5c2e1ae470ebf4)です。)


ROSA は CLIでも作成できるのですが、Enterprise 向けの製品だけあって、オプションが山のようにあります。
Terraform を使う事で、いつも使うオプション構成で気軽にクラスターを作成したり、削除する事が可能です。

手順自体は、[こちら](https://cloud.redhat.com/experts/rosa/terraform/hcp/) の `Red Hat` の `Black Belt` チームの記事を元に、日本向けにアレンジを加えてます。


:::note info
2024/07/31 追記
この手順書で使われている `Red Hat` `Black Belt` チームの作成した `terraform`サンプルは、`ROSA Classic` と `ROSA HCP` の両方に対応しているなどやや複雑です。

今後は、`ROSA HCP` のクラスターがデフォルトになっていくので、これから ROSA をはじめるのであれば、[こちら]( https://qiita.com/Yuhkih/items/e20e9c9bff0c8c525381) の公式ドキュメントの `terraform`サンプルをベースにした記事を参照するのをお勧めします。
:::

# 1. 各種 CLI を準備する

・AWS CLI コマンド
・git コマンド
・terraform コマンド
・rosa / oc コマンド
・jq コマンド

が構成されている事が前提です。[こちらの](https://yuhkih.github.io/mcs-docs/docs/rosa-hcp/create-delete/rosa-hcp-prepare/) ページのガイドを参考にしてください。

また、クラスターを作成するために、トークンを `Red Hat` のサイトから取得する必要があります。アカウントの作成は無料になっているので、アカウントを持ってない場合は、[こちら](https://access.redhat.com/)から作成しておきます。

# 2. ROSA HCP を有効化する

HCP をはじめて使う場合は、① AWS コンソールから ROSA HCP を有効化、② AWSアカウントとRed Hat アカウントへの紐付けを行う。という2つの手順を実行する必要があります。

[こちら](https://yuhkih.github.io/mcs-docs/docs/rosa-hcp/create-delete/rosa-hcp-enable/) のページの「3. ROSA HCP の有効化」を実行してください。

# 3. サンプルの設定ファイルをダウンロードする

以下のコマンドでダウンロードできます。(terraform のテンプレートは Red Hat の Black Belt チーム(Technical Sales) によって開発されたサンプルで、製品ではありません) 

```
git clone https://github.com/yuhkih/terraform-rosa
```

ダウンロードしたディレクトリに移動します。

```
cd terraform-rosa/
```

# 4. ROSA の token を取得してログインする。

ROSA クラスターを作成するための [https://console.redhat.com/openshift/token](https://console.redhat.com/openshift/token) から Token を取得します。以下の部分をコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/99425/77da49db-aced-e380-76f3-c9ebfc1cf740.png)

取得した Token を変数にセットします。

```
rosa login --token="上記で取得した token の文字列" 
```

# 5. 作成する Cluster のパラメーターを設定する。

この Template のデフォルトは US 向けになっているので、幾つか変数を変更します。

変数の変更の仕方は2通りあり、1つは、`variables.tf` を直接編集する方法です。もう一つは、環境変数 で上書きする方法です(`TF_VAR_変数名`でも `variables.tf` の内容を実行時に上書きできます)

先ほどログイン時に使ったトークンが、ローカルの設定ファイルに保存されているので、それを環境変数にセットします。

```
export TF_VAR_token="$(jq -r .refresh_token ~/.config/ocm/ocm.json)"
```

クラスター名を設定します。

```
export TF_VAR_cluster_name="$(whoami)-hcp"
```

`admin` という名前の `cluster-admins` グループに所属する HTPasswd ユーザーが作成されます。`admin` 用のパスワードを設定します。

```
export TF_VAR_admin_password="$(whoami)-Passw0rd12345!"
```

`developer` という名前の、特にグループに所属しない汎用の HTPasswd ユーザーが作成されます。`developer` 用のパスワードを設定します。(`developer` を作成したくない場合は、パスワードを空にしてください) 

```
export TF_VAR_developer_password="$(whoami)-Passw0rd12345!"
```

public クラスターを作成します。private にするとインターネットからアクセスできなくなるので、アクセス方法を別途準備する必要があります。

```
export TF_VAR_private=false
```

`4.16.1` はこの記事作成時点での最新です。

```
export TF_VAR_ocp_version=4.16.1
```

HCP用なので `true` を設定します。

```
export TF_VAR_hosted_control_plane=true
```

デフォルでは USのリージョンに作られるので、東京リージョンに設定します。

```
export TF_VAR_region="ap-northeast-1"
```

# 6. ROSA Cluster の作成

terraform を初期化します。
```
terraform init
```

もし `TF_VAR_<変数名>` の環境変数で上書きするのではなく、`variables.tf`ファイルを直接編集した場合は、`validate`で編集ミスが無いか確認します。

```
terraform validate
```

プランを作成します。

```
terraform plan -out rosa.plan
```


以下でクラスターが作成が開始されます。(途中で確認を求められるので `yes`と入力します)

```
terraform apply rosa.plan
```

途中経過のログが流れはじめ、20分ほど待つと完了するはずです。




# 7. ROSA Cluster の基本コマンド

ログイン
```
oc login $(terraform output -raw cluster_api_url) --username admin --password $TF_VAR_admin_password
```

コンソールの URL の表示 (CLIと同じ UserID/パスワードでログインできます）

```
oc whoami --show-console
```



# 8. ROSA クラスターの削除

以下で ROSA クラスターを削除できます。

```
terraform destroy
```