Amazon ElastiCacheは、クラウド内でインメモリキャッシュを簡単にデプロイ、運用、スケーリングできるフルマネージドのキャッシュサービスです。ElastiCacheは、Redis(オープンソースのインメモリデータストア)とMemcached(分散メモリオブジェクトキャッシングシステム)の両方をサポートしています。ElastiCacheを使用することで、データベースやAPIからのデータ取得を高速化し、アプリケーションのパフォーマンスを向上させることができます。
ElastiCacheは、以下の2つのエンジンをサポートしています:
エンジン | 特徴 | 適したユースケース |
---|---|---|
Redis |
|
|
Memcached |
|
|
ElastiCacheでRedisとMemcachedのどちらを選択するかは、ユースケースによって異なります:
機能 | Redis | Memcached |
---|---|---|
データ構造 | 複雑なデータ型(文字列、ハッシュ、リスト、セット、ソート済みセット) | シンプルなキー/バリューのみ |
永続性 | あり(RDBスナップショット、AOF) | なし |
レプリケーション | あり | なし |
マルチスレッド | シングルスレッド(Redis 6.0以降はマルチスレッドI/O) | マルチスレッド |
自動フェイルオーバー | あり | なし |
バックアップ | あり | なし |
トランザクション | あり | なし |
Pub/Sub | あり | なし |
Lua スクリプティング | あり | なし |
地理空間データ | あり | なし |
ElastiCache for Redisには、以下のデプロイオプションがあります:
単一のプライマリノードと最大5つのリードレプリカで構成されます。データはプライマリノードに書き込まれ、リードレプリカから読み取ることができます。自動フェイルオーバーを有効にすると、プライマリノードに障害が発生した場合、リードレプリカの1つが自動的に昇格します。
データを最大500のシャード(パーティション)に分散させることができます。各シャードには、1つのプライマリノードと最大5つのリードレプリカを持つことができます。これにより、大規模なデータセットを処理し、高いスループットを実現できます。
ElastiCacheは、AWS Management Console、AWS CLI、SDKs、またはインフラストラクチャ as コード(IaC)ツールを使用して利用できます。
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 elasticache create-cache-cluster \
--cache-cluster-id my-memcached-cluster \
--engine memcached \
--cache-node-type cache.t3.micro \
--num-cache-nodes 2 \
--port 11211
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クライアントを使用します。
# EC2インスタンスにRedisクライアントをインストール
sudo yum install redis -y
# Redisクラスターに接続
redis-cli -h my-redis-cluster.abcdef.0001.use1.cache.amazonaws.com -p 6379
# EC2インスタンスにMemcachedクライアントをインストール
sudo yum install libmemcached-tools -y
# Memcachedクラスターに接続
memcached-tool my-memcached-cluster.abcdef.0001.use1.cache.amazonaws.com:11211 stats
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
ElastiCacheのセキュリティを確保するためのベストプラクティス:
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
ElastiCacheクラスターのパフォーマンスと健全性を監視するためのツール:
CloudWatchは、ElastiCacheクラスターのメトリクス(CPU使用率、メモリ使用率、キャッシュヒット率など)を収集し、アラームを設定して自動アクションをトリガーすることができます。
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は、クラスターの作成、削除、フェイルオーバーなどのイベントを通知します。これらのイベントをAmazon SNSトピックにサブスクライブして、重要なイベントの通知を受け取ることができます。
aws elasticache create-snapshot \
--cache-cluster-id my-redis-cluster \
--snapshot-name my-snapshot
ElastiCacheは以下のようなユースケースに適しています:
ElastiCacheは他のAWSサービスと統合して、より強力なソリューションを構築できます:
サービス | 統合の利点 |
---|---|
Amazon EC2 | アプリケーションサーバーからElastiCacheクラスターにアクセス |
Amazon RDS | データベースクエリの結果をキャッシュして負荷を軽減 |
AWS Lambda | サーバーレス関数からElastiCacheクラスターにアクセス |
Amazon VPC | ElastiCacheクラスターの論理的に分離されたネットワーク環境を提供 |
AWS IAM | ElastiCacheリソースへのアクセス制御 |
Amazon CloudWatch | ElastiCacheクラスターのモニタリングとアラート |
AWS CloudTrail | ElastiCache APIコールの記録と監査 |
Redisのメモリ管理のためのベストプラクティス:
Amazon ElastiCacheは、クラウド内でインメモリキャッシュを簡単にデプロイ、運用、スケーリングできるフルマネージドのキャッシュサービスです。RedisとMemcachedの両方のエンジンをサポートし、データベースやAPIからのデータ取得を高速化してアプリケーションのパフォーマンスを向上させることができます。
ElastiCacheの主な利点は以下の通りです:
ElastiCacheを効果的に活用するには、ユースケースに適したエンジンの選択、適切なノードタイプとクラスター構成の選択、セキュリティベストプラクティスの適用、適切なモニタリングの設定が重要です。また、他のAWSサービスと組み合わせることで、より強力で柔軟なアプリケーションを構築することができます。