在这个博客中(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?
具有 http
events
的“无服务器”(即 serverless.com)功能正在为您创建一个 API 网关。对 API 网关端点的请求将发送到 lambda。因为您使用的是
{proxy+}
选项,所以它基本上会将所有内容路由到该函数,并期望该函数弄清楚请求的含义。
如果您想直接从互联网调用该函数,您可以,但您可能不应该这样做。所有 AWS API 都只是 HTTPs 调用。从互联网上呼叫他们需要拥有凭据,并适当地签署请求。如果您确实想直接从互联网调用它,您可以考虑使用 Cognito。您可以通过 Cognito 身份获取临时凭证,并且可以通过 SDK 调用 lambda 来为您处理签名。
在 Node 中,您可以在独立于 API 网关的 URL lambda 上运行 Express 服务器。它稍微便宜一些,部署速度更快,并且您会得到更好的错误消息。权衡是您必须实施自己的安全考虑。对我来说效果很好,因为它有能力解决一些问题,而且我在项目中所做的大多数 API 不需要 API 网关的 90%。
我在Python中还没有找到类似的选项。我在 Python 上看到的所有 Lambda 服务器都显式链接到 API 网关。