处理 Amazon S3 事件 - AWS Serverless Application Model
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

处理 Amazon S3 事件

使用此示例应用程序,您可以基于在前面示例中学到的内容进行构建,并安装更复杂的应用程序。此应用程序包含一个由 Lambda 对象上传事件源调用的 Amazon S3 函数。本练习介绍如何通过 Lambda 函数访问 AWS 资源和进行 AWS 服务调用。

此示例无服务器应用程序在 Amazon S3 中处理对象创建事件。对于上传到存储桶的每个图像,Amazon S3 将检测对象创建事件并调用 Lambda 函数。函数调用 Lambda 来检测图像中的文本。Amazon Rekognition然后,它将 Amazon Rekognition 返回的结果存储在 DynamoDB 表中。

注意

使用此示例应用程序,您可以按照与前面示例中略微不同的顺序执行步骤。此示例的原因是要求创建 AWS 资源并配置 IAM 权限,然后才能在本地测试 Lambda 函数。我们将利用 AWS CloudFormation 为您创建资源和配置权限。否则,您需要手动执行该操作,然后才能在本地测试 Lambda 函数。

由于此示例较为复杂,请确保在执行此示例之前熟悉安装前面的示例应用程序。

开始前的准备工作

确保您已完成 安装 AWS SAM CLI 中的所需设置。

步骤 1: 初始化应用程序

在本节中,您将下载示例应用程序,其中包括 AWS SAM 模板和应用程序代码。

初始化应用程序

  1. 在 AWS SAM CLI 命令提示符处运行以下命令。

    sam init \ --location https://github.com/aws-samples/cookiecutter-aws-sam-s3-rekognition-dynamodb-python \ --no-input
  2. 查看命令创建的目录的内容 (aws_sam_ocr/):

    • template.yaml – 定义 Amazon S3 应用程序所需的三种 AWS 资源:Lambda 函数、Amazon S3 存储桶和 DynamoDB 表。该模板还定义了这些资源之间的映射和权限。

    • src/ 目录 – 包含 Amazon S3 应用程序代码。

    • SampleEvent.json – 用于本地测试的示例事件源。

步骤 2: 打包应用程序

在本地测试此应用程序之前,您必须使用 AWS SAM CLI 创建部署程序包,用它来将应用程序部署到 AWS 云。此部署创建在本地测试应用程序所需的必要的 AWS 资源和权限。

创建 Lambda 部署程序包

  1. 在要保存打包代码的位置创建 S3 存储桶。如果要使用现有 S3 存储桶,请跳过此步骤。

    aws s3 mb s3://bucketname
  2. 通过在命令提示符处运行以下 package CLI 命令来创建部署程序包。

    sam package \ --template-file template.yaml \ --output-template-file packaged.yaml \ --s3-bucket bucketname

    在下一步中部署应用程序时,指定新的模板文件 packaged.yaml

步骤 3: 部署应用程序

现在,您已经创建了部署程序包,可以使用它将应用程序部署到 AWS 云。然后,通过在 AWS 云中调用该应用程序来对其进行测试。

将无服务器应用程序部署到 AWS 云

  • 在 AWS SAM CLI 中,使用 deploy 命令部署您在模板中定义的所有资源。

    sam deploy \ --template-file packaged.yaml \ --stack-name aws-sam-ocr \ --capabilities CAPABILITY_IAM \ --region us-east-1

    在命令中,--capabilities 参数允许 AWS CloudFormation 创建 IAM 角色。

    AWS CloudFormation 创建模板中定义的 AWS 资源。您可以在 AWS CloudFormation 控制台中访问这些资源的名称。

在 AWS 云中测试无服务器应用程序

  1. 将图像上传到您为此示例应用程序创建的 Amazon S3 存储桶。

  2. 打开 DynamoDB 控制台并查找已创建的表。有关 Amazon Rekognition 返回的结果,请参阅该表。

  3. 确认 DynamoDB 表包含的新记录包含 Amazon Rekognition 在上传的图像中找到的文本。

步骤 4: 在本地测试应用程序

您必须先检索由 AWS CloudFormation 创建的 AWS 资源的名称,然后才能在本地测试应用程序。

  • 从 Amazon S3 检索 AWS CloudFormation 密钥名称和存储桶名称。通过替换对象键、存储桶名称和存储桶 ARN 的值来修改 SampleEvent.json 文件。

  • 检索 DynamoDB 表名称。此名称用于以下 sam local invoke 命令。

使用 AWS SAM CLI 生成示例 Amazon S3 事件并调用 Lambda 函数:

TABLE_NAME=Table name obtained from AWS CloudFormation console sam local invoke --event SampleEvent.json

部分设置 TABLE_NAME= 表名称。DynamoDB参数指定包含要传递给 --event 函数的测试事件消息的文件。Lambda

现在,您可以根据 DynamoDB 返回的结果验证是否已创建预期的 Amazon Rekognition 记录。

后续步骤

AWS SAM 存储库包含可供您下载和试验的其他示例应用程序。GitHub要访问此存储库,请参阅 AWS SAM 示例应用程序