亚马逊说我在这个yml文件中有一个语法错误,任何人都可以找到它吗?



我正在用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

相关内容

最新更新