直接 Lambda 解析器 (VTL) - Amazon AppSync
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

直接 Lambda 解析器 (VTL)

注意

我们现在主要支持 APPSYNC_JS 运行时环境及其文档。请考虑使用 APPSYNC_JS 运行时环境和此处的指南。

通过使用直接 Lambda 解析器,您可以在使用 Amazon Lambda 数据源时避免使用 VTL 映射模板。AmazonAppSync 可以为您的 Lambda 函数提供默认负载,以及从 Lambda 函数响应到 GraphQL 类型的默认转换。您可以选择提供请求模板、响应模板或两者都不提供,Amazon AppSync 将相应地进行处理。

要了解 Amazon AppSync 提供的默认请求负载和响应转换的更多信息,请参阅直接 Lambda 解析器参考。有关设置 Amazon Lambda 数据源和设置 IAM 信任策略的更多信息,请参阅附加数据源

配置直接 Lambda 解析器

以下几节说明了如何附加 Lambda 数据源,并将 Lambda 解析器添加到您的字段中。

添加 Lambda 数据源

您必须先添加 Lambda 数据源,然后才能激活直接 Lambda 解析器。

Console
  1. 登录到 Amazon Web Services Management Console,然后打开 AppSync 控制台

    1. API 控制面板中,选择您的 GraphQL API。

    2. 侧边栏中,选择数据源

  2. 选择创建数据源

    1. 对于数据源名称,输入您的数据源的名称,例如 myFunction

    2. 对于数据源类型,选择 Amazon Lambda 函数

    3. 对于区域,选择相应的区域。

    4. 对于函数 ARN,从下拉列表中选择 Lambda 函数。您可以搜索函数名称,或手动输入要使用的函数的 ARN。

    5. 创建新的 IAM 角色(建议),或者选择具有 lambda:invokeFunction IAM 权限的现有角色。现有角色需要具有一个信任策略,如附加数据源一节中所述。

      以下是一个示例 IAM 策略,该策略具有对资源执行操作所需的权限:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:invokeFunction" ], "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:myFunction", "arn:aws:lambda:us-west-2:123456789012:function:myFunction:*" ] } ] }
  3. 选择创建按钮。

CLI
  1. 运行 create-data-source 命令以创建数据源对象。

    您需要为该特定命令键入 4 个参数:

    1. 您的 API 的 api-id

    2. 您的数据源的 name。在控制台示例中,这是数据源名称

    3. 数据源的 type。在控制台示例中,这是 Amazon Lambda 函数

    4. lambda-config,即控制台示例中的函数 ARN

    注意

    必须配置其他参数(例如 Region),但这些参数通常默认为您的 CLI 配置值。

    示例命令可能如下所示:

    aws appsync create-data-source --api-id abcdefghijklmnopqrstuvwxyz --name myFunction --type AWS_LAMBDA --lambda-config lambdaFunctionArn=arn:aws:lambda:us-west-2:102847592837:function:appsync-lambda-example

    将在 CLI 中返回输出。示例如下:

    { "dataSource": { "dataSourceArn": "arn:aws:appsync:us-west-2:102847592837:apis/abcdefghijklmnopqrstuvwxyz/datasources/myFunction", "type": "AWS_LAMBDA", "name": "myFunction", "lambdaConfig": { "lambdaFunctionArn": "arn:aws:lambda:us-west-2:102847592837:function:appsync-lambda-example" } } }
  2. 要修改数据源的属性,请运行 update-data-source 命令。

    除了 api-id 参数以外,create-data-source 命令中使用的参数将由 update-data-source 命令中的新值覆盖。

激活直接 Lambda 解析器

在创建 Lambda 数据源并设置相应 IAM 角色以允许 Amazon AppSync 调用该函数后,您可以将其链接到解析器或管道函数。

Console
  1. 登录到 Amazon Web Services Management Console,然后打开 AppSync 控制台

    1. API 控制面板中,选择您的 GraphQL API。

    2. 侧边栏中,选择架构

  2. 解析器窗口中,选择一个字段或操作,然后选择附加按钮。

  3. 创建新解析器页面中,从下拉列表中选择 Lambda 函数。

  4. 要使用直接 Lambda 解析器,请确认在配置映射模板部分中禁用了请求和响应映射模板。

  5. 选择保存解析器按钮。

CLI
  • 运行 create-resolver 命令以创建解析器。

    您需要为该特定命令键入 6 个参数:

    1. 您的 API 的 api-id

    2. 架构中的类型的 type-name

    3. 架构中的字段的 field-name

    4. data-source-name 或您的 Lambda 函数名称。

    5. request-mapping-template,这是请求的正文。在控制台示例中,已将其禁用:

      " "
    6. response-mapping-template,这是响应的正文。在控制台示例中,也已将其禁用:

      " "

    示例命令可能如下所示:

    aws appsync create-resolver --api-id abcdefghijklmnopqrstuvwxyz --type-name Subscription --field-name onCreateTodo --data-source-name LambdaTest --request-mapping-template " " --response-mapping-template " "

    将在 CLI 中返回输出。示例如下:

    { "resolver": { "resolverArn": "arn:aws:appsync:us-west-2:102847592837:apis/abcdefghijklmnopqrstuvwxyz/types/Subscription/resolvers/onCreateTodo", "typeName": "Subscription", "kind": "UNIT", "fieldName": "onCreateTodo", "dataSourceName": "LambdaTest" } }

在您禁用映射模板时,将在 Amazon AppSync 中出现一些其他行为:

  • 通过禁用映射模板,您向 Amazon AppSync 发出通知,表示您接受直接 Lambda 解析器参考中指定的默认数据转换。

  • 通过禁用请求映射模板,您的 Lambda 数据源将接收包含整个上下文对象的负载。

  • 通过禁用响应映射模板,将转换您的 Lambda 调用结果,具体取决于请求映射模板版本或是否还禁用了请求映射模板。