AWSパートナー 電話番号 電話番号 お問い合わせ

受付時間 平日10:00~18:00

TOP

資料ダウンロードはこちら >>

ロゴ

AWSやシステム・アプリ開発の最新情報|クロスパワーブログ

ElastiCache Lambda

ElastiCache(Memcached)をPython3.7から操作する。

こんにちは。s.kです。今回はPython 3.6を使ってAmazon ElastiCache(Memcached)への通信を行い、一通りの動作を試したいと思います。
*今回はLambdaからElastiCacheへの通信を行います。

目次

概要

“action”、”cache_key”、”cache_value”三つの引数を渡し、Memcachedを操作するLambdaをPythonで作成します。

標準ライブラリ以外も必要となるため今回はzipアップロードとなります。

また今回使用するバージョンはこの通りです。

  • Python v3.6
  • ElastiCache Memcached v1.5.16
  • elasticache_auto_discovery v1.0.0
  • pymemcache v2.2.2

事前準備

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の操作となります。