はじめに
今回は Amazon ElastiCache を試します。
サポートされているエンジンのMemcached ( Amazon ElastiCache for Memcached ) を試します。
[Lambda関数・SAMテンプレート]
(https://github.com/tanaka-takurou/serverless-elasticache-page-go)
準備
[Amazon ElastiCacheの資料]
Amazon ElastiCache
AWS SAM テンプレート作成
AWS SAM テンプレートで API-Gateway , Lambda, Amazon ElastiCache の設定をします。
[参考資料]
AWS SAM テンプレートを作成する
Amazon ElastiCacheの設定は以下の部分
ElastiCacheSecurityGroup:
Type: 'AWS::EC2::SecurityGroup'
Properties:
GroupDescription: 'Elasticache Security Group'
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: '11211'
ToPort: '11211'
CidrIp: '0.0.0.0/0'
ElastiCacheCacheCluster:
Type: AWS::ElastiCache::CacheCluster
Properties:
AutoMinorVersionUpgrade: 'true'
AZMode: single-az
CacheNodeType: cache.t2.micro
Engine: memcached
NumCacheNodes: '1'
VpcSecurityGroupIds:
- !GetAtt ElastiCacheSecurityGroup.GroupId
Lambda関数作成
※ Lambda関数は aws-lambda-go を利用しました。Memcacheパッケージは bradfitz/gomemcache を利用しました。
memcache に値を入れるには gomemcacheの Set を使う
func setItem(key string, value string) {
if memcacheClient == nil {
memcacheClient = getMemcacheClient()
}
memcacheClient.Set(&memcache.Item{Key: itemKey, Value: []byte(value)})
return
}
memcache から値を取得するには gomemcacheの Get を使う
func getItem(key string)(string, error) {
if memcacheClient == nil {
memcacheClient = getMemcacheClient()
}
it, err := memcacheClient.Get(key)
if err != nil {
return "", err
}
return string(it.Value), nil
}
終わりに
Redis( Amazon ElastiCache for Redis ) もサポートされているため、今後試していこうと思います。