我正在用lambda和dynamodb构建一个rest api。
我正在终端中键入sls deploy,它应该将我的函数部署到aws,但它给了我一个语法错误,并且没有说明错误在哪里。
另一个文件是使用 aws 使用的 yml 文件创建的,但我正在发布 yml 文件,因为它更容易阅读。
这是 yml 文件。我一直在修补它以获得正确的语法,但它仍然不起作用。
确切的错误是:
发生错误:IamRoleLambdaExecution - 策略中的语法错误。(服务:亚马逊身份管理;状态代码:400;错误代码:格式错误的策略文档;请求 ID:b089926b-6d47-4111-9710-e3b6987fd8d7(。
如果这样可以更轻松地解决,我可以发布另一个文件。任何人都可以找到此文件中的缺陷吗?
service: sls
custom:
settings:
POSTS_TABLE: posts
provider:
name: aws
runtime: nodejs12.x
environment: ${self:custom.settings}
region: eu-west-2
iamRoleStatements:
- Effect: "Allow"
Action:
- dynamodb: DescribeTable
- dynamodb: Scan
- dynamodb: GetItem
- dynamodb: PutItem
- dynamodb: UpdateItem
- dynamodb: DeleteItem
Resource:
- "arn:aws:dynamodb:${self:provider.region}:*:table/${self:custom.settings.POSTS_TABLE}"
functions:
createPost:
handler: handler.createPost
events:
- http:
path: /post
method: post
resources:
Resources:
PostsTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: "id"
AttributeType: "S"
KeySchema:
- AttributeName: "id"
KeyType: "HASH"
ProvisionedThroughput:
ReadCapacityUnits: 1
WriteCapacityUnits: 1
TableName: ${self:custom.settings.POSTS_TABLE}
可能的原因是正确的操作名称没有空格。因此,而不是
- dynamodb: DescribeTable
- dynamodb: Scan
- dynamodb: GetItem
- dynamodb: PutItem
- dynamodb: UpdateItem
- dynamodb: DeleteItem
它应该是
- dynamodb:DescribeTable
- dynamodb:Scan
- dynamodb:GetItem
- dynamodb:PutItem
- dynamodb:UpdateItem
- dynamodb:DeleteItem