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

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

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

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]删除
最新教程 更多>
  • 人脸检测失败原因及解决方案:Error -215
    人脸检测失败原因及解决方案:Error -215
    错误处理:解决“ error:( - 215)!empty()in Function openCv in Function MultSiscale中的“检测”中的错误:在功能检测中。”当Face Cascade分类器(即面部检测至关重要的组件)未正确加载时,通常会出现此错误。要解决此问题,必须...
    编程 发布于2025-07-12
  • PHP SimpleXML解析带命名空间冒号的XML方法
    PHP SimpleXML解析带命名空间冒号的XML方法
    在php 很少,请使用该限制很大,很少有很高。例如:这种技术可确保可以通过遍历XML树和使用儿童()方法()方法的XML树和切换名称空间来访问名称空间内的元素。
    编程 发布于2025-07-12
  • 编译器报错“usr/bin/ld: cannot find -l”解决方法
    编译器报错“usr/bin/ld: cannot find -l”解决方法
    错误:“ usr/bin/ld:找不到-l “ 此错误表明链接器在链接您的可执行文件时无法找到指定的库。为了解决此问题,我们将深入研究如何指定库路径并将链接引导到正确位置的详细信息。添加库搜索路径的一个可能的原因是,此错误是您的makefile中缺少库搜索路径。要解决它,您可以在链接器命令中添加...
    编程 发布于2025-07-12
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    编程 发布于2025-07-12
  • 查找当前执行JavaScript的脚本元素方法
    查找当前执行JavaScript的脚本元素方法
    如何引用当前执行脚本的脚本元素在某些方案中理解问题在某些方案中,开发人员可能需要将其他脚本动态加载其他脚本。但是,如果Head Element尚未完全渲染,则使用document.getElementsbytagname('head')[0] .appendChild(v)的常规方...
    编程 发布于2025-07-12
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-07-12
  • 在GO中构造SQL查询时,如何安全地加入文本和值?
    在GO中构造SQL查询时,如何安全地加入文本和值?
    在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. 在GO中实现这一目标的惯用方法是使用fmt.spr...
    编程 发布于2025-07-12
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-07-12
  • 在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8 MySQL表中正确将Latin1字符转换为UTF8的方法
    在UTF8表中将latin1字符转换为utf8 ,您遇到了一个问题,其中含义的字符(例如,“jáuòiñe”)在utf8 table tabled tablesset中被extect(例如,“致电。为了解决此问题,您正在尝试使用“ mb_convert_encoding”和“ iconv”转换受...
    编程 发布于2025-07-12
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-07-12
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-07-12
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-07-12
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-07-12
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-07-12
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-07-12

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

Copyright© 2022 湘ICP备2022001581号-3