教程:配置 Lambda 函数,以便在 Amazon VPC 中访问 Amazon ElastiCache - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

教程:配置 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 集群。

有关结合 Amazon VPC 使用 Lambda 的详细信息,请参阅 配置 Lambda 函数以访问 VPC 中的资源

Prerequisites

本教程假设您对 Lambda 基本操作和 Lambda 控制台有一定了解。如果您还没有了解,请按照 Lambda 入门 中的说明创建您的第一个 Lambda 函数。

要完成以下步骤,您需要命令行终端或 Shell,以便运行命令。在单独的数据块中列出了命令和预期输出:

aws --version

您应看到以下输出:

aws-cli/2.0.57 Python/3.7.4 Darwin/19.6.0 exe/x86_64

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

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

创建执行角色

创建执行角色,向您的函数授予访问 Amazon 资源的权限。

创建执行角色

  1. 在 IAM 控制台中,打开 Roles(角色)页面

  2. 选择创建角色

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

    • Trusted entity(可信任的实体)– Lambda。

    • Permission(权限)– AWSLambdaVPCAccessExecutionRole

    • Role name(角色名称)– lambda-vpc-role

AWSLambdaVPCAccessExecutionRole 具有函数管理与 VPC 的网络连接所需的权限。

创建 ElastiCache 集群。

在默认 VPC 中创建 ElastiCache 集群。

  1. 运行以下 Amazon CLI 命令以创建 Memcached 集群。

    aws elasticache create-cache-cluster --cache-cluster-id ClusterForLambdaTest --cache-node-type cache.t3.medium --engine memcached --num-cache-nodes 1 --security-group-ids sg-0123a1b123456c1de

    您可以在 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")

Dependencies

  • pymemcache – Lambda 函数代码使用此库创建 HashClient 对象,以便在内存缓存中设置和获取项目。

  • elasticache-auto-discovery – Lambda 函数使用此库来获取 Amazon ElastiCache 集群中的节点。

使用 Pip 安装依赖项并创建部署包。有关说明,请参阅使用 .zip 文件归档部署 Python 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.8 \ --role arn:aws:iam::123456789012:role/lambda-vpc-role \ --vpc-config SubnetIds=subnet-0532bb6758ce7c71f,subnet-d6b7fda068036e11f,SecurityGroupIds=sg-0897d5f549934c2fb

您可以从 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 文件。

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

    • 在 CloudWatch Logs 中验证结果。

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

清除 资源

除非您想要保留为本教程创建的资源,否则可立即将其删除。通过删除您不再使用的 Amazon 资源,可防止您的 Amazon 账户产生不必要的费用。

删除 Lambda 函数

  1. 打开 Lamba 控制台的 Functions(函数)页面

  2. 选择您创建的函数。

  3. 选择 Actions (操作),然后选择 Delete (删除)

  4. 选择 Delete

删除执行角色

  1. 打开 IAM 控制台的 Roles(角色)页面

  2. 选择您创建的执行角色。

  3. 选择删除角色

  4. 选择 Yes, delete (是,删除)

删除 ElastiCache 集群

  1. 打开 ElastiCache 控制台的 Memcached 页面

  2. 选择您创建的集群。

  3. 依次选择 ActionsDelete

  4. 选择 Delete