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 クラスターにアクセスしたことを確認します。

前提条件

This tutorial assumes that you have some knowledge of basic Lambda operations and the Lambda console. If you haven't already, follow the instructions in AWS Lambda の使用開始 to create your first Lambda function.

To follow the procedures in this guide, you will need a command line terminal or shell to run commands. Commands are shown in listings preceded by a prompt symbol ($) and the name of the current directory, when appropriate:

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

For long commands, an escape character (\) is used to split a command over multiple lines.

On Linux and macOS, use your preferred shell and package manager. On Windows 10, you can install the Windows Subsystem for Linux to get a Windows-integrated version of Ubuntu and 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 your-default-vpc-security-group

    デフォルトの 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 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 クラスター内のノードを取得します。

Install dependencies with Pip and create a deployment package. For instructions, see 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 execution-role-arn \ --vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=default-security-group-id

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 を使用する」を参照してください。