東京リージョンにやってきた MySQL HeatWave on AWS を試す (1) 初期設定編

いまさらですが、2023/5 に東京リージョンにやってきた MySQL HeatWave on AWS の試用を始めたので、メモ的に記録を残していきます。

:::note warn
2023/7/23 時点の情報です。
記事中で未実装・制約ありと記している機能が後日実装される可能性もあります。
:::

## MySQL HeatWave on AWS とは

MySQL HeatWave は、Oracle Cloud（OCI）が提供する MySQL データベースのマネージドサービスです。

通常の MySQL に **インメモリ＆カラムナ型の分散データベース** をセカンダリエンジンとして追加することで、MySQL が苦手だった分析クエリの高速処理が可能になっています。

また、機械学習プラットフォームとしての機能もあります（HeatWave AutoML）。

- **[HeatWave—In-Memory Query Accelerator with Built-in ML](https://www.oracle.com/mysql/heatwave/)**

https://www.oracle.com/mysql/heatwave/

MySQL HeatWave on AWS は、 **MySQL HeatWave を AWS 上のリソースとして構築する** マネージドサービスです。

OCI など外部のリソースとして構築する場合、AWS 上の EC2・Fargate などからアクセスするには VPN などが必要になり、セキュリティ（可用性を含む）やレイテンシの面で問題がありました。

MySQL HeatWave on AWS を使うと、このあたりの問題を解決できます。

- **[東京のリージョンでも利用可能となったMySQL HeatWave on AWS](https://www.mysql.com/jp/why-mysql/presentations/mysql-heatwave-on-aws-in-tokyo/)**

https://www.mysql.com/jp/why-mysql/presentations/mysql-heatwave-on-aws-in-tokyo/

（注：資料ダウンロードには登録が必要です）

:::note warn
**MySQL HeatWave on AWS を使うには、OCI の契約が必要** です。
AWS Marketplace を通じて提供されるサービスではない点に注意してください。
:::

## MySQL HeatWave on AWS を使ってみる

### AWS 上 の MySQL HeatWave コンソールにログイン

まず OCI コンソールにログインし、**「AWS 上 の MySQL HeatWave」** を選択します。

:::note
無料アカウントの場合、MySQL HeatWave on AWS を利用できないので、有料アカウントへのアップグレードが必要です。
なお、有料アカウントにアップグレードしても 30 日間無料利用分の対象に含まれます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/e003f83f-8d1f-7dfd-6330-988b3ccd03e2.png)
利用したいリージョン（日本東部(東京) など）を **「サブスクライブ」** し、**「AWS 上 の MySQL HeatWave コンソールを開く」** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/36434cfc-ca88-06eb-c91e-c22f07a7259b.png)
Cloud Account Name を入れて **「Continue」** で進みます。

### MySQL DB と HeatWave Cluster を作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/4bf96291-92d8-1f36-73ae-76fda3afcc31.png)
OCI コンソールとは別の画面が開きます。

**「Create MySQL DB System」** をクリックします。

画面右側に設定項目が表示されるので入力・選択していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/b0d5efe3-7732-40d6-2ea9-1c331792c3fd.png)
今回は最低サイズのシェイプを選択しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/769eb14e-f3b6-19ba-f88b-08f4348ad259.png)
**「Networking」** でアクセス元（クライアント）のパブリック IP アドレス・ポート番号を指定します。

:::note warn
**現時点では PrivateLink をサポートしておらず、アクセスが Public IP アドレス経由になる** 点に注意してください。
AWS からのアクセスの場合、ネットワーク自体は AWS 内を通りますが、クライアント（EC2 など）から Public IP アドレス宛てに（NAT ゲートウェイなどで）アクセス可能にしておく必要があります。
:::

:::note
**2023/9/9 追記：**
2023/9/9 現在、まだ公式リファレンス（サービスガイド）には記載がありませんが、設定画面に PrivateLINK による接続か Public IP アドレス経由のアクセスかを選択するチェックボックス（Enable public connectivity）が追加されました。
![スクリーンショット 2023-09-09 10.31.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/a57ded1a-d053-405c-ec54-1dfc23da685e.png)
:::

**「Next」** で進みます。

HeatWave Cluster の設定画面が表示されるので入力・選択していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/45fdf5af-31ae-83d2-ec2a-e99e8d07ce56.png)
こちらも今回は最低サイズにしました。

**「Create」** で MySQL DB と HeatWave Cluster を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/5429cdb8-0345-93d3-dd0f-c845ae6cca31.png)
しばらく待ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/5e0bacec-732f-47e7-d5f6-048a3ea93ef5.png)
**「State」** と **「HeatWave State」** が Active になったら作成完了です。

### EC2 からアクセス

MySQL DB の **「Details」** 画面で **「Hostname」** を調べます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/f81a30f8-2f06-1a6a-8ef0-530e0edcea61.png)
EC2 からアクセスしてみます。

```sh
$ mysql -u 【ユーザー名】 -h 【hostname の URL】 -p
Enter password: 【パスワードを入力】
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 81
Server version: 8.0.33-u2-cloud MySQL Enterprise - Cloud

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mysql_autopilot    |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)
```

接続できました！

### MySQL DB・HeatWave Cluster を停止

MySQL DB および HeatWave Cluster は停止しておくこともできます。

一覧画面から DB を選択するか、DB の Details 画面を表示して **「Stop」** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/109a22f8-ecb7-cf9c-3022-264c7c9099e4.png)
シャットダウンタイプが選択できます。マネージドの MySQL を使っている方には馴染みが薄いかもしれませんが、[`innodb_fast_shutdown`](https://dev.mysql.com/doc/refman/8.0/ja/innodb-parameters.html#sysvar_innodb_fast_shutdown)の指定ですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/6cae7a1c-b830-46b3-f09a-d17bcdcc3ac5.png)
いずれかを選択して（デフォルトは Fast） **「Stop」** をクリックします。

しばらくすると **「State」** と **「HeatWave State」** が Inactive になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/123899/e9cc3b56-2a89-b073-280b-b1a05e226a63.png)

## 主な制限事項・制約など

MySQL Server との比較でサポート外の機能が公式リファレンスに記載されています。

- **[3.1.2.4 Unsupported MySQL Server Features](https://dev.mysql.com/doc/heatwave-aws/en/mysql-server-unsupported-features.html)（MySQL HeatWave on AWS）**

https://dev.mysql.com/doc/heatwave-aws/en/mysql-server-unsupported-features.html

その他、制限事項・制約などが以下に記載されています。

- **[3.1.2.7 MySQL HeatWave on AWS Service Restrictions](https://dev.mysql.com/doc/heatwave-aws/en/mysql-server-restrictions.html)（MySQL HeatWave on AWS）**

https://dev.mysql.com/doc/heatwave-aws/en/mysql-server-restrictions.html

- **[3.1.2.8 MySQL HeatWave on AWS Service Limitations](https://dev.mysql.com/doc/heatwave-aws/en/mysql-server-limitations.html)（MySQL HeatWave on AWS）**

https://dev.mysql.com/doc/heatwave-aws/en/mysql-server-limitations.html

個人的には、最後の

> MySQL HeatWave on AWS does not support inbound replication.

インバウンドレプリケーションがサポートされていない点が大きなネックと感じます。

AWS 上の RDS for MySQL / Aurora MySQL からレプリケーションできないと、RDS / Aurora との併用や RDS / Aurora からの（停止時間短縮を考慮した）移行に支障があります。

RDS / Aurora と併用しない前提で考えると、MySQL DB の HA 構成が（まだ）サポートされていない点もネックになりそうです。

また、シェイプサイズや HeatWave Cluster 構成を途中で変更できない点もスケーラビリティの観点で大きなネックですね。

- **[3.2 Creating a DB System](https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-dbsystem-create.html)（MySQL HeatWave on AWS）**

https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-dbsystem-create.html

> MySQL HeatWave on AWS does not support changes to the MySQL shape. To use a different shape requires a new DB System with the new shape. Restore the data from a backup of the old DB System to the new DB System.

ストレージサイズを変更する場合も、現状は Backup & Restore（または Export & Import）による移行が必要です。

- **[3.4.7 Increasing DB System Storage](https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-increase-dbsystem-storage.html)（MySQL HeatWave on AWS）**

https://dev.mysql.com/doc/heatwave-aws/en/heatwave-aws-increase-dbsystem-storage.html

> DB System storage can be increased through a backup and restore operation or through an export and import operation.

## 次回

(2) ではこちらのチュートリアルに沿って、サンプルデータベースを構築して試してみます。

- **[5. サンプルデータベースの構築](https://oracle-japan.github.io/ocitutorials/beginners/creating-HeatWave/#anchor5)（OCI チュートリアル・その 10 - MySQL で高速分析を体験する）**

https://oracle-japan.github.io/ocitutorials/beginners/creating-HeatWave/#anchor5

---

**2023/7/23 追記：**

記事を書きました。
- **[東京リージョンにやってきた MySQL HeatWave on AWS を試す (2) サンプルクエリ実行編](https://qiita.com/hmatsu47/items/0979f877ad596cf3cf67)**

https://qiita.com/hmatsu47/items/0979f877ad596cf3cf67