【问题标题】:How to write a simple http request(method) based AWS lambda function in Python?如何在 Python 中编写一个简单的基于 http 请求(方法)的 AWS lambda 函数?
【发布时间】:2020-04-02 16:01:49
【问题描述】:

我是 AWS 新手。我想将 API Gateway 与我的 lambda 函数集成。我想要实现的事情是:对于每个 HTTP 请求,我只需要打印一个特定请求被命中的语句!。例如假设一个 GET 请求到达我的 api 端点,我需要在浏览器中显示“GET request made”。如果说发出了一个发布请求。我想显示消息“发出请求”,如果可能的话,还显示发布的数据。我搜索了很多,但找不到任何东西。但是我找到了一个代码 sn-p 但它是用 node.js 编写的。下面我附上sn-p。

exports.handler = async (event) => {
    console.log(event);
    if (event.httpMethod === 'PUT') {
        let response = putShows(event)
        return done(response);
    } else if (event.httpMethod === 'GET') {
        let response = getShows(event);
        return done(response);
    }
};`

完整代码可here (on GitHub)

【问题讨论】:

    标签: python-3.x amazon-web-services aws-lambda aws-api-gateway


    【解决方案1】:

    Lambda:创建一个以 python 作为运行时的 lambda。我们将设置 api 网关以将 http 请求类型发送到 lambda。 Lambda 将在 event 参数中接收此信息。这是python代码:

    def lambda_handler(event, context):
        return event
    

    在 api gateway 中,创建一个集成类型为:lambda 的资源。在 lambda 函数字段中输入 lambda 的名称。创建后,在出现的方法图上选择集成请求。在映射模板部分,您可以输入传递给 lambda 的信息(这将传递给事件参数中的 lambda):

    当您在此 api 网关上运行测试时,您会收到映射模板部分。

    模拟资源: 如果您所做的只是测试以查看是否从 api 网关返回响应,您可以使用模拟资源,这样您就不需要配置 lambda。使用mock resources,您可以配置响应以匹配您提出的请求类型。

    创建一个方法(get / post)并将集成类型设置为Mock。转到方法外的集成响应并展开映射模板部分。您可以添加“消息”:“这是一个获取请求”。

    测试 API 网关: 要查看您收到的响应类型,请使用我链接的 aws 文档的第 5 步中描述的测试功能。

    你已经链接了 python,所以这里是可以用来查看响应的 python 代码:

    import requests
    url = 'https://your_api_url'
    r = requests.get(url)
    data = r.json()
    data['message'] #this will have your get message in it.
    

    如果您想通过 javascript 执行此操作,请通过单击操作并选择“启用 CORS”为您的资源设置启用 CORS。然后,您需要为您的页面或浏览器的控制台使用以下 javascript:

    const response = await fetch('your api gateway url')
    console.log(response.body.message)
    

    【讨论】:

    • 好吧,基本上你想说的是,这只能通过 API Gateway 来实现,没有什么可以用 Lambda 写的?
    • 您可以仅使用 api 网关来实现您的请求。如果你真的想要,你可以使用 lambda。我已经调整了我的答案,包括如何解决涉及 lambda 的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    • 2015-10-27
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多