Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Aws lambda AWS Appsync调用从Lambda变异?_Aws Lambda_Aws Appsync - Fatal编程技术网

Aws lambda AWS Appsync调用从Lambda变异?

Aws lambda AWS Appsync调用从Lambda变异?,aws-lambda,aws-appsync,Aws Lambda,Aws Appsync,我有一个客户端应用程序订阅了Appysync事件。数据源是RDS的Lambda函数。是否可以调用在RDS更新时触发的mutate from Lambda函数 如果我理解正确,您希望调用lambda函数的变异,该变异是通过RDS中的更新触发的,目的是通知订阅的客户端RDS中的更改。如果这是错误的,现在就阻止我 我假设您正在执行类似于这里描述的操作,以便在RDS()中发生变化时触发lambda 要完成工作流,我建议您创建一个本地解析器(一个指向“无”数据源的解析器),并让lambda函数调用该变异解

我有一个客户端应用程序订阅了Appysync事件。数据源是RDS的Lambda函数。是否可以调用在RDS更新时触发的mutate from Lambda函数

如果我理解正确,您希望调用lambda函数的变异,该变异是通过RDS中的更新触发的,目的是通知订阅的客户端RDS中的更改。如果这是错误的,现在就阻止我

我假设您正在执行类似于这里描述的操作,以便在RDS()中发生变化时触发lambda

要完成工作流,我建议您创建一个本地解析器(一个指向“无”数据源的解析器),并让lambda函数调用该变异解析器,以便在RDS发生变化时将数据推送到客户端应用程序。然后,您的客户端将使用@aws_subscribe指令使用本地解析器(而不是RDS lambda的解析器)订阅变异字段。通过这种方式,您连接的客户端将被告知可能通过AppSync或直接连接到SQL实例进行的任何RDS更改


希望这能有所帮助。

我在这篇文章中找到了一个与你非常相似的问题:

恢复时,只需向Graphql服务器(如API网关)发送一个HTTP请求,并将Graphql查询(也可以是一个变种)作为有效负载。它似乎适合我:)

编辑:

下面这个lambda是我在DynamoDB表上通过insert触发时使用的:

import json
import requests

GRAPHQL_URL = 'https://XXXXXXXXXXXXXXXXX.appsync-api.ap-southeast-2.amazonaws.com/graphql'

GRAPHQL_API_KEY = "************************************" (secret)

HEADERS = {
    "X-Api-Key":GRAPHQL_API_KEY,
}

def lambda_handler(event, context):

    for record in event['Records']:
        if record['eventName'] == 'INSERT':
            item = record['dynamodb']
            res = {}
            data = {"operationName":None,"variables":{"id":item['NewImage']['id']['S'],"name":item['NewImage']['name']['S'],"when":item['NewImage']['when']['S'],"where":item['NewImage']['where']['S'],"description":item['NewImage']['description']['S']},"query":"mutation ($id: ID!, $name: String!, $when: String!, $where: String!, $description: String!) {\n  eventCreated(id: $id, name: $name, when: $when, where: $where, description: $description) {\n    id\n    name\n    where\n    when\n    description\n    comments {\n      items {\n        commentId\n        __typename\n      }\n      __typename\n    }\n    __typename\n  }\n}\n"}

            try:
                res = requests.post(
                    GRAPHQL_URL,
                    headers=HEADERS,
                    data=json.dumps(data)
                )

            except Exception as e:
                print('error: ', e)
            print('Graphql request response: ', res)
    return 'Successfully processed {} records.'.format(len(event['Records']))

您将如何连接到appsync以调用变异?通常,您只需向自定义端点发送一个包含查询、变量和可选操作的HTTP请求。然后它取决于您配置了什么身份验证策略。如果是api_密钥,则需要提供该密钥作为标头。如果是IAM,则需要使用IAM凭据对请求进行SigV4签名。如果使用用户池,则需要通过用户池登录以获取JWT令牌,然后将其作为授权承载头提供。如果是OIDC,那么您将提供从OIDC提供商处获得的JWT作为身份验证承载令牌。我正在尝试做几乎相同的事情。我正在使用IAM并尝试执行SigV4,但遇到了困难。你做过吗?实际上我做了一张票。你能看一下吗?目前在我的手机上,所以还不能重新编写您的代码,但我可以向您指出AppSync客户端使用的签名者代码。另一个选择是,我过去在这个图书馆很幸运。看看我的答案,看看它是否是你需要的。我编辑了上面的帖子,以便更好地向你解释。试着做同样的事情,看看结果。