この記事のポイント
- Amazon ElastiCache for Valkeyの概要がわかるYo
- Valkeyの基本的な操作方法がわかるYo
- AWS CloudShellを使ってハンズオンできるYo
はじめに
この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか 「もしかしたら内容次第では使えるかも??」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。
主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど) 誤りなどがあれば書き直していく予定です。
今回はAmazon ElastiCacheで利用できるAmazon ElastiCache for Valkey(以下、本文ではValkeyと表記し、Amazon ElastiCache for Redisの場合においては「Redis」と表記)を検証してみます。
参考:Amazon ElastiCache for Valkeyの開始方法
Amazon ElastiCache for Valkeyとは
まずは今回検証するValkeyについて見ていきましょう。What is Valkey?では以下のように説明されています。
Valkey is an open source, in-memory, high performance, key-value datastore. It is a drop-in replacement for Redis OSS. It can be used for a variety of workloads such as caching, session stores, and message queues, and can act as a primary database. Valkey can run as either a standalone daemon or in a cluster, with options for replication and high availability.
引用:What is Valkey? - Valkey Explained - AWS
どんなものか簡単にまとめると「Redis OSSの代替として開発されたオープンソースのインメモリ型キーバリューデータストア」ということになります。
なんでValkeyなんですか?Redisじゃいけないんですか
Valkeyが登場したとき、背景を知らない人からすると「なんで?これが必要なの?」
「今までずっとRedisで上手くいっていたのに、なぜ変える必要があるのか?」という疑問が浮かんだと思います。
技術的そして経済的にもValkeyのほうが優秀に見えるのでそれが代替(Alternative)の理由となったと勘違いしそうですが
実際は技術的な背景ではなく、非常に複雑なライセンス事情が絡んでいます。
複雑なライセンス事情の話
長年愛されているRedisはBSDライセンスとして無料かつ商用利用可能な状態で提供されていましたが
2024年3月に開発元のRedis社が方針を転換し、ライセンスを変更することになりました。
なお、2025年5月のRedis8においては方針を一部修正してライセンスも違う形で提供するというアナウンスがされており
現在においてはOSI(オープンソースイニシアチブ)承認済みであり、再びOSSとして利用できるようになっています。
ただし、こういった形で利用に不信感をもたせたことや変更後のライセンス(AGPL)の縛りが強いことなどあり、Valkeyが注目を浴びることになりました。
※この件について、視点はさまざまでAWSやGoogleが強力に推進していることやLinux Foundationという中立な組織傘下で管理されているからといった見方もあります。
また、すでにValkeyへの開発にシフトしてしまってもとに戻ることができないといった開発者の事情もあるでしょう。(筆者が同じ立場の開発者ならそう考えます)
Amazon ElastiCache for Valkeyの料金
このあとハンズオンしていきますが、そのまえに料金表を確認しましょう。
今回はServerlessでハンズオンするのでServerlessの料金に注目します。
細かい料金計算は難しいと思いますので割愛しますが、理解しておくべき主な課金要素は以下の2つです。
- データの保存
- ElastiCache Processing Units (ECPU)
Serverlessなのでユニット利用時に料金がかかります。計算が終了してもデータ保存で料金が発生するので注意しましょう。
キャッシュの操作方法
操作方法はいくつかあります。具体的には以下のとおりです。
- valkey-cli
- AWS SDK
- AWS CLI
- 他、Redis互換のSDK
ハンズオン
どんなものか理解できたところでハンズオンしていきましょう。
おおまかな手順
- AWSマネジメントコンソールを開いてAWS CloudShellを起動
- ユーザーの作成
- キャッシュの作成
- valkey-cli のセットアップ
- キーバリューストアのテスト
- キャッシュの削除
今回はAWS IAM Identity Center (SSO)でログインしていることを前提としています。権限はAdministratorAccessです。
AWS CloudShellの起動とEC2インスタンスの作成
まずはAWS CloudShellを起動してキャッシュを作成するためのEC2インスタンスを作成します。
ec2.ymlをダウンロードしてCloudShellにアップロードしてください。
アップロードできたら、以下のコマンドを実行してEC2を構築します。
aws cloudformation deploy --stack-name ec2 --template-file ./ec2.yml --tags Name=qiita --capabilities CAPABILITY_NAMED_IAM
EC2インスタンスが起動したら、以下のコマンドでSSMセッションを開始します。
export INSTANCE_ID=`aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[*].[InstanceId]' --output text`
aws ssm start-session --target $INSTANCE_ID
bashを起動します。
bash
キャッシュの作成
EC2インスタンスにログインできたらキャッシュを作成していきます。
以下のコマンドでValkeyのキャッシュを作成します。
aws elasticache create-user --user-id valkey-default-user --user-name default --engine valkey --passwords "YourStrongPassword123!" --access-string "on ~* +@all"
グループを作成してユーザーを追加します。以下のコマンドを実行してください。
aws elasticache create-user-group --user-group-id my-user-group --engine valkey --user-ids valkey-default-user
次にキャッシュを作成します。以下のコマンドを実行してください。ユーザーグループIDは先ほど作成したものを指定します。
aws elasticache create-serverless-cache --serverless-cache-name ec-valkey-serverless --engine valkey --user-group-id my-user-group --region ap-northeast-1
もとからあるユーザーグループにユーザーを追加する場合は以下のコマンドを実行します。
aws elasticache modify-serverless-cache --serverless-cache-name ec-valkey-serverless --user-group-id my-user-group
valkey-cli のセットアップ
次にvalkey-cliをセットアップします。以下のコマンドを実行してください。
sudo yum install gcc jemalloc-devel openssl-devel tcl tcl-devel -y
sudo wget https://github.com/valkey-io/valkey/archive/refs/tags/7.2.7.tar.gz
sudo tar xvzf 7.2.7.tar.gz
cd valkey-7.2.7/
sudo make BUILD_TLS=yes install
出力の最後にmake[1]: Leaving directory '/usr/bin/valkey-7.2.7/src'と表示されたらインストール完了です。
キャッシュの確認
キャッシュが作成されたか確認しましょう。以下のコマンドを実行してください。
aws elasticache describe-serverless-caches --serverless-cache-name ec-valkey-serverless --region ap-northeast-1
実行結果
{
"ServerlessCaches": [
{
"ServerlessCacheName": "ec-valkey-serverless",
"Description": " ",
"CreateTime": "2025-12-24T07:43:57.288000+00:00",
"Status": "available",
"Engine": "valkey",
"MajorEngineVersion": "8",
"FullEngineVersion": "8.1",
"SecurityGroupIds": [
"sg-XXX"
],
"Endpoint": {
"Address": "ec-valkey-serverless-XXXX.serverless.apne1.cache.amazonaws.com",
"Port": 6379
},
"ReaderEndpoint": {
"Address": "ec-valkey-serverless-XXXX.serverless.apne1.cache.amazonaws.com",
"Port": 6380
},
"ARN": "arn:aws:elasticache:ap-northeast-1:0000000:serverlesscache:ec-valkey-serverless",
"SubnetIds": [
"subnet-XXX1",
"subnet-XXX2",
"subnet-XXX3"
],
"SnapshotRetentionLimit": 0,
"DailySnapshotTime": "17:30"
}
]
}
出力されることを確認したら以下のコマンドでエンドポイントとポート番号を取得しましょう。
export ENDPOINT=`aws elasticache describe-serverless-caches --serverless-cache-name ec-valkey-serverless --region ap-northeast-1 --query "ServerlessCaches[0].Endpoint.Address" --output text` && echo $ENDPOINT
export PORT=`aws elasticache describe-serverless-caches --serverless-cache-name ec-valkey-serverless --region ap-northeast-1 --query "ServerlessCaches[0].Endpoint.Port" --output text` && echo $PORT
キーバリューストアのテスト
それではvalkey-cliを使ってキーバリューストアのテストを行いましょう。以下のコマンドを実行してください。
valkey-cli -h ${ENDPOINT} -p ${PORT} -c --tls --askpass
パスワードの入力を求められたら、キャッシュ作成時に設定したパスワードを入力してください。
この例では以下のパスワードです。
YourStrongPassword123!
なお、本番環境ではパスワードをコマンドラインで指定するのは避け、より安全な方法、(たとえば、IAMロールの利用)で接続してください。
また、TLS接続を使用することを強くオススメします。
キーとバリューの設定と取得
まずはシンプルなキーとバリューの設定を試してみましょう。以下のコマンドを実行してください。
SET favorite_car "ferrari sf90 spider"
実行結果
OK
Keyがセットされたか確認します。
EXISTS favorite_car
実行結果
(integer) 1
次に設定したキーとバリューを取得してみましょう。以下のコマンドを実行してください。
GET favorite_car
実行結果
"ferrari sf90 spider"
ハッシュ操作
次にハッシュ操作を試してみましょう。以下のコマンドを実行してください。
この例では車の情報をハッシュで保存します。
hset car:1 make ferrari model sf90spider year 2024 engine "4.0 L V8" horsepower 769hp transmission "8-speed auto" price 580000
実行結果
(integer) 7
次に設定したキーとバリューを取得してみましょう。以下のコマンドを実行してください。
HMGET car:1 make model price
実行結果
1) "ferrari"
2) "sf90spider"
3) "580000"
すべてのフィールドと値を取得してみましょう。以下のコマンドを実行してください。
HGETALL car:1
実行結果
1) "year"
2) "2024"
3) "engine"
4) "4.0 L V8"
5) "transmission"
6) "8-speed auto"
7) "price"
8) "580000"
9) "make"
10) "ferrari"
11) "model"
12) "sf90spider"
13) "horsepower"
14) "769hp"
リスト操作
リスト操作も試してみましょう。以下のコマンドを実行してください。
この例ではスポーツカーのリストを作成します。
LPUSH sports_cars "ferrari sf90 spider" "lamborghini aventador" "porsche 911 turbo s"
LPUSHはリストの先頭に要素を追加します。RPUSHを使うとリストの末尾に要素を追加できます。
実行結果
(integer) 3
次にリストの要素を取得してみましょう。以下のコマンドを実行してください。
LRANGE sports_cars 0 -1
実行結果
1) "porsche 911 turbo s"
2) "lamborghini aventador"
3) "ferrari sf90 spider"
第3引数の-1はリストの最後の要素を意味します。-2、-3と指定して実行してみると、リストの末尾から順に要素を取得できることがわかります。
キーの管理
キーの管理も試してみましょう。以下のコマンドを実行してください。
HKEYS car:1
実行結果
1) "year"
2) "engine"
3) "transmission"
4) "price"
5) "make"
6) "model"
7) "horsepower"
これでハッシュのすべてのフィールド名を取得できました。
最後にexitを実行してvalkey-cliを終了します。
exit
キャッシュの削除
キャッシュの削除を行います。以下のコマンドを実行してください。
aws elasticache delete-serverless-cache --serverless-cache-name ec-valkey-serverless --region ap-northeast-1
削除には時間がかかります。状態を確認するには以下のコマンドを実行します。deletingと表示されている間は削除中です。
aws elasticache describe-serverless-caches --serverless-cache-name ec-valkey-serverless --region ap-northeast-1 --query "ServerlessCaches[0].Status" --output text
ユーザーとユーザーグループの削除
ユーザーとユーザーグループも削除しておきましょう。
まずはグループを削除します。
以下のコマンドを実行してください。
aws elasticache delete-user-group --user-group-id my-user-group
時間がかかる場合があります。
次にユーザーを削除します。以下のコマンドを実行してください。
aws elasticache delete-user --user-id valkey-default-user
これでキャッシュ、ユーザー、ユーザーグループの削除が完了しました。
終了処理
bashからもexitします。
exit
SSMセッションを終了します。
exit
今回作成したCloudFormationスタックを削除します。
aws cloudformation delete-stack --stack-name ec2
まとめ
valkeyの概要と基本的な操作方法、そしてAWS CloudShellを使ったハンズオンを紹介しました。ValkeyはRedis OSSの代替として注目されており、今後の動向に注目が集まっています。
また、今回は紹介しませんでしたが、Redis以外にもServerlessのキャッシュとしてElastiCache for Memcachedや同じRedis互換のキャシュサービスとしてMomento Cacheなどもあります。用途に応じて最適なキャッシュを選択することが重要です。
参考:【Momento】Momento CLI のハンズオン!
なお、今回はCloudShellのみでやろうとしましたが、なぜかvalkey-cliが動作しなかったので細かく検証したいと思いました。