通过rest api直接调用aws lamdba,无需api网关

问题描述 投票:0回答:2

在这个博客中(https://www.serverless.com/blog/flask-python-rest-api-serverless-lambda-dynamodb)我只看到了 serverless.yaml :

# serverless.yml

service: serverless-flask

plugins:
  - serverless-python-requirements
  - serverless-wsgi

custom:
  wsgi:
    app: app.app
    packRequirements: false
  pythonRequirements:
    dockerizePip: non-linux

provider:
  name: aws
  runtime: python3.6
  stage: dev
  region: us-east-1

functions:
  app:
    handler: wsgi.handler
    events:
      - http: ANY /
      - http: 'ANY {proxy+}'

和app.py:

# app.py

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():u
    return "Hello World!"

如何直接从互联网调用 lambda。 aws 的哪个服务/组件获取此 URL 并且它是永久的。没有API网关可以自定义URL吗?是否也可以将此 URL 提供给客户以用作 API?

python amazon-web-services aws-lambda aws-api-gateway
2个回答
2
投票

具有 http

events
的“无服务器”(即
serverless.com
)功能正在为您创建一个 API 网关。对 API 网关端点的请求将发送到 lambda。因为您使用的是
{proxy+}
选项,所以它基本上会将所有内容路由到该函数,并期望该函数弄清楚请求的含义。

如果您想直接从互联网调用该函数,您可以,但您可能不应该这样做。所有 AWS API 都只是 HTTPs 调用。从互联网上呼叫他们需要拥有凭据,并适当地签署请求。如果您确实想直接从互联网调用它,您可以考虑使用 Cognito。您可以通过 Cognito 身份获取临时凭证,并且可以通过 SDK 调用 lambda 来为您处理签名。


0
投票

在 Node 中,您可以在独立于 API 网关的 URL lambda 上运行 Express 服务器。它稍微便宜一些,部署速度更快,并且您会得到更好的错误消息。权衡是您必须实施自己的安全考虑。对我来说效果很好,因为它有能力解决一些问题,而且我在项目中所做的大多数 API 不需要 API 网关的 90%。

我在Python中还没有找到类似的选项。我在 Python 上看到的所有 Lambda 服务器都显式链接到 API 网关。

© www.soinside.com 2019 - 2024. All rights reserved.