本ページでは ElastiCache を構築・設定します。
このページは AWS 基礎入門チュートリアル の一部です。 AWS チュートリアル全体は AWS 基礎入門チュートリアル を参照してください。
目次 [非表示]
- 1 「ElastiCache」サービスを選択
- 2 Redis インスタンスの作成
- 3 Redis の設定
- 4 詳細設定
- 5 サブネットグループ設定
- 6 セキュリティグループ
- 7 バックアップとメンテナンス
- 8 作成中
- 9 作成完了
- 10 詳細情報
- 11 redis-cli を使うために redis パッケージをインストール
- 12 redis-cli コマンドによる接続確認
- 13 セキュリティグループ確認
- 14 セキュリティグループの新規作成
- 15 Redis のセキュリティグループを変更
- 16 再び EC2 インスタンス上で redis-cli で接続確認
- 17 telnet コマンドでの確認
- 18 ElastiCache のまとめ
「ElastiCache」サービスを選択
AWS コンソール 画面上部の「サービス」より、ElastiCache を探してください。 下図のように「データベース」のひとつとして記載があるはずです。

クリックすると、下記のように「ElastiCache ダッシュボード」画面になります。

今回は Memcahced ではなく Redis を使いますので、左メニューの「Redis」をクリックします。 すると下記のように Redis インスタンスの一覧画面が表示されます。 初期状態なので「レコードが見つかりません」となっています。

Redis インスタンスの作成
では Redis インスタンスを作成しましょう。 画面上部の「作成」ボタンを押すと、下記のように Redis か Memcached を選ぶ画面になります (どうやら左メニューで Memcached を選んでも Redis を選んでも、作成時にはこの選択肢が出てくるようです)。

Redis の設定

下にスクロールすると下記のようになります。
- 「名前」に適当な名前を入力 (例: myredis など)
- 「ノードのタイプ」に「cache.t2.micro」を選択
- 「レプリケーション数」は「0」を入力
としてください。ノードのタイプのプルダウンを押すと、下記のような画面になるので、 画面上部で “t2” を選択し、下部で “cache.t2.micro” を選んでください。

デフォルトで選択されている cache.r5.large は無料枠の対象ではありません。 cache.r5.large のままにしてしまうと、1時間あたり $0.216 かかりますので、1日放置すると 580円かかります (1ドル=112円)。1ヶ月そのままにすると 17,000円を超えますのでご注意ください。
上記を入力し終わった状態が下記です。念押しですが、「ノードのタイプ」が “cache.t2.micro” となっていることを確認してください。

詳細設定
さらに下にスクロールすると、詳細設定項目のフォームになります。 マルチAZ は、お金がかからないようなので有効にしたままでよいです (チェックを外して無効にしても構いません)。

サブネットグループ設定
サブネット設定を行います。 下記が初期状態のフォームです。

実運用では Redis の多重化などを考えるべきなのですが、 チュートリアルで試しに使うだけですので、下記のとおり入力してください。
- 名前に適当なもの (ここでは my-redis-subnet)
- サブネットを 1つ選択 (どれを選んでもよい)
入力後、下記のようになっているはずです。

セキュリティグループ
セキュリティグループ設定です。 デフォルトが下記なので、そのままにしておきましょう。

ちなみに、ぱっと見でわかるとおりセキュリティ的には暗号化したほうがよいのは確かですが、 「保管時の暗号化」にチェックをするとクラスタ構成が必須となったり、 「送信中の暗号化」にチェックをすると TLS 接続必須となり、 あとから説明する redis-cli で接続ができなくなるので、ここではいずれもチェックしないことをおすすめします。
バックアップとメンテナンス
さらに下にスクロールすると、バックアップとメンテナンスの設定フォームが出てきます。
下記がデフォルトですので、変更なしで OK です。 なお、バックアップについては 1日分であれば無料枠に収まります (多分)。

これで入力は完了です。 右下にある「作成」ボタンを押すと、Redis インスタンスが作成されます。
作成中
「作成」ボタンを押すと下記のインスタンス一覧画面に自動的に遷移します。 ステータスが “creating” となっていますが、 画面は自動更新されないのでリロードしながら数分待ってください。

作成完了
作成が完了すると、下記のようにステータスが “available” となります。

詳細情報
“myredis” の行をクリックすると、下記のような詳細情報が表示されます。

上記で
プライマリエンドポイント: myredis.gh65zs.0001.use2.cache.amazonaws.com:6379
とあるのが Redis への接続先です。
redis-cli を使うために redis パッケージをインストール
動作確認してみましょう。redis-cli というコマンドを使います。 redis-cli は Redis のパッケージに含まれています。 そして Redis のパッケージは、Amazon Linux 2 の場合 Extras Library というリポジトリに含まれています。 このリポジトリについての操作は yum コマンドではなく amazon-linux-extras というコマンドを使います。
amazon-linux-extras コマンドを引数なしで使うと、対象パッケージ一覧やステータスが表示されます。 「redis4.0」が「available (利用可能)」となっています。
% sudo amazon-linux-extras
0 ansible2 available [ =2.4.2 =2.4.6 ]
2 httpd_modules available [ =1.0 ]
3 memcached1.5 available [ =1.5.1 ]
4 nginx1.12 available [ =1.12.2 ]
5 postgresql9.6 available [ =9.6.6 =9.6.8 ]
6 postgresql10 available [ =10 ]
8 redis4.0 available [ =4.0.5 =4.0.10 ]
(略)
redis4.0 パッケージをインストールします。 インストールも amazon-linux-extras コマンドより行います。 途中で “Is this ok” と聞かれるので、”y” を入力してください。
% sudo amazon-linux-extras install redis4.0
(略)
Installing:
redis x86_64 4.0.10-2.amzn2.0.2 amzn2extra-redis4.0 732 k
(略)
Is this ok [y/d/N]: y
(略)
Installed:
redis.x86_64 0:4.0.10-2.amzn2.0.2
Complete!
(略)
8 redis4.0=latest enabled [ =4.0.5 =4.0.10 ]
(略)
最後に redis4.0 が “enabled” になっているので、インストールされたことがわかります。 これで redis-cli コマンドが使えるようになりました。 なお、redis パッケージをインストールしたことで、サーバとしての redis もインストールされていますが、 サービスとして有効化されていませんので EC2 上では redis サーバは動いていない状態です。 今回はクライアントである redis-cli コマンドを使いたいだけなので、このままとします。
redis-cli コマンドによる接続確認
redis-cli の使い方ですが、下記のようにして Redis サーバに接続します。
% redis-cli -h [接続先FQDNまたはIPアドレス]
「接続先FQDNまたはIPアドレス」とは、ElastiCache コンソールにて下記のように表示されていた部分です。
プライマリエンドポイント: myredis.gh65zs.0001.use2.cache.amazonaws.com:6379
当ページ管理人の場合は
% redis-cli -h myredis.gh65zs.0001.use2.cache.amazonaws.com:6379
となります。いざ実行してみると、しばらく待っても何の反応もないと思います。 これはまたしてもセキュリティグループのしわざです。
セキュリティグループ確認
AWS コンソール > ElastiCache > Redis で、作成した “myredis” の行をクリックすると、下記のようにセキュリティグループが “sg-d42cceb8 (VPC)” となっています。

AWS コンソール > EC2 > セキュリティグループで、該当のグループ ID をクリックし、画面下のタブで「インバウンド」を押すと、 「このセキュリティグループにはルールがありません」とのこと。

この「インバウンド」に、Redis のポートである 6379 を追加すればとりあえず Redis にはつながるようになるはずです。 しかしながらこのセキュリティグループは、自動的に作成される VPC デフォルトのセキュリティグループですので、 管理上わかりづらくなります。 ここでは redis 用のセキュリティグループを新規作成することにしましょう。
セキュリティグループの新規作成
AWS コンソール > EC2 > セキュリティグループにて、下記にある「セキュリティグループを新規作成」ボタンを押してください。

すると下記のようなセキュリティグループ作成ダイアログが表示されます。

上記フォームに、以下を入力してください。
- 「セキュリティグループ名」に “redis-security-group” (実際はどんな文字列でもいいです)
- 「説明」に “for redis” という説明文 (実際はどんな文字列でもいいです)
- 「インバウンド」タブで「ルールの追加」ボタンを押し、
- 「タイプ」に「カスタムTCP」を選択、
- 「ポート範囲」に “6379” を入力、
- 「ソース」のプルダウンには「カスタム」、その後のテキストフィールドには EC2 のセキュリティグループ sg-XXXXX を入力 (“launch-wizaed-1” に対応するセキュリティグループ ID) → テキストフィールドに “sg-” などと入力すると下記のような入力候補のダイアログが出てきます。
全部埋めると下記のようになるはずです。そしてダイアログ右下の「作成」ボタンを押します。

すると自動的にセキュリティグループ一覧画面に遷移し、下記のように今作成したばかりのセキュリティグループが表示されているはずです。

Redis のセキュリティグループを変更
セキュリティグループを作成できたので、今後は Redis インスタンスに設定されているセキュリティグループを変更します。
AWS コンソール > ElastiCache > Redis より、作成済みの “myredis” の左にあるチェックボックスにチェックを入れ、 画面上部の「変更」ボタンを押します。

すると下記のような変更フォームが表示されます。 「VPC セキュリティグループ」の横にある鉛筆マークをクリックします。

すると下記のようにセキュリティグループの選択画面になります。

以下のように変更します。
- もともと ElastiCache に設定されていた sg-XXXXXXX default のチェックを外す
- さきほど新たに作成した sg-XXXXXXX redis-security-group のチェックをつける
結果として下記のようになっていれば OK です。 「保存」ボタンを押してください (まだ反映されません)。

「保存」ボタンを押すと、下記のように元のダイアログに戻るはずです。「VPC セキュリティグループ」が “redis-security-group” になっていることを確認してください。OK であれば右下の「変更」ボタンを押してください。これで実際に反映されます。

再び EC2 インスタンス上で redis-cli で接続確認
もう一度 EC2 インスタンス上で redis-cli コマンドで接続確認をします。 下記のようにプロンプトが表示されれば OK です。
% redis-cli -h myredis.gh65zs.0001.use2.cache.amazonaws.com
myredis.gh65zs.0001.use2.cache.amazonaws.com:6379>
さらに set コマンドで キー: “mykey”、値: “hoge” という情報を設定し、 get でキー “mykey” の値を取得してみましょう
myredis.gh65zs.0001.use2.cache.amazonaws.com:6379> set mykey hoge
OK
myredis.gh65zs.0001.use2.cache.amazonaws.com:6379> get mykey
"hoge"
有効期限 (TTL) を設定して登録してみましょう。setex コマンドを使います。 書式は下記です。
setex [キー] [有効期限(秒数)] [値]
実行例は下記のとおりです。
myredis.gh65zs.0001.use2.cache.amazonaws.com:6379> setex mykey2 10 fuga
OK
→ TTL 10秒で設定
myredis.gh65zs.0001.use2.cache.amazonaws.com:6379> get mykey2
"fuga"
→ 登録直後は値が取得できる
myredis.gh65zs.0001.use2.cache.amazonaws.com:6379> get mykey2
"fuga"
→ 10秒以内なら値が取得できる
myredis.gh65zs.0001.use2.cache.amazonaws.com:6379> get mykey2
(nil)
→ 10秒経過すると取得できなくなる
終了するときは quit とします (Ctrl-c でも Ctrl-d でも終了できます)。
myredis.gh65zs.0001.use2.cache.amazonaws.com:6379> quit
telnet コマンドでの確認
別の方法として、telnet コマンドでの接続方法も説明しておきます。 telnet は ssh が普及する前に広く使われていたリモートマシンへログインするためのツールです。 暗号化機能がないなどの理由から今となってはリモートログイン目的で telnet を使うべきではありませんが、 機能がシンプルなので接続確認のためには依然として有用です。
Amazon Linux や Amazon Linux 2 には telnet コマンドは標準ではインストールされていませんので、 yum コマンドで追加します。
yum search にてパッケージが存在することを確認します。ちなみに telnet が telnet コマンド、 telnet-server は telnet サーバです。今回使うのはクライアントである telnet のみです。
% sudo yum search telnet
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
(略)
telnet.x86_64 : The client program for the Telnet remote login protocol
telnet-server.x86_64 : The server program for the Telnet remote login protocol
(略)
下記のように yum install で telnet をインストールします。
% sudo yum install -y telnet
telnet コマンドで Redis のエンドポイントに接続します。ポート番号指定必須です。 接続後は動作確認のため下記のようにしています。
- set でキーと値のセット
- get で取得 (set した値が取得できている)
- keys でキーの一覧を取得
なお、telnet 接続の場合、Redis プロトコルを話す必要があるので、redis-cli のコマンドと等価ではありません。
telnet myredis.gh65zs.0001.use2.cache.amazonaws.com 6379
Trying 172.31.6.79...
Connected to myredis.gh65zs.0001.use2.cache.amazonaws.com.
Escape character is '^]'.
set mykey hoge
+OK
get mykey
$4
hoge
keys *
*1
$5
mykey
telnet> q
Connection closed.
telnet を抜けるときは Ctrl-] とすると
telnet>
とプロンプトが出ますので、q を押して Enter で終了です。
ElastiCache のまとめ
- ElastiCache を設定した。
- Redis インスタンスが立ち上がった。
- Redis に接続する場合、セキュリティグループにてインバウンド設定が必要。
- EC2 から redis-cli コマンドや telnet コマンドを使って、Redis にキーと値を保存することができた。
- 保存したデータは永続化しない (メモリ上にしか保存されない)
- ElastiCache 接続においてそもそも認証の仕組みがない。TCP/IP 的につながれば、誰でもなんでもできる。
- よって、セキュリティグループにて許可したところからのみ接続可能とするのが大事。
ElastiCache の設定が完了しましたので、サンプルアプリケーション mini Twitter を Redis 対応 に進んでください。