”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 AWS Lambda 函数 URL 简化 API 访问:使用内置安全性处理 GET、POST、PUT 和 DELETE

使用 AWS Lambda 函数 URL 简化 API 访问:使用内置安全性处理 GET、POST、PUT 和 DELETE

发布于2024-08-24
浏览:521

Simplifying API Access with AWS Lambda Function URLs: Handling GET, POST, PUT, and DELETE with Built-in Security

在 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 函数 URL 为您的 Lambda 函数提供专用的 HTTP(S) 端点。此功能对于单功能微服务、轻量级 API,或者当您需要以最少的设置向公众公开 Lambda 函数时特别有用。

设置 Lambda 函数 URL

首先,让我们创建一个 Lambda 函数并配置其 URL。您可以通过 AWS 管理控制台、AWS CLI 或基础设施即代码 (IaC) 工具(例如 AWS CloudFormation 或 Terraform)来执行此操作。

  1. 创建 Lambda 函数:

    • 转到 AWS Lambda 控制台。
    • 点击“创建函数”。
    • 选择“从头开始创作”选项。
    • 定义您的函数名称、运行时和执行角色。
    • 编写您的功能代码或上传部署包。
  2. 创建函数 URL:

    • 在函数配置下,选择“函数 URL”选项卡。
    • 单击“创建函数 URL”。
    • 选择授权类型(例如,AWS_IAM 用于经过身份验证的访问,或者 NONE 用于公共访问)。
    • 点击“创建函数 URL”。
  3. 保护您的函数 URL:

    • 您可以通过选择 AWS_IAM 作为授权类型来使用 AWS IAM 进行身份验证。
    • 创建 IAM 角色或策略来控制哪些用户或服务可以通过 URL 调用该功能。
    • 您可以选择在函数本身内实现自定义授权逻辑,以进一步限制访问。

处理不同的 HTTP 方法

由函数 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'})
    }

使用 IAM 身份验证保护函数 URL 的示例

如果您选择使用 AWS_IAM 来保护您的函数 URL,客户端将需要使用 AWS SigV4(签名版本 4)签署请求。以下是如何发出经过身份验证的请求的简要概述:

  1. 创建具有适当权限的 IAM 用户/角色以调用 Lambda 函数。
  2. 签署请求:使用 AWS 开发工具包、CLI 或 Postman 等工具(使用 AWS IAM 身份验证)对 HTTP 请求进行签名。
  3. 调用函数URL:确保签名的请求包含有效的凭据;否则,请求将被拒绝。

例如,使用 AWS CLI:

aws lambda invoke-url https://.lambda-url..on.aws/ \
--http-method POST \
--body '{ "key": "value" }' \
--region  \
--profile 

结论

AWS Lambda 函数 URL 提供了一种通过 HTTP 公开 Lambda 函数的简化方法,无需 API 网关。通过在 Lambda 函数中处理不同的 HTTP 方法(GET、POST、PUT、DELETE)并使用 AWS IAM 保护访问,您可以快速构建轻量级、安全的 API。无论您是开发简单的微服务还是更复杂的应用程序,Lambda 函数 URL 都是您的 AWS 工具包的强大补充。

版本声明 本文转载于:https://dev.to/sunil_yaduvanshi/simplifying-api-access-with-aws-lambda-function-urls-handling-get-post-put-and-delete-with-built-in-security-4665?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何防止游戏网站页面加载时重复插入?
    如何防止游戏网站页面加载时重复插入?
    调试页面加载时的重复插入在游戏网页上,观察到用户活动查询在页面刷新时将重复记录插入数据库。$insert_user_activity = mysql_query("INSERT INTO game_activity (user_id,user_full_name,game_id,game_...
    编程 发布于2024-11-06
  • Python 最佳实践:编写干净、高效且可维护的代码
    Python 最佳实践:编写干净、高效且可维护的代码
    Python 因其简单性、可读性和多功能性而成为最流行的编程语言之一。 无论您是经验丰富的开发人员还是初学者,遵循 Python 最佳实践对于编写干净、高效和可维护的代码至关重要。 在这篇博文中,我们将探讨编写 Python 代码时要牢记的一些关键最佳实践。 1 - 遵守 PEP...
    编程 发布于2024-11-06
  • std::lock_guard 与 std::scoped_lock:何时使用哪个锁?
    std::lock_guard 与 std::scoped_lock:何时使用哪个锁?
    std::lock_guard 与 std::scoped_lock:为任务选择正确的锁随着 C 17 的引入,std ::scoped_lock 类与现有的 std::lock_guard 一起出现,引发了关于它们之间的差异以及何时使用它们的问题。虽然 std::scoped_lock 与 std...
    编程 发布于2024-11-06
  • WebRTC简介
    WebRTC简介
    安装和代码指南 WebRTC(网络实时通信)是一种开源技术,可通过网络浏览器和移动应用程序中的简单 API 实现实时通信。它允许在点之间直接共享音频、视频和数据,无需中间服务器,非常适合视频会议、直播和文件共享等应用。 在本博客中,我们将深入探讨以下主题: 什么是WebRTC? W...
    编程 发布于2024-11-06
  • 如何在不使用 JavaScript 的情况下使用 CSS 隐藏和显示内容?
    如何在不使用 JavaScript 的情况下使用 CSS 隐藏和显示内容?
    使用 CSS 隐藏和显示内容:无需 JavaScript 的技巧在进行 Web 开发时,控制内容的可见性通常至关重要。传统上,这是使用 JavaScript 实现的,但 CSS 也可用于创建优雅的隐藏和显示效果。下面描述了一种此类技术,解决了先前方法遇到的特定挑战。隐藏/显示内容切换:可以使用 CS...
    编程 发布于2024-11-06
  • 如何创建重复最少的 5 个字符的随机字符串?
    如何创建重复最少的 5 个字符的随机字符串?
    生成 5 个具有最少重复的随机字符要创建具有最少重复的随机 5 个字符字符串,最有效的方法之一是使用PHP 函数和巧妙技术的结合。让我们深入研究解决方案:使用 md5 和 rand$rand = substr(md5(microtime()),rand(0,26),5);该方法使用md5哈希函数根据...
    编程 发布于2024-11-06
  • 如何在 Go 中处理不同包之间相同的方法签名?
    如何在 Go 中处理不同包之间相同的方法签名?
    处理不同包中具有相同方法签名的接口在Go中,当处理具有相同方法签名但定义在不同包中的多个接口时,可能会出现以下情况实现两个接口的类型会导致意外行为。考虑在不同包中定义的这两个接口(Doer)和函数(FuncA 和 FuncB):// Package A type Doer interface { D...
    编程 发布于2024-11-06
  • 如何使用 jQuery 填充级联下拉列表以获得更好的兼容性和用户体验?
    如何使用 jQuery 填充级联下拉列表以获得更好的兼容性和用户体验?
    使用 jQuery 填充级联下拉列表在表单开发领域,级联下拉列表经常用于提供更加用户友好和动态体验。为了增强兼容性并解决跨浏览器问题,jQuery 提供了一个强大的解决方案来异步填充这些下拉列表。问题中所示的用于创建级联下拉列表的原始 JavaScript 函数缺乏与 IE 的兼容性。为了解决这个问...
    编程 发布于2024-11-06
  • 了解 JavaScript 中的扩展运算符:初学者简单指南
    了解 JavaScript 中的扩展运算符:初学者简单指南
    介绍 JavaScript 是一种有趣的编程语言,其最令人兴奋的功能之一是扩展运算符。如果您刚刚开始编码,或者即使您是一个对学习 JavaScript 感兴趣的孩子,也不必担心!我将以最简单的方式分解这个概念,并举例来帮助您理解。 什么是价差运算符? 扩展运算符看起...
    编程 发布于2024-11-06
  • 在 Python 中使用 OpenSearch 掌握 CRUD 操作:实用指南
    在 Python 中使用 OpenSearch 掌握 CRUD 操作:实用指南
    OpenSearch, an open-source alternative to Elasticsearch, is a powerful search and analytics engine built to handle large datasets with ease. In this b...
    编程 发布于2024-11-06
  • 冰沙框架的重要概念||如何精通冰沙
    冰沙框架的重要概念||如何精通冰沙
    要精通 Frappe,有几个关键概念和领域需要关注。以下是最重要的细分: 1. 文档类型 定义:DocTypes是Frappe中的核心数据模型。每个实体或记录都存储在 DocType 中,并且它们可以具有字段、权限和工作流程。 为什么它很重要:了解如何创建和自定义 DocType 至...
    编程 发布于2024-11-06
  • 如何解决 JLabel 拖放的鼠标事件冲突?
    如何解决 JLabel 拖放的鼠标事件冲突?
    用于拖放的 JLabel 鼠标事件:解决鼠标事件冲突为了在 JLabel 上启用拖放功能,鼠标事件必须被覆盖。然而,当尝试使用 mousePressed 事件实现拖放时,会出现一个常见问题,因为 mouseReleased 事件对该 JLabel 无效。提供的代码在 mousePressed 事件中...
    编程 发布于2024-11-06
  • MySQL 中的数据库分片:综合指南
    MySQL 中的数据库分片:综合指南
    随着数据库变得越来越大、越来越复杂,有效地控制性能和扩展就出现了。数据库分片是用于克服这些障碍的一种方法。称为“分片”的数据库分区将大型数据库划分为更小、更易于管理的段(称为“分片”)。通过将每个分片分布在多个服务器上(每个服务器保存总数据的一小部分),可以提高可扩展性和吞吐量。 在本文中,我们将探...
    编程 发布于2024-11-06
  • 如何将 Python 日期时间对象转换为秒?
    如何将 Python 日期时间对象转换为秒?
    在 Python 中将日期时间对象转换为秒在 Python 中使用日期时间对象时,通常需要将它们转换为秒以适应各种情况分析目的。但是,toordinal() 方法可能无法提供所需的输出,因为它仅区分具有不同日期的日期。要准确地将日期时间对象转换为秒,特别是对于 1970 年 1 月 1 日的特定日期...
    编程 发布于2024-11-06
  • 如何使用 Laravel Eloquent 的 firstOrNew() 方法有效优化 CRUD 操作?
    如何使用 Laravel Eloquent 的 firstOrNew() 方法有效优化 CRUD 操作?
    使用 Laravel Eloquent 优化 CRUD 操作在 Laravel 中使用数据库时,插入或更新记录是很常见的。为了实现这一点,开发人员经常求助于条件语句,在决定执行插入或更新之前检查记录是否存在。firstOrNew() 方法幸运的是, Eloquent 通过firstOrNew() 方...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3