我创建了一个 template.yaml 文件来声明一个由 api 网关调用的简单 lambda 函数。当我尝试从 api 网关 url 调用函数时,请求失败,{"message": "Internal server error"}
并且在 cloudwatch api 网关日志中我看到错误消息Invalid permissions on Lambda function。
这是我的模板.yaml:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Parameters:
AliasName:
Type: String
Default: dev
Resources:
DynamoDBTenantTable:
Type: AWS::DynamoDB::Table
Properties:
AttributeDefinitions:
- AttributeName: clientApiKey
AttributeType: S
KeySchema:
- AttributeName: clientApiKey
KeyType: HASH
ProvisionedThroughput:
ReadCapacityUnits: 5
WriteCapacityUnits: 5
TableName: !Sub "authtable-${AliasName}"
AmeAuthenticatorLambda:
Type: AWS::Serverless::Function
Properties:
Handler: authenticator.handler
Policies: AmazonDynamoDBFullAccess
Runtime: nodejs8.10
CodeUri: src/
Environment:
Variables:
TABLE_NAME: !Sub "authtable-${AliasName}"
Events:
AuthenticatorEvent:
Type: Api
Properties:
Path: /authentication/
Method: POST
SAM 文档说,上面的语法能够隐式创建必要的权限和 API 声明。
我还遵循了AWS 网站上的一个示例。
如果我在 template.yaml 文件中添加一个lambda:InvokeFunction权限,那么调用就可以工作,但是通过阅读文档,这样做应该是不必要的。
可能出了什么问题?