使用 Amplify 为 AppSync 自动化 Lambda 解析器?

Automate Lambda resolver for AppSync using Amplify?

我有一个使用 AWS Amplify 的 React 应用程序设置。该应用程序的最初目的是充当 AWS Appstream 的门户。用户可以通过 Appstream api.

登录并启动流媒体实例

生成流的部分 url 是一个 Lambda 函数。目前,这是通过 AWS SDK 直接从应用程序调用的(IAM 上下文通过 Cognito 实现)。但是,该门户的功能会不断增加,我可能需要 api。为此,我正在考虑使用 AppSync/GraphQL.

但我想知道是否可以通过专门使用 GraphQL 来简化应用程序中的编码模式。也就是说,我可以使用 GraphQL/AppSync 来调用我创建的 Lambda 函数吗?我想这样做有几个原因:

  1. 我的主要目标是将 Amplify 简化为通用协议(在本例中为 GraphQL)。这意味着我可以创建一个在本地运行的门户版本。它还有助于支持我的另一个目标——通过使用 GraphQL,它可以使更改云提供商成为可能(无需重写所有内容)

  2. 我想在 Elm 中制作应用程序原型 - 看看针对 Amplify 进行编码是否可行。 Elm 没有 AWS/Amplify 库。但是有一个 GraphQL 库。这可以提供一种减少互操作的方法

  3. 我可以为 Lambda 调用添加一个 Rest api,但最好保持 api 访问一种方法

抱歉,如果这是一个幼稚的问题 - 我目前正在学习 AppSync/GraphQL、Lambda 和 Amplify。

看看 AppSync 本身,我似乎可以创建一个名为 Fleet 的对象,并使 streamingUrl 成为 GetFleet() returns 的 属性。然后我可以将解析器附加到此 属性 的 Lambda 函数。但是,似乎没有明显的方法可以通过 Amplify 进行配置。我已经通过 amplify function add 成功地重新创建了我的 Lambda 函数,这很好。

有没有办法通过 Amplify 自动执行此操作?也许这是创建我自己的 GraphQL Transform 的问题?或者 Amplify 中是否已经有一些东西可以做到这一点,但我只是没有看到它?

更新:

AppSync 现在似乎可以做到这一点。您可以阅读更多相关信息 here and here

原始答案:

回答问题中通过GraphQL调用Lambda的部分:

我认为这现在可以通过 AppSync 实现,但不能通过 Amplify 实现。

使用 AppSync 控制台将允许您创建 Lambda 解析器 - Amplify 目前不支持此功能。当您从 Amplify 发布时,您的解析器将被覆盖。

似乎正在处理此问题:

https://github.com/aws-amplify/amplify-cli/issues/74

https://github.com/aws-amplify/amplify-cli/issues/83

是的,您可以在 Amplify 上执行此操作。

文档

放大:https://aws-amplify.github.io/docs/cli-toolchain/graphql#function

AWS AppSync(也值得一读以获得有用的一般指导):https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-lambda-resolvers.html

示例:

演练 + 代码回购: