AWSに戻る

Amazon ElastiCache

Amazon ElastiCacheとは

Amazon ElastiCacheは、クラウド内でインメモリキャッシュを簡単にデプロイ、運用、スケーリングできるフルマネージドのキャッシュサービスです。ElastiCacheは、Redis(オープンソースのインメモリデータストア)とMemcached(分散メモリオブジェクトキャッシングシステム)の両方をサポートしています。ElastiCacheを使用することで、データベースやAPIからのデータ取得を高速化し、アプリケーションのパフォーマンスを向上させることができます。

Amazon ElastiCacheの主な特徴

Amazon ElastiCacheのエンジン

ElastiCacheは、以下の2つのエンジンをサポートしています:

エンジン 特徴 適したユースケース
Redis
  • 複雑なデータ型(文字列、ハッシュ、リスト、セット、ソート済みセット)
  • 永続性(スナップショット、AOF)
  • レプリケーション
  • トランザクション
  • Lua スクリプティング
  • 自動フェイルオーバー
  • リーダーボード
  • ゲームリーダーボード
  • チャットアプリケーション
  • セッションストア
  • リアルタイム分析
  • 地理空間データ
Memcached
  • シンプルなキー/バリューストア
  • マルチスレッド
  • 水平スケーリング
  • 永続性なし
  • データベースクエリのキャッシング
  • APIレスポンスのキャッシング
  • シンプルなセッションストア
  • オブジェクトキャッシング

Amazon ElastiCache for Redis vs Memcached

ElastiCacheでRedisとMemcachedのどちらを選択するかは、ユースケースによって異なります:

機能 Redis Memcached
データ構造 複雑なデータ型(文字列、ハッシュ、リスト、セット、ソート済みセット) シンプルなキー/バリューのみ
永続性 あり(RDBスナップショット、AOF) なし
レプリケーション あり なし
マルチスレッド シングルスレッド(Redis 6.0以降はマルチスレッドI/O) マルチスレッド
自動フェイルオーバー あり なし
バックアップ あり なし
トランザクション あり なし
Pub/Sub あり なし
Lua スクリプティング あり なし
地理空間データ あり なし

Amazon ElastiCache for Redisのデプロイオプション

ElastiCache for Redisには、以下のデプロイオプションがあります:

クラスターモードが無効のRedis

単一のプライマリノードと最大5つのリードレプリカで構成されます。データはプライマリノードに書き込まれ、リードレプリカから読み取ることができます。自動フェイルオーバーを有効にすると、プライマリノードに障害が発生した場合、リードレプリカの1つが自動的に昇格します。

クラスターモードが有効のRedis

データを最大500のシャード(パーティション)に分散させることができます。各シャードには、1つのプライマリノードと最大5つのリードレプリカを持つことができます。これにより、大規模なデータセットを処理し、高いスループットを実現できます。

Amazon ElastiCacheの使用方法

ElastiCacheは、AWS Management Console、AWS CLI、SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。

クラスターの作成

AWS CLIを使用したRedisクラスターの作成

aws elasticache create-cache-cluster \
    --cache-cluster-id my-redis-cluster \
    --engine redis \
    --cache-node-type cache.t3.micro \
    --num-cache-nodes 1 \
    --port 6379

AWS CLIを使用したMemcachedクラスターの作成

aws elasticache create-cache-cluster \
    --cache-cluster-id my-memcached-cluster \
    --engine memcached \
    --cache-node-type cache.t3.micro \
    --num-cache-nodes 2 \
    --port 11211

レプリケーショングループの作成(Redis)

AWS CLIを使用したRedisレプリケーショングループの作成

aws elasticache create-replication-group \
    --replication-group-id my-redis-group \
    --replication-group-description "My Redis replication group" \
    --num-cache-clusters 3 \
    --cache-node-type cache.t3.micro \
    --engine redis \
    --automatic-failover-enabled

クラスターへの接続

ElastiCacheクラスターに接続するには、同じVPC内のEC2インスタンスからRedisまたはMemcachedクライアントを使用します。

Redisクライアントを使用した接続

# EC2インスタンスにRedisクライアントをインストール
sudo yum install redis -y

# Redisクラスターに接続
redis-cli -h my-redis-cluster.abcdef.0001.use1.cache.amazonaws.com -p 6379

Memcachedクライアントを使用した接続

# EC2インスタンスにMemcachedクライアントをインストール
sudo yum install libmemcached-tools -y

# Memcachedクラスターに接続
memcached-tool my-memcached-cluster.abcdef.0001.use1.cache.amazonaws.com:11211 stats

Amazon ElastiCacheのネットワーキング

ElastiCacheクラスターは、Amazon VPC内にデプロイされます。これにより、セキュリティグループを使用してアクセスを制御し、プライベートネットワーク内でクラスターを実行できます。

サブネットグループ

ElastiCacheサブネットグループは、VPC内のサブネットのコレクションで、ElastiCacheクラスターのノードを配置する場所を指定します。マルチAZ配置を有効にするには、異なるアベイラビリティゾーンのサブネットを含むサブネットグループを作成する必要があります。

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

aws elasticache create-cache-subnet-group \
    --cache-subnet-group-name my-subnet-group \
    --cache-subnet-group-description "My cache subnet group" \
    --subnet-ids subnet-0123456789abcdef0 subnet-0123456789abcdef1

セキュリティグループ

セキュリティグループは、ElastiCacheクラスターへのトラフィックを制御する仮想ファイアウォールとして機能します。クラスターにアクセスする必要があるEC2インスタンスからのトラフィックのみを許可するように設定することをお勧めします。

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

# セキュリティグループの作成
aws ec2 create-security-group \
    --group-name ElastiCacheSG \
    --description "Security group for ElastiCache" \
    --vpc-id vpc-0123456789abcdef0

# Redisポート(6379)へのアクセスを許可
aws ec2 authorize-security-group-ingress \
    --group-id sg-0123456789abcdef0 \
    --protocol tcp \
    --port 6379 \
    --source-group sg-0123456789abcdef1

Amazon ElastiCacheのセキュリティ

ElastiCacheのセキュリティを確保するためのベストプラクティス:

転送中の暗号化と保存中の暗号化(Redis)

暗号化を有効にしたRedisレプリケーショングループの作成

aws elasticache create-replication-group \
    --replication-group-id my-encrypted-redis \
    --replication-group-description "Encrypted Redis replication group" \
    --num-cache-clusters 3 \
    --cache-node-type cache.t3.micro \
    --engine redis \
    --engine-version 6.0 \
    --automatic-failover-enabled \
    --transit-encryption-enabled \
    --auth-token "MySecretPassword" \
    --at-rest-encryption-enabled

Amazon ElastiCacheのモニタリングと可観測性

ElastiCacheクラスターのパフォーマンスと健全性を監視するためのツール:

Amazon CloudWatch

CloudWatchは、ElastiCacheクラスターのメトリクス(CPU使用率、メモリ使用率、キャッシュヒット率など)を収集し、アラームを設定して自動アクションをトリガーすることができます。

CloudWatchアラームの作成

aws cloudwatch put-metric-alarm \
    --alarm-name redis-cpu-high \
    --comparison-operator GreaterThanThreshold \
    --evaluation-periods 2 \
    --metric-name CPUUtilization \
    --namespace AWS/ElastiCache \
    --period 300 \
    --statistic Average \
    --threshold 80 \
    --alarm-actions arn:aws:sns:us-west-2:123456789012:my-topic \
    --dimensions "Name=CacheClusterId,Value=my-redis-cluster"

ElastiCacheイベント

ElastiCacheは、クラスターの作成、削除、フェイルオーバーなどのイベントを通知します。これらのイベントをAmazon SNSトピックにサブスクライブして、重要なイベントの通知を受け取ることができます。

イベント通知サブスクリプションの作成

aws elasticache create-snapshot \
    --cache-cluster-id my-redis-cluster \
    --snapshot-name my-snapshot

Amazon ElastiCacheのユースケース

ElastiCacheは以下のようなユースケースに適しています:

Amazon ElastiCacheとの統合サービス

ElastiCacheは他のAWSサービスと統合して、より強力なソリューションを構築できます:

サービス 統合の利点
Amazon EC2 アプリケーションサーバーからElastiCacheクラスターにアクセス
Amazon RDS データベースクエリの結果をキャッシュして負荷を軽減
AWS Lambda サーバーレス関数からElastiCacheクラスターにアクセス
Amazon VPC ElastiCacheクラスターの論理的に分離されたネットワーク環境を提供
AWS IAM ElastiCacheリソースへのアクセス制御
Amazon CloudWatch ElastiCacheクラスターのモニタリングとアラート
AWS CloudTrail ElastiCache APIコールの記録と監査

Amazon ElastiCacheのベストプラクティス

Redisのメモリ管理

Redisのメモリ管理のためのベストプラクティス:

まとめ

Amazon ElastiCacheは、クラウド内でインメモリキャッシュを簡単にデプロイ、運用、スケーリングできるフルマネージドのキャッシュサービスです。RedisとMemcachedの両方のエンジンをサポートし、データベースやAPIからのデータ取得を高速化してアプリケーションのパフォーマンスを向上させることができます。

ElastiCacheの主な利点は以下の通りです:

ElastiCacheを効果的に活用するには、ユースケースに適したエンジンの選択、適切なノードタイプとクラスター構成の選択、セキュリティベストプラクティスの適用、適切なモニタリングの設定が重要です。また、他のAWSサービスと組み合わせることで、より強力で柔軟なアプリケーションを構築することができます。