Amazon ElastiCache

## Amazon ElastiCacheとは
メインメモリキャッシュのデプロイ、運用、スケーリングをクラウド内で簡単に実行できるウェブサービスです。
このサービスは、低速のディスクベースのデータベースに完全に依存せずに、高速の管理されたメモリ内のキャッシュから情報を取得できるようにすることで、ウェブアプリケーションのパフォーマンスを向上させます。

![スクリーンショット 2019-03-21 17.41.01.png](https://qiita-image-store.s3.amazonaws.com/0/280929/092fa538-af8c-79ed-f196-5d9f7db86bff.png)

参考：[AWS 基礎入門チュートリアル – ElastiCache 構築・設定編](https://cloud-textbook.com/144/)


## サポートしているエンジン
Amazon ElastiCache は、次の 2 つのオープンソースインメモリキャッシュエンジンをサポートしています。
シンプルに利用する場合はMemcachedを利用するが、それ以外はRedisを利用する場合が多い。

|Redis|Memcached|
|---|---|
|シングルスレッドで動作する。|マルチスレッドで動作する。|
|データを永続化可能。|データを永続化できない。|

[Redis と Memcached の比較](https://aws.amazon.com/jp/elasticache/redis-vs-memcached/)

[ElastiCacheはMemcachedとRedisのどっちを選ぶ？](https://dev.classmethod.jp/articles/which-choice-redis-memcached/)


## ElastiCacheを利用する際のポイント

- キャッシュするデータの選定

頻繁に更新するデータをキャッシュしても意味がない。
アクセスはされるが、データが更新されないものはキャッシュするべき。

- 耐障害性への考慮

マルチノードで構成する。

- 負荷テストを実施して、ノードのタイプをを決定する

定期的にノードのタイプを選定する。


## 遅延読み込みと書き込みスルー

|遅延読み込み|書き込みスルー|
|---|---|
|必要なときにのみキャッシュにデータを読み込むキャッシュ戦略です。|データがデータベースに書き込まれると常にデータを追加するか、キャッシュのデータを更新します。 |

[キャッシュ戦略](https://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/mem-ug/Strategies.html)


## ユースケース

- セッション管理
- データベースキャッシュ★
- ストリームデータ分析
- メタデータストア

## 1.パラメータグループを作成する

[パラメータグループの作成]で今回は[redis4.0]で作成しておきます。
![スクリーンショット 2019-03-21 17.51.42.png](https://qiita-image-store.s3.amazonaws.com/0/280929/9c53bb46-d087-728c-13b4-60f7ec8890f6.png)


## 2.サブネットグループを作成する

[サブネットグループの作成]で該当のサブネットを追加する。
![スクリーンショット 2019-03-21 17.57.54.png](https://qiita-image-store.s3.amazonaws.com/0/280929/22fef174-9a1a-e539-5062-4cfa6435d06c.png)


## 3.セキュリティグループを作成する

[セキュリティグループの作成]で 6379 番ポートからのアクセスを許可するように設定する。

![スクリーンショット 2019-03-21 18.05.26.png](https://qiita-image-store.s3.amazonaws.com/0/280929/bdfd3266-99dc-3e11-cd58-020fa8fceff6.png)


## 4.Amazon ElastiCache クラスターの作成

[クラスターエンジン] は Redis
![スクリーンショット 2019-03-21 18.09.33.png](https://qiita-image-store.s3.amazonaws.com/0/280929/33d66d5e-c433-4e62-2525-c3080b32f731.png)

[エンジンバージョンの互換性] 4.0.10
[ポート] 6379
[パラメータグループ] 「1.パラメータグループを作成する」で作成したもの
[ノードのタイプ] cache.t2.micro
[レプリケーション数] 0
![スクリーンショット 2019-03-21 18.13.24.png](https://qiita-image-store.s3.amazonaws.com/0/280929/39ec7268-496d-e069-2d1a-dd518fdccfb9.png)

[サブネットグループ] 「2.サブネットグループを作成する」で作成したもの
![スクリーンショット 2019-03-21 18.15.37.png](https://qiita-image-store.s3.amazonaws.com/0/280929/e565b633-c5f0-aac4-420a-59e0cddf6dc7.png)

[セキュリティグループ] 「3.セキュリティグループを作成する」で作成したもの
![スクリーンショット 2019-03-21 18.16.36.png](https://qiita-image-store.s3.amazonaws.com/0/280929/ea68e57e-3b41-4802-5e40-8b498a6563da.png)


## 5.EC2インスタンスにredisをインストールし動作を確認する

redisをインストールする。

```
sudo yum --enablerepo=epel install redis
```

プライマリエンドポイントに繋げる。

```
redis-cli -h <プライマリエンドポイント>
```

setやgetで確認する。

```
redis.7izdpl.0001.apne1.cache.amazonaws.com:6379> set aws redis
OK
redis.7izdpl.0001.apne1.cache.amazonaws.com:6379> get aws
"redis"
```


### Amazon Linux2 でこんなエラーが表示された場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/8a34a482-7f6b-2ed2-b417-426327a1641e.png)

epelレポジトリをインストールしてから実行。

```
sudo amazon-linux-extras install -y epel
```


## AWS ElastiCache Serverless 

https://qiita.com/leomaro7/items/f56949fa55568c67e460