Aws lambda 无服务器框架Lambda AppSync错误

Aws lambda 无服务器框架Lambda AppSync错误,aws-lambda,amazon-cloudformation,serverless-framework,serverless,aws-appsync,Aws Lambda,Amazon Cloudformation,Serverless Framework,Serverless,Aws Appsync,我正在使用无服务器框架上传一个AWS Lambda函数,用作AppSync中的数据源。我拥有的serverless.yml非常基本: service: mongoose-lambda-srvrls provider: name: aws runtime: nodejs6.10 region: us-west-2 functions: mongoose: handler: index.handler 当我运行AppSync GraphQL查询时,会出现以下错误: {

我正在使用无服务器框架上传一个AWS Lambda函数,用作AppSync中的数据源。我拥有的
serverless.yml
非常基本:

service: mongoose-lambda-srvrls
provider:
  name: aws
  runtime: nodejs6.10
  region: us-west-2
functions:
  mongoose: 
    handler: index.handler 
当我运行AppSync GraphQL查询时,会出现以下错误:

{
  "data": {
    "getPost": null
  },
  "errors": [
    {
      "path": [
        "getPost"
      ],
      "data": null,
      "errorType": "Lambda:AWSLambdaException",
      "errorInfo": null,
      "locations": [
        {
          "line": 43,
          "column": 2
        }
      ],
      "message": "User: arn:aws:sts::433333333335:assumed-role/appsync-datasource-lam-kkzuep-mongoose-lambda-srvr/APPSYNC_ASSUME_ROLE is not authorized to perform: lambda:InvokeFunction on resource: arn:aws:lambda:us-west-2:43333333333335:function:mongoose-lambda-srvrls-dev-mongoose (Service: AWSLambda; Status Code: 403; Error Code: AccessDeniedException; Request ID: 9fa82eb9-3a64-11e8-88a1-09c4e639fc45)"
    }
  ]
}
我非常确定我需要充实我的YML,这样这个lambda堆栈就可以很好地与AppSync配合使用,但我不确定该怎么做


多一点信息。当查看Lambda的CloudFormation中的资源时,我看到:

IamRoleLambdaExecution  mongoose-lambda-srvrls-dev-us-west-2-lambdaRole AWS::IAM::Role
MongooseLambdaFunction  mongoose-lambda-srvrls-dev-mongoose AWS::Lambda::Function   
MongooseLambdaVersionwCQ1...    arn:aws:lambda:us-west-2:4542242445:function:mongoose-lambda-srvrls-dev-mongoose:4  AWS::Lambda::Version    
MongooseLogGroup    /aws/lambda/mongoose-lambda-srvrls-dev-mongoose AWS::Logs::LogGroup 
ServerlessDeploymentBucket  mongoose-lambda-srvrls-d-serverlessdeploymentbuck-qwp8sdfgjr    AWS::S3::Bucket
而在我使用AppSync文档(AWS CLI)制作的Lambda中,有以下CloudFormation资源:

AppSyncLambdaInvokePolicy   Fulls-AppS-15SHASDFSADZ03N  AWS::IAM::Policy
AppSyncServiceRole  Fullstack-Lamba-AppSyncServiceRole-DK8QHASDFE5R AWS::IAM::Role
LambdaExecutionRole Fullstack-Lamba-LambdaExecutionRole-OJHASDF3AHG1    AWS::IAM::Role  
LambdaFunction  fullstack-lambda    AWS::Lambda::Function

您授予AppSync运行lambda函数的角色似乎没有调用该特定lambda的权限

您需要创建或修改角色,使其具有以下权限

IAM角色应该有一个策略,允许任何假定它的人运行/调用lambda函数:

{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“行动”:[
“lambda:调用”
],
“资源”:“arn:aws:lambda:REGION:ACCOUNTNUMBER:function/lambda_function”
}
]
}
该角色还应具有信任策略。此信任策略将允许AppSync代表您担任此角色。这就是AppSync在收到graphQL请求时调用lambda的方式

{
“版本”:“2012-10-17”,
“声明”:[
{
“效果”:“允许”,
“委托人”:{
“服务”:“appsync.amazonaws.com”
},
“操作”:“sts:假定角色”
}
]
}
拥有具有必要权限的IAM角色后,需要确保该角色与AppSync中的lambda数据源相关联。您可以在AppSync控制台的
数据源
部分中选择角色,或使用AppSync CLI更新lambda数据源并使其使用您的角色


有关创建lambda函数以更好地使用AppSync的更多信息,请参阅以下文档:

我认为他们在文档中犯了一个错误

允许的操作应该是
lambda:InvokeFunction
,而不是
lambda:Invoke

这是有效的:

{
“版本”:“2012-10-17”,
“声明”:[{
“效果”:“允许”,
“操作”:“lambda:InvokeFunction”,
“资源”:“arn:aws:lambda:REGION:ACCOUNTNUMBER:function/lambda_function”
}]
}

我尝试过,但发现appsync只能在同一区域调用lambda函数,否则我将收到错误:lambda无法承担为函数定义的角色。(服务:AWSLambda;状态代码:403;错误代码:AccessDeniedException;请求ID:3f9fad95-4e8b-11e8-823c-854fa1d72c56)。有什么我需要做的吗?几次攻击后,等待几分钟。配置没有什么问题,只是需要耐心等待一段时间,或者只是创建一个新函数并再次进行配置Hey@michael willingham我认为您在策略文档中犯了一个错误,请参阅我认为AWS在其文档中犯了一个简单的打字错误,请参阅