嘿,我刚开始使用Serverless,所以我试图尽可能精确地解决我的问题。
我正在使用AWS AppSyncDynamoDB解析器来使用GraphQL在我的Amazon DynamoDB表中存储和检索数据。一切运行良好,直到我想使用Batch操作(特别是BatchDeleteItem)。
即使我在Serverless.yml文件中指定了以下内容,我仍然得到用户缺少必要权限的错误:
Effect: “Allow”
Action:
- dynamodb:DescribeTable
- dynamodb:Query
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem
- dynamodb:BatchWriteItem
- dynamodb:BatchDeleteItem
我进入IAM管理控制台,发现在创建的策略中BatchWriteItem和BatchDelteItem丢失了:
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Action”: [
“dynamodb:DeleteItem”,
“dynamodb:GetItem”,
“dynamodb:PutItem”,
“dynamodb:Query”,
“dynamodb:Scan”,
“dynamodb:UpdateItem”
],
“Resource”: [
“arn:aws:dynamodb:eu-central-1:MYID:table/MYTABLENAME”,
“arn:aws:dynamodb:eu-central-1:MYID:table/MYTABLENAME/*”
],
“Effect”: “Allow”
}
]
}
当我手动将必要的权限添加到策略时,一切正常。但是,对我而言,非常重要的一点是,此策略是在serverless.yml文件上创建并进行sls部署的。
我在这里想念东西吗?
感谢Ben!
答案 0 :(得分:0)
这不能完全回答您的问题(至少不是问“为什么不批处理读/写”的部分),但这在您需要由AWS托管策略。考虑到这一点,您可以使用DynamoDB crud policy. 您的政策将如下所示(附在资源的“政策”标签上)
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref YourTableName
由于缺少DynamoDBCrudPolicy唯一的策略是DescribeTable,因此可以根据需要尝试单独添加该策略。
答案 1 :(得分:0)
实际上解决了我的问题的是,通过无服务器Appsync插件调用了Appsync的lambda函数,并且在该角色内,缺少BatchWriteItem。
我将package.json文件中的plugin版本更改为GitHub版本,在该版本中此问题已得到解决,但直到今天仍未发布。这修复了它:
"serverless-appsync-plugin": "https://github.com/sid88in/serverless-appsync-plugin.git#e33b5cfd"