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

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

处理 Amazon S3 事件

使用此示例应用程序,您可以在前面示例所学内容的基础上进行构建,然后安装更复杂的应用程序。此应用程序由一个 Lambda 函数组成,该函数由 Amazon S3 对象上传事件源调用。本练习向您展示如何通过 Lambda 函数访问 Amazon 资源和进行 Amazon 服务调用。

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

注意

使用此示例应用程序,执行步骤的顺序与前面的示例略有不同。其原因在于,此示例要求先创建 Amazon 资源并配置 IAM 权限,然后才能在本地测试 Lambda 函数。我们将利用 Amazon CloudFormation 来创建资源并为您配置权限。否则,您需要手动执行此操作,然后才能在本地测试 Lambda 函数。

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

开始之前

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

第 1 步:初始化应用程序

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

初始化应用程序
  1. 在 Amazon 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 应用程序所需的三种 Amazon 资源:Lambda 函数、Amazon S3 存储桶和 DynamoDB 表。模板还定义了这些资源之间的映射和权限。

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

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

第 2 步:打包应用程序

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

要创建 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 步:部署应用程序

既然您已创建部署包,就可以使用它将应用程序部署到 Amazon 云。然后,您通过在 Amazon 云中调用来测试该应用程序。

将无服务器应用程序部署到 Amazon 云
  • 在 Amazon SAM CLI 中,使用 deploy 命令部署您在模板中定义的所有资源。

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

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

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

在 Amazon 云中测试无服务器应用程序
  1. 将映像上传到您为本示例应用程序创建的 Amazon S3 存储桶。

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

  3. 验证 DynamoDB 表中是否包含新记录,其中包含 Amazon Rekognition 在上传的映像中找到的文本。

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

在本地测试应用程序之前,必须先检索由 Amazon CloudFormation 创建的 Amazon 资源的名称。

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

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

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

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

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

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

后续步骤

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