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 集群。

先决条件

本教程假设您对基本 Lambda 操作和 Lambda 控制台有一定了解。如果尚不了解,请按照开始使用 AWS Lambda中的说明创建您的第一个 Lambda 函数。

为了遵循本指南中的步骤,您需要命令行终端或外壳,以便运行命令。命令显示在列表中,以提示符 ($) 和当前目录名称(如果有)开头:

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

对于长命令,使用转义字符 (\) 将命令拆分到多行中。

在 Linux 和 macOS 中,可使用您首选的外壳程序和程序包管理器。在 Windows 10 中,您可以 安装 Windows Subsystem for Linux,获取 Ubuntu 和 Bash 与 Windows 集成的版本。

创建执行角色

创建执行角色,向您的函数授予访问 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 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 对象,以便在内存缓存中设置和获取项目。

  • 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 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 与其他服务结合使用