无服务器框架 - 如何禁用所有 API 到 AWS Lambda 函数的路由并仅使用 SNS

Serverless Framework - How to disable all API routes to an AWS Lambda function and use SNS only

我正在使用无服务器框架并希望创建一个仅通过 SNS 通知触发的 AWS Lambda 函数。

functions:
  myHandler:
    handler: handler.foo
    events:
      - sns: mySNSTopic

但是这会生成 POST 路线:

Serverless: Routes for myHandler:
Serverless: POST /{apiVersion}/functions/my-app-staging-myHandler/invocations

为什么要这样做?我怎样才能禁用它?

更新我看到现在只有离线模式

为什么要这样做?我不知道。

如何禁用它?我可以帮你解决这个问题。我不知道如何阻止生成 POST 路由,但我可以向您展示如何阻止除 SNS 之外的任何其他内容调用您的函数。

你可以attach a resource-based IAM policy to your lambda function。具体来说,您可以附加一个策略,拒绝所有访问来调用 lambda 函数,但允许 SNS 调用它除外。

政策看起来像这样:

{
    "Version": "2012-10-17",
    "Statement": [{
        "Sid": "InvokeMyLambdaFunctionOnlyFromSNS",
        "NotPrincipal": {
            "Service": [
                "sns.amazon.com"
            ]
        },
        "Effect": "Deny",
        "Action": "lambda:InvokeFunction",
        "Resource": "arn:aws:lambda:region:AccountID:function:function_name"
    }]
}

玩了一下才发现它只是Serverless Offline创建的,并没有推送上线。我使用 sls 使用 sls lambda invoke 自行调用 Lambda。