使用 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 函数吗?我想这样做有几个原因:
我的主要目标是将 Amplify 简化为通用协议(在本例中为 GraphQL)。这意味着我可以创建一个在本地运行的门户版本。它还有助于支持我的另一个目标——通过使用 GraphQL,它可以使更改云提供商成为可能(无需重写所有内容)
我想在 Elm 中制作应用程序原型 - 看看针对 Amplify 进行编码是否可行。 Elm 没有 AWS/Amplify 库。但是有一个 GraphQL 库。这可以提供一种减少互操作的方法
我可以为 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 发布时,您的解析器将被覆盖。
似乎正在处理此问题:
是的,您可以在 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
示例:
演练 + 代码回购:
我有一个使用 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()
returns 的 属性。然后我可以将解析器附加到此 属性 的 Lambda 函数。但是,似乎没有明显的方法可以通过 Amplify 进行配置。我已经通过 amplify function add
成功地重新创建了我的 Lambda 函数,这很好。
有没有办法通过 Amplify 自动执行此操作?也许这是创建我自己的 GraphQL Transform 的问题?或者 Amplify 中是否已经有一些东西可以做到这一点,但我只是没有看到它?
更新:
AppSync 现在似乎可以做到这一点。您可以阅读更多相关信息 here and here
原始答案:
回答问题中通过GraphQL调用Lambda的部分:
我认为这现在可以通过 AppSync 实现,但不能通过 Amplify 实现。
使用 AppSync 控制台将允许您创建 Lambda 解析器 - Amplify 目前不支持此功能。当您从 Amplify 发布时,您的解析器将被覆盖。
似乎正在处理此问题:
是的,您可以在 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
示例:
演练 + 代码回购: