メインコンテンツまでスキップ

Amazon ElastiCache とは?基本的な使い方やキャッシュクラスターの作成を学ぼう

タグ:

アプリケーションのパフォーマンスを改善する方法のひとつに、頻繁にアクセスされるデータをメモリ上にキャッシュするという手法があります。Amazon ElastiCache はそのためのマネージドなインメモリキャッシュサービスです。データベースへのクエリ数を減らしたり、セッション情報を高速に読み書きしたりする用途で広く使われています。本記事では ElastiCache の基本概念から実際のクラスター作成・接続手順まで説明します。

Amazon ElastiCache とは

ElastiCache は AWS が提供するフルマネージドのインメモリキャッシュサービスです。データをメモリ上に保持することで、ディスクベースのデータベースと比べて桁違いに高速な読み書きを実現します。ノードの起動・停止、パッチ適用、バックアップ、モニタリングといった運用タスクを AWS が管理してくれるため、アプリケーション開発に集中できます。

主なユースケースとして、データベースクエリ結果のキャッシュ、セッション管理、リアルタイムランキング、レート制限などがあります。読み取りが多いワークロードや、ミリ秒以下のレイテンシが求められるシステムで特に効果を発揮します。

サポートするエンジン

ElastiCache は 2 種類のエンジンをサポートしています。用途や要件に応じて選択します。

エンジン概要
Valkey / Redis OSS文字列・リスト・ハッシュ・ソート済みセットなど豊富なデータ構造をサポート。レプリケーションやクラスターモード、永続化にも対応している
Memcachedシンプルなキーバリューストア。マルチスレッドで水平スケールしやすく、純粋なキャッシュ用途に向いている

Redis の後継として AWS が推奨しているのが Valkey です。Redis OSS と高い互換性を持ちつつ、オープンソースコミュニティ主導で開発されています。新規構築では Valkey を選ぶのが無難です。

主要な機能

ElastiCache にはキャッシュの可用性・耐久性・パフォーマンスを高めるための機能が備わっています。

機能概要主な効果
レプリケーションプライマリノードの変更をレプリカノードへ非同期でコピー。プライマリ障害時に自動フェイルオーバーする単一障害点を排除し、読み取りを分散できる
クラスターモードデータを複数のシャードに分散して保持。各シャードに対してレプリカを持てる大容量・高スループットなキャッシュを構成できる
自動バックアップスナップショットをスケジュール実行し、S3 に保存。任意の時点に復元できる障害やデータ消失からの回復が容易になる
転送中暗号化 / 保存時暗号化クライアントとノード間の通信を TLS で暗号化。ディスクへの書き込みも暗号化できるセキュリティ要件を満たしやすくなる

AWS CLI で ElastiCache を使ってみる

AWS CLI を使って Valkey エンジンのキャッシュクラスターを作成し、接続するまでの流れを確認します。サブネットグループとセキュリティグループを用意してからクラスターを作成するのが基本的な手順です。事前に VPC・サブネットが作成済みであることを前提としています。

サブネットグループの作成

ElastiCache クラスターは VPC 内に配置するため、まずキャッシュ用のサブネットグループを作成します。2 つ以上の AZ のサブネットを含めておくと、マルチ AZ 構成に対応しやすくなります。

❯ aws elasticache create-cache-subnet-group \
--cache-subnet-group-name exrecord-cache-subnet-group \
--cache-subnet-group-description "Subnet group for exrecord ElastiCache" \
--subnet-ids subnet-0a1b2c3d4e5f67890 subnet-0b1c2d3e4f5a67890
{
"CacheSubnetGroup": {
"CacheSubnetGroupName": "exrecord-cache-subnet-group",
"CacheSubnetGroupDescription": "Subnet group for exrecord ElastiCache",
"VpcId": "vpc-0a1b2c3d4e5f67890",
"Subnets": [
{
"SubnetIdentifier": "subnet-0b1c2d3e4f5a67890",
"SubnetAvailabilityZone": {
"Name": "ap-northeast-1c"
},
"SupportedNetworkTypes": [
"ipv4"
]
},
{
"SubnetIdentifier": "subnet-0a1b2c3d4e5f67890",
"SubnetAvailabilityZone": {
"Name": "ap-northeast-1a"
},
"SupportedNetworkTypes": [
"ipv4"
]
}
],
"ARN": "arn:aws:elasticache:ap-northeast-1:123456789012:subnetgroup:exrecord-cache-subnet-group",
"SupportedNetworkTypes": [
"ipv4"
]
}
}

セキュリティグループの作成

ElastiCache クラスターへの接続を制御するセキュリティグループを作成します。Valkey のデフォルトポートは 6379 です。実際の運用では、接続元を特定の EC2 インスタンスのセキュリティグループに限定しましょう。

❯ aws ec2 create-security-group \
--group-name exrecord-cache-sg \
--description "Security group for exrecord ElastiCache" \
--vpc-id vpc-0a1b2c3d4e5f67890
{
"GroupId": "sg-0a1b2c3d4e5f67890",
"SecurityGroupArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group/sg-0a1b2c3d4e5f67890"
}

作成したセキュリティグループに Valkey (6379) のインバウンドルールを追加します。

❯ aws ec2 authorize-security-group-ingress \
--group-id sg-0a1b2c3d4e5f67890 \
--protocol tcp \
--port 6379 \
--cidr 172.31.0.0/16
{
"Return": true,
"SecurityGroupRules": [
{
"SecurityGroupRuleId": "sgr-0a1b2c3d4e5f67890",
"GroupId": "sg-0a1b2c3d4e5f67890",
"GroupOwnerId": "123456789012",
"IsEgress": false,
"IpProtocol": "tcp",
"FromPort": 6379,
"ToPort": 6379,
"CidrIpv4": "172.31.0.0/16",
"SecurityGroupRuleArn": "arn:aws:ec2:ap-northeast-1:123456789012:security-group-rule/sgr-0a1b2c3d4e5f67890"
}
]
}

キャッシュクラスターの作成

サブネットグループとセキュリティグループが準備できたら、キャッシュクラスターを作成します。Valkey エンジンは create-cache-cluster ではなく create-replication-group コマンドで作成します。ここでは Valkey 8.0 を使用し、cache.t3.micro インスタンスを 1 台起動します。

--transit-encryption-enabled / --no-transit-encryption-enabled は、クライアントとノード間の通信を TLS で暗号化するかどうかを制御するオプションです。Valkey ではどちらかを明示的に指定する必要があります。

オプション通信の暗号化推奨環境
--transit-encryption-enabledあり(TLS)本番環境・セキュリティ要件がある場合
--no-transit-encryption-enabledなし検証・開発環境、レイテンシ優先の場合
❯ aws elasticache create-replication-group \
--replication-group-id exrecord-valkey \
--replication-group-description "exrecord valkey cluster" \
--cache-node-type cache.t3.micro \
--engine valkey \
--engine-version 8.0 \
--num-cache-clusters 1 \
--cache-subnet-group-name exrecord-cache-subnet-group \
--security-group-ids sg-0a1b2c3d4e5f67890 \
--no-transit-encryption-enabled
実行結果
{
"ReplicationGroup": {
"ReplicationGroupId": "exrecord-valkey",
"Description": "exrecord valkey cluster",
"GlobalReplicationGroupInfo": {},
"Status": "creating",
"PendingModifiedValues": {},
"MemberClusters": [
"exrecord-valkey-001"
],
"AutomaticFailover": "disabled",
"MultiAZ": "disabled",
"SnapshotRetentionLimit": 0,
"SnapshotWindow": "19:00-20:00",
"ClusterEnabled": false,
"CacheNodeType": "cache.t3.micro",
"TransitEncryptionEnabled": false,
"AtRestEncryptionEnabled": true,
"ARN": "arn:aws:elasticache:ap-northeast-1:123456789012:replicationgroup:exrecord-valkey",
"LogDeliveryConfigurations": [],
"ReplicationGroupCreateTime": "2026-04-21T16:25:37.028000+00:00",
"DataTiering": "disabled",
"AutoMinorVersionUpgrade": true,
"NetworkType": "ipv4",
"IpDiscovery": "ipv4",
"ClusterMode": "disabled",
"Engine": "valkey"
}
}

クラスターの作成には数分かかります。以下のコマンドでステータスが available になるまで待ちます。

❯ aws elasticache describe-replication-groups \
--replication-group-id exrecord-valkey \
--query "ReplicationGroups[0].Status"
"available"

エンドポイントの確認

クラスターが available になったら、接続に使用するエンドポイントを確認します。エンドポイントはクラスター作成時に自動で割り当てられる DNS 名で、アプリケーションや valkey-cli からの接続先として使用します。

❯ aws elasticache describe-replication-groups \
--replication-group-id exrecord-valkey \
--query "ReplicationGroups[0].NodeGroups[0].PrimaryEndpoint"
{
"Address": "exrecord-valkey.xxxxxx.ng.0001.apne1.cache.amazonaws.com",
"Port": 6379
}

valkey-cli からの接続

同一 VPC 内の EC2 インスタンスから、取得したエンドポイントを使って接続できます。接続元のサーバーに valkey-cli がインストールされている必要があります。

[ec2-user@ip-172-31-xx-xx ~]$ valkey-cli -h exrecord-valkey.xxxxxx.ng.0001.apne1.cache.amazonaws.com -p 6379
exrecord-valkey.xxxxxx.ng.0001.apne1.cache.amazonaws.com:6379>

接続が確認できたら、SET / GET コマンドでキャッシュの読み書きを試してみましょう。

exrecord-valkey.xxxxxx.ng.0001.apne1.cache.amazonaws.com:6379> SET mykey "hello"
OK
exrecord-valkey.xxxxxx.ng.0001.apne1.cache.amazonaws.com:6379> GET mykey
"hello"

クラスターの削除

不要になったクラスターは削除しましょう。--final-snapshot-identifier を省略すると最終スナップショットを作成せずに削除できます。

❯ aws elasticache delete-replication-group \
--replication-group-id exrecord-valkey
{
"ReplicationGroup": {
"ReplicationGroupId": "exrecord-valkey",
"Description": "exrecord valkey cluster",
"GlobalReplicationGroupInfo": {},
"Status": "deleting",
"PendingModifiedValues": {},
"AutomaticFailover": "disabled",
"MultiAZ": "disabled",
"SnapshotRetentionLimit": 0,
"SnapshotWindow": "19:00-20:00",
"TransitEncryptionEnabled": false,
"AtRestEncryptionEnabled": true,
"ARN": "arn:aws:elasticache:ap-northeast-1:123456789012:replicationgroup:exrecord-valkey",
"LogDeliveryConfigurations": [],
"ReplicationGroupCreateTime": "2026-04-21T16:25:37.028000+00:00",
"DataTiering": "disabled",
"AutoMinorVersionUpgrade": true,
"NetworkType": "ipv4",
"IpDiscovery": "ipv4",
"ClusterMode": "disabled",
"Engine": "valkey"
}
}

まとめ

Amazon ElastiCache の基本概念と AWS CLI を使ったキャッシュクラスターの作成・接続手順について説明しました。

  • ElastiCache はデータをメモリ上に保持するマネージドなインメモリキャッシュサービスで、ミリ秒以下のレイテンシを実現できる
  • Valkey(Redis 後継)と Memcached の 2 種類のエンジンをサポートしており、新規構築では Valkey がおすすめ
  • レプリケーションやクラスターモードを活用することで、可用性とスループットを向上させられる
  • クラスターは VPC 内に配置し、セキュリティグループで接続元を制限することでセキュアな構成を保てる
  • データベースへのクエリ結果のキャッシュやセッション管理など、読み取りが多いワークロードで特に効果を発揮する