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

从 Lambda 函数访问 AWS 资源

Lambda 不对您的函数逻辑施加任何限制 – 如果您可以对逻辑进行编码,则可在 Lambda 函数内部运行此逻辑。在您的函数中,您可能需要调用其他 API,或者访问其他 AWS 服务(如数据库)。

访问 AWS 服务

要访问其他 AWS 服务,您可以使用 AWS 开发工具包。AWS Lambda 会自动将开发工具包所需的凭证设置为与您的函数关联的 IAM 角色的凭证,您无需采取任何其他步骤。例如,以下示例代码使用 Python 开发工具包访问 S3 对象。

import boto3 import botocore BUCKET_NAME = 'my-bucket' # replace with your bucket name KEY = 'my_image_in_s3.jpg' # replace with your object key s3 = boto3.resource('s3') try: s3.Bucket(BUCKET_NAME).download_file(KEY, 'my_local_image.jpg') except botocore.exceptions.ClientError as e: if e.response['Error']['Code'] == "404": print("The object does not exist.") else: raise

为方便起见,AWS Lambda 包含 AWS 开发工具包版本作为执行环境的一部分,这样一来,您无需将它包含在内。有关包含的开发工具包版本,请参阅 AWS Lambda 运行时。建议您包含自己的适用于生产应用程序的 AWS 开发工具包副本,以便能控制自己的依赖项。

访问非 AWS 服务

您可以包含任何开发工具包以将任何服务作为 Lambda 函数的一部分进行访问。例如,您可以包含适用于 Twilio 的开发工具包以访问 Twilio 账户中的信息。在对开发工具包的凭证进行加密后,您可以使用AWS Lambda 环境变量存储凭证信息。

访问私有服务或资源

默认情况下,您的服务或 API 必须能通过公共 Internet 进行访问,以便 AWS Lambda 能够访问该服务或 API。但是,您可能拥有未通过此方式公开的 API 或服务。通常,您在 Amazon Virtual Private Cloud (Amazon VPC) 内部创建这些资源,以便这些资源不能通过公共 Internet 访问。这些资源可以是 AWS 服务资源,例如 Amazon Redshift 数据仓库、Amazon ElastiCache 集群或 Amazon RDS 实例。它们还可以是在您自己的 EC2 实例上运行的您自己的服务。默认情况下,无法从 Lambda 函数访问 VPC 中的资源。

默认情况下,AWS Lambda 在 VPC 中安全运行函数代码。但是,要让 Lambda 函数能够访问私有 VPC 中的资源,您必须提供包括 VPC 子网 ID 和安全组 ID 在内的其他 VPC 特定的配置信息。AWS Lambda 使用此信息设置弹性网络接口 (ENI),此接口可让您的函数安全连接到私有 VPC 中的其他资源。

重要

AWS Lambda 不支持连接到专用租赁 VPC 中的资源。有关更多信息,请参阅专用 VPC

要了解如何配置 Lambda 函数以访问 VPC 中的资源,请参阅 配置 Lambda 函数以访问 Amazon VPC 中的资源