1

我创建了一个 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权限,那么调用就可以工作,但是通过阅读文档,这样做应该是不必要的。

可能出了什么问题?

4

0 回答 0