在 aws 上构建无服务器应用程序时,aws lambda 通常是无需预置或管理服务器即可运行代码的首选解决方案。传统上,aws api gateway 用于将 lambda 函数公开为 restful api。但是,aws 引入了 lambda 函数 url,这是一种通过 https 调用 lambda 函数的更简单方法,无需配置 api 网关的开销。在这篇文章中,我们将探讨如何使用 lambda 函数 url 来处理不同的 http 方法(get、post、put 和 delete),同时合并安全身份验证。
lambda 函数 url 为您的 lambda 函数提供专用的 http(s) 端点。此功能对于单功能微服务、轻量级 api,或者当您需要以最少的设置向公众公开 lambda 函数时特别有用。
首先,我们创建一个 lambda 函数并配置其 url。您可以通过 aws 管理控制台、aws cli 或基础设施即代码 (iac) 工具(例如 aws cloudformation 或 terraform)来执行此操作。
创建 lambda 函数:
创建函数 url:
保护您的函数 url:
由函数 url 触发的 lambda 函数可以在单个函数中处理多个 http 方法 - get、post、put 和 delete。这是一个如何实现这一点的简单示例:
import json def lambda_handler(event, context): # determine the http method http_method = event['httpmethod'] if http_method == 'get': return handle_get(event) elif http_method == 'post': return handle_post(event) elif http_method == 'put': return handle_put(event) elif http_method == 'delete': return handle_delete(event) else: return { 'statuscode': 405, 'body': json.dumps({'message': 'method not allowed'}) } def handle_get(event): # handle get request logic return { 'statuscode': 200, 'body': json.dumps({'message': 'get request received'}) } def handle_post(event): # handle post request logic return { 'statuscode': 200, 'body': json.dumps({'message': 'post request received'}) } def handle_put(event): # handle put request logic return { 'statuscode': 200, 'body': json.dumps({'message': 'put request received'}) } def handle_delete(event): # handle delete request logic return { 'statuscode': 200, 'body': json.dumps({'message': 'delete request received'}) }
如果您选择使用 aws_iam 来保护函数 url,客户端将需要使用 aws sigv4(签名版本 4)对请求进行签名。以下是如何发出经过身份验证的请求的简要概述:
例如,使用 aws cli:
aws lambda invoke-url https://<your-function-url-id>.lambda-url.<region>.on.aws/<your-path> --http-method POST --body '{ "key": "value" }' --region <region> --profile <aws-profile>
aws lambda 函数 url 提供了一种通过 http 公开 lambda 函数的简化方法,无需 api 网关。通过在 lambda 函数中处理不同的 http 方法(get、post、put、delete)并使用 aws iam 保护访问,您可以快速构建轻量级、安全的 api。无论您是开发简单的微服务还是更复杂的应用程序,lambda 函数 url 都是 aws 工具包的强大补充。