こんにちは。s.kです。今回はPython 3.6を使ってAmazon ElastiCache(Memcached)への通信を行い、一通りの動作を試したいと思います。 *今回はLambdaからElastiCacheへの通信を行います。
目次
概要
"action"、"cache_key"、"cache_value"三つの引数を渡し、Memcachedを操作するLambdaをPythonで作成します。
標準ライブラリ以外も必要となるため今回はzipアップロードとなります。
また今回使用するバージョンはこの通りです。
事前準備
Python用のMemcachedクライアントであるpymemcacheと、ノードをよしなにしてくれる"elasticache_auto_discovery"を下記サイトからダウンロードします。
pymemcache(v2.2.2)
github:https://github.com/pinterest/pymemcache
pypi:https://pypi.org/project/pymemcache/
elasticache_auto_discovery(v1.0.0)
github:https://github.com/djmitche/elasticache-auto-discovery
次にlambda_function.pyファイルを作成します。
# coding=utf-8 import os import elasticache_auto_discovery from pymemcache.client.hash import HashClient endpoint = os.environ.get['ENDPOINT'] def lambda_handler(event, context): # ElastiCache settings nodes = elasticache_auto_discovery.discover(endpoint) nodes = map(lambda x: (x[1], int(x[2])), nodes) memcache_client = HashClient(nodes) if 'set' in event['action']: result = memcache_client.set(event['cache_key'], event['cache_value']) elif 'get' in event['action']: result = memcache_client.get(event['cache_key']) result = "no exist" if result is None else result.decode() elif 'delete' in event['action']: result = memcache_client.delete(event['cache_key']) print(result) return result
これらを以下の構成で圧縮します。
elasticache.zip ├─elasticache_auto_discovery | └─__init__.py ├─pymemcache | ├─client/ | ├─test/ | ├─__init__.py | ├─exceptions.py | ├─fallback.py | ├─pool.py | └─serde.py └─lambda_function.py
AWS構築
最初にElastiCacheとLambdaで使用するセキュリティグループを作成します。
今回は互いのセキュリティグループをリソースに指定して許可する形にする為、お互いに相手側のセキュリティグループIDを設定する。
・Lambda用セキュリティグループ
インバウンド [設定なし]
アウトバウンド [カスタム TCP ルール:TCP:11211:ElastiCache用セキュリティグループID]
・ElastiCache用セキュリティグループ
インバウンド [カスタム TCP ルール:TCP:11211:Lambda用セキュリティグループID
アウトバウンド [すべてのトラフィック:すべて:すべて:0.0.0.0/0]
次にElastiCacheを作成します。
クラスターエンジンはMemcachedを選択し、バージョンは最新の1.5.16(19/10/23時点)を選択します。
ノードタイプの容量ノード数が大まかな保存できる容量となる。
詳細設定は以下の様に設定する。
設定後に作成を押下する。無事に作成されればElastiCacheは完了です。
最後にLambdaを作成します。 ランタイムは"Python 3.7"を選択して作成します。
コードエントリタイプで".zipファイルをアップロード"を選択し、事前準備で作成したelasticache.zipをアップロードします。
環境変数はキー名を"ENDPOINT"、値をElastiCacheのエンドポイントを設定する。
ネットワークは事前に作成したセキュリティグループを設定する。
最後に登録、取得、削除のテストイベントを作成する。
動作確認
setテストイベントを実行する。
ElastiCacheで項目数が増えたことを確認する。
getテストイベントを実行する。
deleteテストイベントを実行する。
ElastiCacheで項目数が減ったことを確認する。
再度getテストイベントを実行し、取得できないことを確認する。
以上がPython3.7によるElastiCacheの操作となります。