AWS Lambda
開発者ガイド

チュートリアル: Amazon VPC で Amazon ElastiCache にアクセスできるように Lambda 関数を設定する

このチュートリアルでは、以下の作業を行います。

  • デフォルトの Amazon Virtual Private Cloud で Amazon ElastiCache クラスターを作成します。Amazon ElastiCache の詳細については「Amazon ElastiCache」を参照してください。

  • ElastiCache クラスターにアクセスするための Lambda 関数を作成します。Lambda 関数を作成する際には、Lambda 関数で VPC 内のリソースにアクセスできるように、Amazon VPC 内のサブネット ID と VPC セキュリティグループを指定します。このチュートリアルでは、説明のために、この Lambda 関数で UUID の生成、キャッシュへの書き込み、キャッシュからの取得を行います。

  • Lambda 関数を呼び出し、この関数が VPC 内の ElastiCache クラスターにアクセスしたことを確認します。

前提条件

このチュートリアルでは、基本的な Lambda オペレーションと Lambda コンソールについてある程度の知識があることを前提としています。まだ作成していない場合は、AWS Lambda の使用開始 の指示に従って、まず Lambda 関数を作成します。

このガイドの手順に従うには、コマンドを実行するためのコマンドラインターミナルまたはシェルが必要になります。コマンドは、該当する場合、プロンプト記号 ($) と現在のディレクトリの名前が前に付けられて、リストに示されます。

~/lambda-project$ this is a command this is output

コマンドが長い場合は、エスケープ文字 (\) を使用して、コマンドを複数の行に分割します。

Linux および macOS では、任意のシェルとパッケージマネージャーを使用します。Windows 10 では、Linux 用の Windows サブシステムをインストールして、Windows 統合バージョンの Ubuntu および Bash を入手できます。

実行ロールを作成する

AWS リソースにアクセスするためのアクセス権限を関数に付与する実行ロールを作成します。

実行ロールを作成するには

  1. IAM コンソールの [Roles] ページを開きます。

  2. [ロールの作成] を選択します。

  3. 次のプロパティでロールを作成します。

    • 信頼されたエンティティ – Lambda

    • アクセス許可AWSLambdaVPCAccessExecutionRole

    • ロール名lambda-vpc-role

AWSLambdaVPCAccessExecutionRole には、VPC へのネットワーク接続を管理するために関数が必要とするアクセス許可があります。

ElastiCache クラスターの作成

デフォルトの VPC で ElastiCache クラスターを作成します。

  1. 次の AWS CLI コマンドを実行して、Memcached クラスターを作成します。

    $ aws elasticache create-cache-cluster --cache-cluster-id ClusterForLambdaTest \ --cache-node-type cache.m3.medium --engine memcached --num-cache-nodes 1 \ --security-group-ids sg-0897d5f549934c2fb

    デフォルトの VPC セキュリティグループは、VPC コンソールで [Security Groups] から参照できます。チュートリアルの Lambda 関数ではこのクラスターに対して項目の追加や取得を行います。

  2. 起動したキャッシュクラスターの設定エンドポイントをメモします。この情報は Amazon ElastiCache コンソールから取得できます。次のセクションでは、Lambda 関数コードでこの値を指定します。

デプロイパッケージの作成

次の例の Python コードでは、ElastiCache クラスターに対して項目の読み取り/書き込みを行います。

例 app.py

from __future__ import print_function import time import uuid import sys import socket import elasticache_auto_discovery from pymemcache.client.hash import HashClient #elasticache settings elasticache_config_endpoint = "your-elasticache-cluster-endpoint:port" nodes = elasticache_auto_discovery.discover(elasticache_config_endpoint) nodes = map(lambda x: (x[1], int(x[2])), nodes) memcache_client = HashClient(nodes) def handler(event, context): """ This function puts into memcache and get from it. Memcache is hosted using elasticache """ #Create a random UUID... this will be the sample element we add to the cache. uuid_inserted = uuid.uuid4().hex #Put the UUID to the cache. memcache_client.set('uuid', uuid_inserted) #Get item (UUID) from the cache. uuid_obtained = memcache_client.get('uuid') if uuid_obtained.decode("utf-8") == uuid_inserted: # this print should go to the CloudWatch Logs and Lambda console. print ("Success: Fetched value %s from memcache" %(uuid_inserted)) else: raise Exception("Value is not the same as we put :(. Expected %s got %s" %(uuid_inserted, uuid_obtained)) return "Fetched value from memcache: " + uuid_obtained.decode("utf-8")

依存関係

  • pymemcache – Lambda 関数コードはこのライブラリを使用して HashClient オブジェクトを作成し、memcache に対して項目の設定および取得を行います。

  • elasticache-auto-discovery – Lambda 関数はこのライブラリを使用して、Amazon ElastiCache クラスター内のノードを取得します。

Pip で依存関係をインストールし、デプロイパッケージを作成します。手順については、「Python の AWS Lambda デプロイパッケージ」を参照してください。

Lambda 関数を作成する

create-function コマンドを使用して Lambda 関数を作成します。

$ aws lambda create-function --function-name AccessMemCache --timeout 30 --memory-size 1024 \ --zip-file fileb://function.zip --handler app.handler --runtime python3.7 \ --role arn:aws:iam::123456789012:role/lambda-vpc-role \ --vpc-config SubnetIds=subnet-0532bb6758ce7c71f,subnet-d6b7fda068036e11f,SecurityGroupIds=sg-0897d5f549934c2fb

VPC のサブネット ID およびデフォルトのセキュリティグループ ID は、VPC コンソールで確認できます。

Lambda 関数をテストする

このステップでは、invoke コマンドを使用して Lambda 関数を手動で呼び出します。実行された Lambda 関数は UUID を生成し、Lambda コードで指定された ElastiCache クラスターに、その UUID を書き込みます。次に、Lambda 関数はキャッシュから項目を取得します。

  1. invoke コマンドを使用して Lambda 関数を呼び出します。

    $ aws lambda invoke --function-name AccessMemCache output.txt
  2. Lambda 関数が正常に実行されたことを次のように確認します。

    • output.txt ファイルを確認します。

    • AWS Lambda コンソールで結果を確認します。

    • CloudWatch Logs で結果を確認します。

VPC 内の ElastiCache クラスターにアクセスする Lambda 関数を作成したので、イベントへの応答としてこの関数を呼び出すことができます。イベントソースの設定と例については、「他のサービスで AWS Lambda を使用する」を参照してください。