gpt4 book ai didi

aws-lambda - 无服务器框架 Lambda AppSync 错误

转载 作者:行者123 更新时间:2023-12-01 15:00:55 26 4
gpt4 key购买 nike

我正在使用无服务器框架上传 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 函数:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:Invoke"
],
"Resource": "arn:aws:lambda:REGION:ACCOUNTNUMBER:function/LAMBDA_FUNCTION"
}
]
}

该角色还应该有信任策略。此信任策略将允许 AppSync 代表您承担该角色。这就是每当有 graphQL 请求传入时 AppSync 调用 lambda 的方式。

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "appsync.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

一旦您拥有具有必要权限的 IAM 角色,您将需要确保它与 AppSync 中的 lambda 数据源关联。您可以在 AppSync 控制台的数据源部分中选择角色,或使用 AppSync CLI 更新 lambda 数据源并使其使用您的角色。

有关创建与 AppSync 配合良好的 lambda 函数的更多信息,请参阅以下文档:https://docs.aws.amazon.com/appsync/latest/devguide/tutorial-lambda-resolvers.html#configure-data-source-for-aws-lambda

关于aws-lambda - 无服务器框架 Lambda AppSync 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com