Aws lambda AWS Appsync调用从Lambda变异?
我有一个客户端应用程序订阅了Appysync事件。数据源是RDS的Lambda函数。是否可以调用在RDS更新时触发的mutate from Lambda函数 如果我理解正确,您希望调用lambda函数的变异,该变异是通过RDS中的更新触发的,目的是通知订阅的客户端RDS中的更改。如果这是错误的,现在就阻止我 我假设您正在执行类似于这里描述的操作,以便在RDS()中发生变化时触发lambda 要完成工作流,我建议您创建一个本地解析器(一个指向“无”数据源的解析器),并让lambda函数调用该变异解析器,以便在RDS发生变化时将数据推送到客户端应用程序。然后,您的客户端将使用@aws_subscribe指令使用本地解析器(而不是RDS lambda的解析器)订阅变异字段。通过这种方式,您连接的客户端将被告知可能通过AppSync或直接连接到SQL实例进行的任何RDS更改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函数调用该变异解
希望这能有所帮助。我在这篇文章中找到了一个与你非常相似的问题: 恢复时,只需向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客户端使用的签名者代码。另一个选择是,我过去在这个图书馆很幸运。看看我的答案,看看它是否是你需要的。我编辑了上面的帖子,以便更好地向你解释。试着做同样的事情,看看结果。