教程:配置 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 与 Amazon VPC 结合使用的详细信息,请参阅配置 Lambda 函数以访问 VPC 中的资源。
先决条件
本教程假设您对基本 Lambda 操作和 Lambda 控制台有一定了解。如果尚不了解,请按照AWS Lambda 入门中的说明创建您的第一个 Lambda 函数。
要完成以下步骤,您需要命令行终端或 Shell 以运行命令。命令显示在列表中,以提示符 ($) 和当前目录名称(如果有)开头:
~/lambda-project$ this is a command
this is output
对于长命令,使用转义字符 (\
) 将命令拆分到多行中。
在 Linux 和 macOS 中,可使用您首选的外壳程序和程序包管理器。在 Windows 10 中,您可以 安装 Windows Subsystem for Linux
创建执行角色
创建执行角色,向您的函数授予访问 AWS 资源的权限。
创建执行角色
-
打开 IAM 控制台中的“角色”页面
。 -
选择 Create role (创建角色)。
-
创建具有以下属性的角色。
-
Trusted entity (可信任的实体) – Lambda.
-
权限 – AWSLambdaVPCAccessExecutionRole。
-
角色名称 (角色名称) –
lambda-vpc-role
。
-
AWSLambdaVPCAccessExecutionRole 具有函数管理与 VPC 的网络连接所需的权限。
创建 ElastiCache 集群
在您的默认 VPC 中创建 ElastiCache 集群。
-
运行以下 AWS 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 函数将在该集群中添加和检索项目。
-
记下您启动的缓存集群的配置终端节点。您可通过 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.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
函数将从缓存中检索项目。
-
使用
invoke
命令调用 Lambda 函数。$
aws lambda invoke --function-name AccessMemCache output.txt
-
按以下过程验证 Lambda 函数是否已成功执行:
-
查看 output.txt 文件。
-
在 AWS Lambda 控制台中查看结果。
-
在 CloudWatch Logs 中验证结果。
-
您已经创建了 Lambda 函数来访问您的 VPC 中的 ElastiCache 集群,现在您可以调用该函数来响应事件。有关配置事件源和示例的信息,请参阅将 AWS Lambda 与其他服务一起使用。
清除资源
如果您不想保留为本教程创建的资源,可以立即将其删除。通过删除您不再使用的 AWS 资源,可防止您的 AWS 账户产生不必要的费用。
删除 Lambda 函数
-
打开 Lambda 控制台的“函数”页面
。 -
选择您创建的函数。
-
依次选择 Actions 和 Delete。
-
选择删除。
删除执行角色
-
打开 IAM 控制台的“角色”页面
。 -
选择您创建的执行角色。
-
选择删除角色。
-
选择 Yes, delete (是,删除)。
删除 ElastiCache 集群
-
打开 ElastiCache 控制台的 Memcached 页面
。 -
选择您创建的集群。
-
依次选择 Actions 和 Delete。
-
选择 Delete。