发布于: Aug 23, 2022

Amazon Web Services Lambda 是一种无服务器计算服务,在一般情况下您可以通过运行批量翻译作业轻松且经济高效地解决您的内容本地化问题。然而,有时候您没有时间积聚一批文档并为积聚的批量文档定期调用异步批量 API。在此情况下,您需要文档一准备好后马上就可以开始翻译,这时就会用到Amazon Web Services Lambda。

为了实现此目标,我们使用事件驱动的架构。当新文档上传到指定 S3 存储桶后,我们将配置此 S3 存储桶的设置,以将通知发送至 Amazon Web Services Lambda。收到通知后,Amazon Web Services Lambda 将按顺序执行以下事件,即读取上传到 S3 存储桶的文档、从可以通过实时翻译 API 传递的文档中提取短片段、通过实时翻译 API 传递这些片段、使用实时翻译 API 输出重建翻译好的输出文档,然后将输出保存在指定输出位置。

下图展示了此架构。

您可以通过在 Amazon Web Services CloudFormation 控制台中启动以下 Amazon Web Services CloudFormation 堆栈来在您的 Amazon Web Services 账户中轻松且经济高效地实施此解决方案:

要部署应用程序,请完成以下步骤:
1. 在 Amazon Web Services CloudFormation 控制台上,选择使用新资源创建堆栈(标准)

2. 选择 Amazon S3 URL 并将 https://s3.amazonaws.com/aws-ml-blog/artifacts/serverless-document-translation/translate-lambda-cfn-stack.yml 粘贴到 Amazon S3 URL 字段中,然后选择下一步。

3. 对于堆栈名称,为此账户输入一个唯一的堆栈名称;例如,automated-document-translation

4. 对于 IAMRoleName,为此账户输入一个唯一的 IAM 角色名称;例如 TranslationLambdaExecRole。Lambda 函数将利用此角色以访问所需的 Amazon S3 和 Amazon Translate API。此 IAM 角色附加了两个策略:一个是为输入和输出 S3 存储桶提供读取/写入权限(GetObjectPutObject)的自定义策略,一个是 Amazon Web Services 管理的对 Amazon Translate 进行 API 调用的 TranslateReadOnly 策略。

5. 对于 LambdaFunctionName,请输入唯一的 Amazon Web Services Lambda 函数名称;例如 trigger-translation

6. 对于 InputBucketName,请为堆栈创建的 Amazon S3 存储桶输入一个唯一的名称;例如 raw-input-bucket。输入文档将上传到此存储桶,然后再进行翻译。创建输入存储桶的名称时,仅使用小写字母字符,且不使用空格。此外,此操作将创建新的 S3 存储桶,因此,请勿使用现有存储桶的名称。

7. 对于 OutputBucketName,请为您的输出存储桶输入一个唯一名称;例如 translated-output-bucket。此存储桶将在翻译后存储输出文档。遵照与输入存储桶相同的命名规则。

8. 对于 SourceLanguageCode,请输入您希望翻译的文档所处的语言代码;例如,英语用 en,或者 auto 用于自动检测语言。

9. 对于 TargetLanguageCode,输入您希望翻译的文档所处的语言代码;例如,德语用 de。有关支持的语言代码的更多信息,请参阅什么是 Amazon Translate?

10. 选择下一步。

11. 在配置堆栈选项页面上,选择任何其他可选参数,包括堆栈的标签。

12. 选择下一步。

13. 选择我确认 Amazon Web Services CloudFormation 可以使用自定义名称创建 IAM 资源复选框。

14. 选择创建堆栈。

堆栈创建最多需要一分钟完成。

当您创建 Amazon Web Services CloudFormation 堆栈后,您即已准备好开始使用该解决方案。

您可以将要翻译的文本文档上传到输入 S3 存储桶中。如此一来,工作流程将开始,且翻译好的文档将在完成时自动出现在输出 S3 存储桶中。

翻译好的文档存储在输出 S3 存储桶中,路径如下:
<TargetLanguageCode>/<original path of the source file>. 例如,如果标题为 FinalProposal.txt 的输入文档存储在输入 S3 存储桶内名为 Marketing 的 S3 文件夹中,则其德语翻译文档将存储在输出存储桶内的 de/Marketing/FinalProposal.txt 中。

如果您没有在输出 S3 存储桶中看到该文档,则检查 Amazon CloudWatch Logs 中有无相应的 Lambda 函数并查找导致失败的潜在错误。

此解决方案仅适用于处理 UTF-8 格式的文本文档。您可以修改此博文中的 Python 代码来处理不同的文件格式。此解决方案仅限于 Lambda 函数的最大可执行时间。

相关文章