Amazon web services 从Lambda(Python)函数执行AppSync变异,从S3上传触发

Amazon web services 从Lambda(Python)函数执行AppSync变异,从S3上传触发,amazon-web-services,aws-lambda,graphql,aws-appsync,Amazon Web Services,Aws Lambda,Graphql,Aws Appsync,欢迎大家! 我在React中有一个客户端应用程序,它使用AppSync GraphQL API后端。我已经添加了存储器来放大,并且可以将文件上传到存储器中。当一个文件被上传到存储器时,一个Lambda函数被触发,我能够遍历内容。我已使用Cognito用户池身份验证配置了AWS AppSync API 我的要求是我需要将Lambda函数(用python编写)的GraphQL变异为AppSync API 简言之,要求是: 使用AppSync将Excel文件上载到S3存储桶 在上传时触发lambda

欢迎大家! 我在React中有一个客户端应用程序,它使用AppSync GraphQL API后端。我已经添加了存储器来放大,并且可以将文件上传到存储器中。当一个文件被上传到存储器时,一个Lambda函数被触发,我能够遍历内容。我已使用Cognito用户池身份验证配置了AWS AppSync API 我的要求是我需要将Lambda函数(用python编写)的GraphQL变异为AppSync API

简言之,要求是:

  • 使用AppSync将Excel文件上载到S3存储桶
  • 在上传时触发lambda函数(python),以提取Excel文件的内容
  • 根据需要,使用模式将文件内容从Lambda函数发送到AppSync GraphQL
我需要使用Cognito用户凭证,因为我需要获得进行突变的用户的详细信息/

在最后一次更新中,我能够将内容上传到客户端应用程序,该应用程序将Excel工作表转储到S3存储桶中,从而触发Lambda函数

我试图使用“假定角色”,但得到以下错误


[错误]ClientError:发生错误(拒绝访问)当调用该假设角色时,调用该假设角色时,调用该假设角色时,调用该假设角色时,调用该假设角色时,调用该假设角色时,调用该假设角色操作时,调用该假设角色时,调用该假设角色时,调用该假设角色时,操作:用户:用户:arn:arn:arn:arn:arn:arn:arn:arn:arn:各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各各#######:CognitoIdentityCredentials

我目前在python中使用此解决方法来授权我与cognito的AppSync调用:

首先,我授权:

import boto3
import json
from botocore.exceptions import ClientError
import requests
from requests_aws4auth import AWS4Auth

#AppSync variables
s3 = boto3.client('s3')
APPSYNC_API_ENDPOINT_URL = ""
appSyncUnsername = ""
appSyncPassword = ""
appSyncClientID = ""
appSyncUserPool = ""

#create Token for AppSync functionalities using an authorized user
def createToken():
    client = boto3.client('cognito-idp')
    response = client.initiate_auth(
        ClientId=appSyncClientID,
        AuthFlow='USER_PASSWORD_AUTH',
        AuthParameters={
            'USERNAME': appSyncUnsername,
            'PASSWORD': appSyncPassword
        },
        ClientMetadata={
            "UserPoolId" : appSyncUserPool
        }
    )
    token = response["AuthenticationResult"]["AccessToken"]
    return token
使用这个令牌,我可以进行授权呼叫:

def getExample(Id, token):
    session = requests.Session()
    
    Id = "\""+Id+"\""

    query= """query MyQuery {
          getSomething(id: """+Id+""") {
            id
            something
          }
        }"""

    response = session.request(
        url=APPSYNC_API_ENDPOINT_URL,
        method='POST',
        headers={'authorization': token},
        json={'query': query}
        )

    something = response.json()["data"]["getSomething"]["something"]
    return something