【AWS】Amazon CodeCatalystのDev EnvironmentでValkeyを使ってみる

## はじめに

この記事ではAmazon CodeCatalystのDev Environmentで作成した環境を使って、RedisからフォークされたValkeyを起動して触る話を書きます。主な内容としては実践したときのメモを中心に書きます。（忘れやすいことなど）
誤りなどがあれば修正していく想定です。

## Valkeyとはなんぞや

簡単に言うと、RedisのようなキャッシュのOSSです。[公式サイト](https://valkey.io/)
`Redisのような`と表現しましたが、実態はRedisのフォークです。

※フォーク：リポジトリの引用、コピーのこと。みんながよく知るフォークのように取り出すような意味がありますが、元のリポジトリがなくなるわけではないです。

以下、公式リポジトリより引用

> Valkey is a high-performance data structure server that primarily serves key/value workloads. It supports a wide range of native structures and an extensible plugin system for adding new data structures and access patterns.

訳：Valkeyは、主にキー／バリューのワークロードに対応する高性能なデータ構造サーバーです。幅広いネイティブ構造をサポートし、新しいデータ構造やアクセスパターンを追加するための拡張可能なプラグインシステムを備えています。

[引用：valkey-io/valkey GitHub](https://github.com/valkey-io/valkey)

## 検証環境について

検証環境は以下の記事を参考に作成するため、一部省略します。なお、今回はAWS Builder IDを使ってセットアップします。

- [検証！AWS Builder IDを使ってAmazon CodeCatalystをセットアップする](https://qiita.com/ymd65536/items/6b52dd87e74d8b172db4)
- [検証！Amazon CodeCatalystのDev EnvironmentでVisual Studio Codeを起動してみる](https://qiita.com/ymd65536/items/d4c0f1766fcfd9f56664)
- [【AWS】検証！Amazon CodeCatalystのDev Environmentで作成したコンピューティングリソースって中身どうなっているん？](https://qiita.com/ymd65536/items/4006e4adce1e26e511fc)

## 検証環境の作成

では、実際に環境を構築してやっていきたいと思います。

### Dev EnvironmentsでVisual Studio Codeの開発環境を構築する

以下のURLにアクセスしてsource-repositoriesを開きます。
※`{スペース名}`と`{プロジェクト名}`は任意の名前

```bash
https://codecatalyst.aws/spaces/{スペース名}/projects/{プロジェクト名}/source-repositories
```

`Create Dev Environment`の右にある逆三角形をクリックします。

![Screenshot 2024-05-30 at 13.04.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/1f2a06cd-829d-4b23-1ae9-5616bbe528df.png)

いくつか環境が選択できますが、ここでは`Visual Studio Code`を選択します。

![Screenshot 2024-05-30 at 13.05.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/eee5735a-26c3-2293-4722-a6c84ffbd7bb.png)

### 開発環境の設定と起動

開発環境を選択すると設定画面に遷移します。ブランチ、エイリアス、VPCコネクションなどの設定がありますが、ここではブランチのみ設定して`Create`をクリックします。

`Dev Environment Configuration`の設定はデフォルトの`Small 2vCPU, 4GB RAM`で進めます。

![Screenshot 2024-05-30 at 13.05.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/c1ba7f95-b52b-c5e8-f8b4-c3b6d971c707.png)

`Create`を実行するとローカルにインストールされているVisual Studio Codeから通知が届きます。`Open Visual Studio Code.app`をクリックします。

![Screenshot 2024-05-30 at 13.06.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/321cd76b-e6cb-dbaa-b085-26f2ec033665.png)

Visual StudioCodeの画面でポップアップが表示されるので`Open`をクリックします。

![Screenshot 2024-05-30 at 13.07.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527543/8631534f-15c4-eeb2-94dc-24e9aaee33b2.png)

これでAWS上にVisual Studio Codeを起動してローカルのVisual Studio Codeから接続できました。

### 接続確認

ターミナルを起動して`uname -a`を実行してみましょう。
まずはターミナルを起動します。`Terminal`をクリックして`New Terminal`を選択します。

新しいターミナルで以下のコマンドを実行します。

```bash
uname -a
```

実行結果
```text
Linux ip-10-136-119-155.us-west-2.compute.internal 6.1.90-99.173.amzn2023.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May  7 11:11:31 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
```

AWS上で起動しているターミナルであることが確認できました。

## Dev EnvironmentでValkeyをセットアップする

今回はDockerコンテナを使って検証します。[公式リポジトリ](https://github.com/valkey-io/valkey-container)

[利用Dockerイメージ](https://hub.docker.com/layers/valkey/valkey/7.2.5/images/sha256-cfbe0eecb70525e28b927ec77f1e648c1388ca288e432430555f9f221235d493?context=explore)

とりあえず、イメージをプルして実行してみましょう。

```bash
docker run --name valkey -d valkey/valkey:7.2.5
```

実行結果

```text
[mde-user@ip-10-136-119-155 CodeCatalystNodeDev]$ docker run --name valkey -d valkey/valkey:7.2.5
Unable to find image 'valkey/valkey:7.2.5' locally
7.2.5: Pulling from valkey/valkey
09f376ebb190: Pull complete 
05595428be8a: Pull complete 
6c1cd24899a3: Pull complete 
5e249683c8ca: Pull complete 
fd565303d364: Pull complete 
b736e8ddbf87: Pull complete 
4f4fb700ef54: Pull complete 
92c9201ad3df: Pull complete 
Digest: sha256:372e508417aaaad888e5cbfa03def1d6026b012ed4c91266ff41001c38da3b0c
Status: Downloaded newer image for valkey/valkey:7.2.5
f6a565b6a9ff72ff352306577e4dbdecbc1b87270c9eac596efd89b754b8b95a
```

※イメージをプルする場合は以下のコマンドです。

```bash
docker pull valkey/valkey:7.2.5
```

## Valkeyを操作してみる

コンテナが正常に起動しているかを確認するために以下のコマンドを実行します。

```bash
docker ps -a
```

実行結果

```text
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS      NAMES
f6a565b6a9ff   valkey/valkey:7.2.5   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   6379/tcp   valkey
```

tcpの6379で実行されていることがわかります。6379というとRedisと同じポート番号ですね。
では、実際にコンテナの中に入ってみましょう。

```bash
docker exec -it valkey valkey-cli
```

実行結果

```text
[mde-user@ip-10-136-119-155 CodeCatalystNodeDev]$ docker exec -it valkey valkey-cli
127.0.0.1:6379> 
```

## 簡単な操作をしてみる

key `test`に数値1をセットします。

```bash
set test 1
```

key `test`が存在するかを確認します。

```bash
EXISTS test
```

key `test`からバリューを取得します。

```bash
get test
```

key `test`からバリューを削除します。

```bash
DEL test 1
```

key `test`からバリューが削除されたかします。

```bash
get test
```

ここまでの実行結果

```text
127.0.0.1:6379> set test 1
OK
127.0.0.1:6379> EXISTS test
(integer) 1
127.0.0.1:6379> get test
"1"
127.0.0.1:6379> DEL test 1
(integer) 1
127.0.0.1:6379> get test
(nil)
```

セット操作をしてみます。

```bash
SADD settest1 1
SADD settest1 2
SMEMBERS settest1
```

実行結果

```text
127.0.0.1:6379> SADD settest1 1
(integer) 1
127.0.0.1:6379> SADD settest1 2
(integer) 1
127.0.0.1:6379> SMEMBERS settest1
1) "1"
2) "2"
127.0.0.1:6379> 
```

ハッシュ操作を操作してみます。

```bash
HSET hasht field 0
HSET hasht field1 1
HSET hasht field2 2
HGETALL  hasht
```

実行結果

```text
127.0.0.1:6379> HSET hasht field 0
(integer) 1
127.0.0.1:6379> HSET hasht field1 1
(integer) 1
127.0.0.1:6379> HSET hasht field2 2
(integer) 1
127.0.0.1:6379> HGETALL  hasht
1) "field"
2) "0"
3) "field1"
4) "1"
5) "field2"
6) "2"
127.0.0.1:6379>
```

最後にquitして終了しましょう。

```bash
quit
```

## まとめ

Amazon CodeCatalystのDev EnvironmentでValkeyを使ってみました。
実際にRedisを使ったことのある筆者が触ってみてもとくに違和感なく触れたので安心しました。

他、気になるところというと、RedisのSDKからデータを引用できるのか
Redisに対応しているOSSと併用したらどうなるのかなど気になることは多いです。

たとえば、Redashを使っている場合はElasticache for redisを使っていると思いますが
Redashとの相性？はどんな感じなのかなと気になりました。今後も注目していきたいと思います。