AWSでのRHELサブスクリプションとGold Imageの使用方法

# はじめに
今まで`AWS`で`EC2`を使用するときには`Amazon Linux`しか使ったことが無かったのですが、仕事で`RHEL`を使う可能性があったので、クラウドで使用する場合のサブスクリプション関連を調べてみると、あまり紹介されている記事が無かったり、色々と迷ったりしたので備忘録として残そうと思います。

# RHELのサブスクリプションについて
オンプレミスのサーバを構築しているときにはよく`RHEL`をインストールして使っていましたが、サブスクリプションを登録しないと`yum`、`dnf`によるパッケージインストールができないという`RHEL`を使う上で面倒な作業の一つがあります。

`AWS`で使用する場合も、インスタンスを作成してサブスクリプション登録が必要と思いきや、`EC2`の利用料金にサブスクリプション代金も含まれていて、自前でサブスクリプション登録する必要がないパターンと、今まで通り自前で用意したサブスクリプションを適用するパターンがあるそうです。

`Amazon Machine Image`（以下`AMI`）ごとにサブスクリプションの登録有無や支払いが変わるので、以下より`AMI`ごとの違いをまとめていきます。

## AMI種別ごとの一覧
詳細は後ほど紹介しますが、先に`AMI`種別ごとの内容まとめを紹介。

|AMI種別|サポート|サブスク追跡|Red Hat Satelliteでの使用|AWSへの支払い|
|:--|:--|:--|:--|:--|
|マーケットプレイスAMI|AWS|不可|不可|サブスクとインフラ代|
|Gold Image|RedHat|可|可|インフラ代のみ|
|コミュニティAMI|AWS|不可|不可|サブスクとインフラ代|
|オンプレミスシステムから作成したカスタムAMI|RedHat|可|可|インフラ代のみ|

表の凡例

**【AMI種別】**
AMIの種別

**【サポート】**
`RHEL`関連の問い合わせを行うときの問い合わせ先はどこか

**【サブスク追跡】**
Red Hat カスタマーポータルからサブスクリプションの追跡/表示/移動が可能か

**【Red Hat Satelliteでの使用】**
Red Hat Satelliteで使用が可能か

**【AWSへの支払い】**
AWSのインフラ代のみ支払うのかサブスクリプションライセンスの代金もAWSに支払うのか

## マーケットプレイスAMIとコミュニティAMI
`AWS`で`RHEL`のイメージを使用する場合、`AMI`を使って`EC2`を起動して使うことになりますが、`AWS`提供のイメージを使うのか、自前のイメージを使うのか等で種別が異なります。

`EC2`ダッシュボードにある**AMIカタログ**を見ると、各種ベンダが自社アプリケーション等導入済みのAMIを提供している**マーケットプレイスAMI**と、ユーザが提供している**コミュニティAMI**があります。

`Red Hat`も所有者ID「**309956199498**」で各`RHEL`のイメージを公開しているため、`Red Hat`のイメージを使う場合は所有者ID「**309956199498**」で検索すると良いでしょう。

### AWS提供AMIのサポートと費用
OSに問題が発生したときの問い合わせは`AWS`を介して`Red Hat`に問い合わせる流れとなるため、直接`Red Hat`に問い合わせができない分、場合によっては解決に時間がかかる場合もあるかもしれません。

別途`Red Hat`と直接契約を行っていたりする場合は直接`Red Hat`に問い合わせても問題ありません。

また、費用についてはサブスクリプションのライセンス料を含め`AWS`の利用料に上乗せされる形となるため、わざわざ`Red Hat`のアカウントを作成したりする必要はありません。

- [Amazon EC2 での Red Hat Enterprise Linux のよくある質問](https://aws.amazon.com/jp/partners/redhat/faqs/)

### 個別ライセンスを付与した場合
マーケットプレイスAMIとコミュニティAMIは上述の通り、サブスクリプションライセンス費用も`EC2`の使用料に入っている方式となりますが、当てようと思えば自前で持っているサブスクリプションライセンスを付与することもできます。

自前のサブスクリプションライセンスを使えば`Red Hat Customer Portal`画面からサブスクリプションを管理することもできますが、`AWS`で提供している`AMI`はライセンス費用込みとなっているので、**AWSとRed Hatで二重請求となってしまいます。**

- [二重請求 - Red Hat PAYG イメージからプロビジョニングしたクラウドインスタンスで、すでに支払った Red Hat 製品のサブスクリプションを使用しています。なぜ Red Hat サブスクリプションに対して二重請求されるのでしょうか?](https://access.redhat.com/ja/articles/5855161#bdouble-billing---im-using-a-red-hat-product-subscription-ive-already-paid-for-on-a-cloud-instance-i-provisioned-from-a-red-hat-payg-image-why-am-i-paying-for-the-red-hat-subscription-twiceb-18)

自前のサブスクリプションを持ち込む場合、`Gold Image`を利用することで持ち込めるので、後ほど説明します。

### Red Hat Satelliteでの管理
`Red Hat Satellite`というサーバ管理ツールに登録することでデプロイや設定等一元管理することができますが、こちらもマーケットプレイスAMIとコミュニティAMIの`RHEL`を登録すると二重請求となってしまうので、利用したい場合は`Gold Image`を利用するようにしましょう。

- [AWS で利用できる RHEL AMI にはどのような種類がありますか?](https://access.redhat.com/ja/articles/7001748)

## Red Hat Gold Image
`Gold Image`というと、ミドルウェアや設定などを事前に行ったマシンイメージをテンプレートとして使用するゴールデンイメージが思い浮かぶ方が多いかと思いますが、今回の`Gold Image`とは、サブスクリプションライセンスを自前で割り当てる必要がある`RHEL`のイメージを`AWS`や`GCP`等のクラウド基盤に`Red Hat`から共有することで、ユーザ側で自前のサブスクリプションライセンスを使って管理するサービスとなります。

前述のように、デフォルトで`AWS`が提供している`RHEL`の`AMI`はライセンス込みのイメージとなるため、自前のサブスクリプションを使用する場合にはこちらの設定が必要となります。

### Red Hat提供AMIのサポートと費用
自前のサブスクリプションを使用することになるので、サポートは`Red Hat`と直接やり取りする形となります。

`Gold Image`で共有される`AMI`を使用すればサブスクリプションの費用はかからないので、`EC2`のインフラ費用のみ`AWS`に支払うこととなります。

### RHELのAMIの名前について
`Red Hat`が`AWS`に提供している`AMI`イメージの名前は命名規則で決められており、以下のような命名規則となっております。

- **初回リリース時の名前**
[Red Hat Product]-[Version]-[Virtualization Type]_[Red Hat Release Type]-[Release Date]-[Minor Version Release AMI Iteration]-[Subscription Model]-[EBS Volume Type]

- **初回リリース後の名前**
[Red Hat Product]-[Version]-[Virtualization Type]-[Release Date]-[Minor Version Release AMI Iteration]-[Subscription Model]-[EBS Volume Type]

上記の命名規則のうち、サブスクリプション的に重要なのは、「**Subscription Model**」で、「**Hourly2**」と「**Access2**」があります。

「**Hourly2**」の場合、時間課金の費用に含まれているタイプの`AMI`となり、`AWS`で管理されているマーケットプレイスAMIとコミュニティAMIがこちらにあたります。

- Hourly2の例
**RHEL-9.3.0_HVM-20240117-x86_64-49-Hourly2-GP3**

「**Access2**」の場合、サブスクリプションを自前で用意するタイプの`AMI`となり、`Gold Image`で`Red Hat`から共有される`AMI`はこちらになります。

- Access2の例
**RHEL-9.3.0_HVM-20240117-x86_64-49-Access2-GP3**

詳しくは以下公式ドキュメントを参照ください。

- [3.5.1. AWS 上のゴールド イメージの名前付けと識別](https://access.redhat.com/documentation/en-us/subscription_central/1-latest/html/red_hat_cloud_access_reference_guide/understanding-gold-images_cloud-access#con_naming-identifying-gold-images-aws.adoc_cloud-access)

# Gold Imageの使用方法
ここからは実際に`Gold Image`を使うための設定をしていきたいと思います。

`Gold Image`を使用するには`Red Hat`の「**[Red Hat Customer Portal](https://access.redhat.com/)**」から操作する必要があるため、あらかじめ`Red Hat`のアカウントを作成しておいてください。

`Gold Image`は`Red Hat Cloud Access`の無料特典として利用できるそうなので、以下より設定を行い、`AWS`で使えるようにしていきます。

## Red Hat Cloud Accessからのプロバイダ有効化
`Red Hat Customer Portal`画面の「**クラウドアクセス**」タブから「**新しいプロバイダーの有効化**」を選択します。

![Monosnap_20240210_202130.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/3e576d2b-eac1-a474-3517-b9d76dedfec9.png)

サービスプロバイダ選択で「**AWS**」を選択し、「**手動でのaccountsの追加**」を選択してください。

![Monosnap_20240211_111931.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/49148cfe-5ac5-2d64-d656-0ae91624f3d5.png)

「**2. AWS Account の追加**」で、`Gold Image`を表示させたいAWSアカウントIDとニックネーム、割り当てるサブスクリプションのエンタイトルメント数を入力します。

ニックネームは`Red Hat Cloud Access`に表示される際の識別名というだけなので、任意の名前で問題ありません。

![Monosnap_20240211_151259.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/7a7382d7-bd8b-3642-f8d3-b9b0543e108b.png)

有効化して、以下のように表示されれば完了です。

![Monosnap_20240211_151452.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/cc5e6101-5402-2992-3218-ef41e330b1ae.png)

## AWSからのGold Image確認
`AWS`にログインして、「**EC2ダッシュボード**」→「**AMI**」に移動します。

`Gold Image`共有設定を行う前は、画面左上のイメージ種別選択で「**プライベートイメージ**」を選択しても以下のように何も表示されません。

![Monosnap_20240211_151616.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/26f313ec-e17c-71e6-4c8f-4d5e6acae144.png)

`Gold Image`共有の設定を行うと、「**プライベートイメージ**」を選択すると、以下のように`Red Hat`のアカウントから共有された`AMI`イメージが表示されるので、表示されていればOKです。

![Monosnap_20240211_151643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/e07fd168-6a1b-54f6-5886-52a429d0bc88.png)

ちなみに、共有されている`AMI`の名前を見ると、すべて所有者IDが`309956199498`で`AMI`名のサブスクリプションタイプが`Access2`の名前となっていることが確認できます。

# Gold ImageからのEC2インスタンスの作成
`Gold Image`で`RHEL`のイメージが共有されたので、共有されている`AMI`から`EC2`インスタンスを作成していきます。

作成方法は通常の`EC2`インスタンスを作成する場合と変わらないので、使用する`AMI`を選択して、「**AMIからインスタンスを起動**」で作成していきます。

作成時、念の為`Access2`のイメージが選択されていることは確認しましょう。

## 作成したインスタンスへのログイン
`RHEL`のイメージにはSSMエージェントは導入されておらず、セッションマネージャで接続はできないので、`SSH`で接続できるようにネットワークやセキュリティグループの設定を行い、`SSH`等で接続してください。

なお、デフォルトで`ec2-user`は作成されているため、ログインする際には`ec2-user`でログインします。

## サブスクリプションの登録
作成した`EC2`インスタンスにサブスクリプションを適用していきます。

手順の詳細は以下を参照してください。

- [RHELを無償利用する。](https://qiita.com/sakai00kou/items/bc7499e9c9464e513846)

今回はインターネットに接続されている`EC2`インスタンスで作業を行っていきます。

以下`register`コマンドで`Red Hat Customer Portal`にログインするときのユーザ名、パスワードを入力して実行します。

```bash:RedHatアカウント情報の登録
subscription-manager register --username='[ユーザ名]' --password='[パスワード]'
```

成功すると以下のような実行結果が表示されます。

```bash:subscription-manager registerコマンド実行結果
Registering to: subscription.rhsm.redhat.com:443/subscription
The system has been registered with ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
The registered system name is: ip-10-1-0-151.ap-northeast-1.compute.internal
```

`Red Hat Customer Portal`画面の「**システム**」から見ると、作成した`EC2`インスタンスが登録されていることが確認できますが、この状態ではまだサブスクリプションが当たっていない状態となります。

![Monosnap_20240211_164744.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/ddbe0f9f-8a30-0cd0-8d30-ed02f84d38f1.png)

サブスクリプションをアタッチするにはアタッチするサブスクリプションのプールIDが必要となるので、`subscription-manager list --available`コマンドで確認します。

今回は`Red Hat Developer Subscription for Individuals`というサブスクリプションを使用するので、表示される`Pool ID`を控えます。

```bash:subscription-manager list --availableの結果
+-------------------------------------------+
    Available Subscriptions
+-------------------------------------------+
---省略---

Subscription Name:   Red Hat Developer Subscription for Individuals
Provides:            Red Hat Enterprise Linux Fast Datapath
                     Red Hat Build of Quarkus
                     Red Hat OpenShift Enterprise JBoss EAP add-on Beta
                     ---省略---

Support
                     Red Hat CoreOS
                     Red Hat CodeReady Linux Builder for x86_64
                     Red Hat Enterprise Linux High Performance Networking (for RHEL Compute Node)
                     ---省略---

SKU:                 RH00798
Contract:
Pool ID:             xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Provides Management: No
Available:           15
Suggested:           1
Service Type:
Roles:               RHEL Server
                     RHEl Workstation
Service Level:       Self-Support
Usage:               Development/Test
Add-ons:
Subscription Type:   Standard
Starts:              02/09/2024
Ends:                02/08/2025
Entitlement Type:    Physical
```

以下コマンドでサブスクリプションをアタッチします。

```bash:サブスクリプションのアタッチ
subscription-manager attach --pool=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

正常にアタッチできれば、先ほど赤かったインスタンス名が緑色に変わります。

![Monosnap_20240211_165512.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/a45c671f-f82f-60b1-b5bd-ef2200ed0524.png)

# おわりに
クラウド環境で`RHEL`等のイメージを使用したことがなかったので実際にやってみることで、クラウド環境で使うときのイメージが大分わかりました。

クラウドのライセンス関連は特に気をつけないとライセンス違反や二重請求等にもつながるため、要点をしっかり抑えたうえで導入する必要があると感じました。