我有一个使用AWS Amplify的React应用程序设置。该应用程序的最初目的是充当AWS Appstream的门户。用户可以通过Appstream api登录并启动流实例。
生成流URL的部分是Lambda函数。当前,这是通过AWS sdk从应用程序直接调用的(通过Cognito实现了IAM上下文)。但是,门户网站的功能将不断增长,我可能需要使用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中已经有东西可以做到这一点,而我只是没有看到它?
答案 0 :(得分:2)
更新:
AppSync现在似乎可以做到这一点。您可以详细了解here和here
原始答案:
回答有关通过GraphQL调用Lambda的部分问题:
我认为现在可以通过AppSync来实现,但不能通过Amplify来实现。
使用AppSync控制台将允许您创建Lambda解析器-Amplify当前不支持此功能。当您从Amplify发布时,您的解析器将被覆盖。
似乎正在解决此问题:
答案 1 :(得分: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
演练+代码库: