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

Posted

技术标签:

【中文标题】使用 Amplify 为 AppSync 自动化 Lambda 解析器?【英文标题】:Automate Lambda resolver for AppSync using Amplify? 【发布时间】:2019-03-28 07:16:13 【问题描述】:

我有一个使用 AWS Amplify 的 React 应用程序设置。该应用程序的最初目的是充当 AWS Appstream 的门户。用户可以通过 Appstream api 登录和启动流实例。

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

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

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

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

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

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

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

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

【问题讨论】:

【参考方案1】:

是的,您可以在 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

示例:

演练+代码仓库:

https://dev.to/dabit3/lambda-function-graphql-resolvers-11cd https://github.com/dabit3/lambda-graphql-resolver-examples

【讨论】:

【参考方案2】:

更新:

AppSync 现在似乎可以做到这一点。你可以阅读更多关于它的信息here 和 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 为 AppSync 自动化 Lambda 解析器?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Amplify 配置为使用多个 AppSync 端点?

如何使用 Amplify 为 GraphQL API (AWS AppSync) 生成类

将现有 DynamoDB 数据源与 Amplify 和 AppSync 结合使用

AWS Amplify Appsync 在创建具有关系的对象时解决错误

将现有 AppSync API 与/ Amplify 一起使用

Amplify + AppSync 不改变对象