Amazon ElastiCache (memcached) + EC2 + Golang で 接続を確認する

サブネットの作成

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

  • 「Amazon ElastiCache」→「設定」→「サブネットグループ」→「サブネットグループを作成」クリック
  • サブネットグループを作成
    • サブネットグループの設定
    • 選択済みの サブネット
      • 「管理」クリック
      • 用意したサブネットを選択
    • 「作成」クリック

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

  • 「EC2」→「ネットワーク&セキュリティ」→「セキュリティグループ」→「セキュリティグループを作成」クリック
    • セキュリティグループ名
      • 適当
    • 説明
      • 適当
    • VPC
    • インバウンドルール、アウトバウンドルール
      • タイプ:カスタム TCP
      • ポート範囲:11211
      • ソース:IPv4 0.0.0.0/0

Memcached キャッシュの作成

  • 「Amazon ElastiCache」→「リソース」→「Memcached キャッシュ」→「Memcached キャッシュを作成」をクリック
  • Memcached キャッシュを作成
    • クラスターの作成方法を選択
      • デプロイオプション:独自のキャッシュを設計、標準作成
    • ロケーション
      • ロケーション:AWS クラウド
    • クラスター情報 (cluster)
      • 名前:適当
      • 説明 - オプション:適当
    • クラスター設定
      • エンジンバージョン:最新バージョンぽいのを選択
      • ポート:11211
      • パラメータグループ:自動的に選択されるぽい
      • ノードのタイプ:cache.t4g.micro (一旦安価のタイプを選択)
      • ノードの数:1
    • 接続性
      • ネットワークタイプ:IPv4
      • サブネットグループ:既存のサブネットグループを選択
      • サブネットグループ:作成したサブネットグループを選択
    • アベイラビリティーゾーンの配置
      • アベイラビリティーゾーン:接続するEC2インスタンスと同じゾーンを選択(コストの関係)
    • 「次へ」クリック
  • 詳細設定
    • セキュリティ
      • 転送中の暗号化:チェックを外す
        • チェックして試すと使用したライブラリではうまく動かなかった
      • 選択済みの セキュリティグループ:
    • メンテナンス
      • メンテナンス期間:どちらでも
      • Amazon SNS 通知のトピック:必要があれば
    • 「次へ」クリック
  • 問題なければ「作成」クリック
  • 稼働まで約10分かかる

接続

  • 該当する「キャッシュ名」をクリック
    • 設定エンドポイントの内容をコピー

EC2 インスタンス

main.go

bradfitz/gomemcache - Github

package main

import (
	"fmt"
	"github.com/bradfitz/gomemcache/memcache"
)

func main() {

	key := "foo"

	memcached := memcache.New("コピーしたエンドポイント")
	memcached.Set(&memcache.Item{Key: key, Value: []byte("my value")})

	item, err := memcached.Get(key)
	if err != nil {
		fmt.Print(err.Error(), "\n")
		return
	}
	fmt.Printf("%s is %s\n", key, string(item.Value))
}

確認

$ cd /path/to/project
$ go mod init example.com/yourname/yourproject
$ go mod tidy
$ go run main.go
foo is my value