AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

教程:配置 Lambda 函数以访问 Amazon VPC 中的 Amazon ElastiCache

在本教程中,您将执行以下操作:

  • 在您的默认 Amazon Virtual Private Cloud 中创建 Amazon ElastiCache 集群。有关 Amazon ElastiCache 的更多信息,请参阅 Amazon ElastiCache

  • 创建 Lambda 函数以访问 ElastiCache 集群。在创建 Lambda 函数时,您需要提供 Amazon VPC 和 VPC 安全组中的子网 ID,以允许 Lambda 函数访问您的 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 控制台中的“角色”页面

  2. 选择 Create role (创建角色)

  3. 创建具有以下属性的角色。

    • Trusted entity (可信任的实体) – 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 控制台的 Security Groups 下查找默认 VPC 安全组。您的示例 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 对象,以便在内存缓存中设置和获取项目。

  • 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 以及您的 VPC 的默认安全组 ID。

测试 Lambda 函数。

在此步骤中,您将使用 invoke 命令手动调用 Lambda 函数。当 Lambda 函数执行时,它会生成 UUID,并将它写入到在您的 Lambda 代码中指定的 ElastiCache 集群。然后,Lambda 函数将从缓存中检索项目。

  1. 使用 invoke 命令调用 Lambda 函数。

    $ aws lambda invoke --function-name AccessMemCache output.txt
  2. 按以下过程验证 Lambda 函数是否已成功执行:

    • 查看 output.txt 文件。

    • 在 AWS Lambda 控制台中查看结果。

    • 在 CloudWatch Logs 中验证结果。

您已经创建了 Lambda 函数来访问您的 VPC 中的 ElastiCache 集群,现在您可以调用该函数来响应事件。有关配置事件源和示例的信息,请参阅将 AWS Lambda 与其他服务结合使用