0
点赞
收藏
分享

微信扫一扫

AWS Lambda 搭配 Amazon API Gateway

心智的年轮 2022-04-24 阅读 61

AWS Lambda 搭配 Amazon API Gateway

AWS Lambda 是一种无伺服器、事件推动的运算服务,而 Amazon API Gateway 可以让开发人员轻松地建立、发布、维护、监控和保护任何规模的 API,使用 API Gateway 可以建立 RESTful API 和 WebSocket API,以启用即时双向通讯应用程式。本篇就是介绍如何结合这两个 AWS 服务,透过 Amazon API Gateway 来推动 AWS Lambda。

步骤 1. 进入 AWS Lambda 控制台

登录 AWS 控制台画面后选择进入 AWS Lambda 控制台,单击左边功能导览列中的函式,会进入函式画面,注意所在区域,本范例以东京区域为例,如下图所示,单击建立函式按钮。

在这里插入图片描述

AWS Lambda 函式控制台画面

步骤 2. 建立 Lambda 函式

在建立函式画面中,设定如下:

  • 选择下列选项之一来建立您的函式: 从头开始撰写
  • 函式名称: lambda2api
  • 执行时间: Python 3.7
  • 架构: x86_64

配置完毕后单击右下方的建立函式即可,如下图所示。

在这里插入图片描述

建立 Lambda 函式配置

步骤 3. 新增触发条件

进入 Lambda 函式的编辑画面后,首先先单击 +新增触发 按钮,用来指定 API Gateway 触发这个 Lambda 函式,配置选项如下:

  • 触发组态: API Gateway
  • API: 建立 API
  • API 类型: HTTP API
  • 安全性: 开启
  • 其他设置
  • API 名称: lambda2api-API
  • 部署阶段: default
  • 跨原始资源共用 (CORS): 勾选

将 API Gateway 新增至 Lambda 函数,以建立可叫用函数的 HTTP 端点,而 API Gateway支援两种类型的 RESTful API︰HTTP API 和 REST API。HTTP API 是轻量级、低延迟的 RESTful API,较新推出并内建于 API Gateway version 2 API;REST API 是可以高度客制化的 RESTful API。

CORS 需要从不在相同网域托管的网页叫用您的 API。勾选跨原始资源共用 (CORS) 选项可在所有回应中新增 Access-Control-Allow-Origin 标头,以启用任何网域的跨原始资源共用 (CORS)。此外,Lambda 会增加 Amazon API Gateway 的必要权限,以便用这个触发条件叫用您的 Lambda 函式。这点可以透过检视 IAM 来观察增加的权限。

配置完毕后单击 新增 按钮,如下图所示。

在这里插入图片描述

新增 API Gateway 触发条件配置

步骤 4. 修改程式码

修改 Lambda 程式码以便于后续观察 API Gateway 是如何传递 HTTP 的请求,所以以下代码将传入参数 event 显示出来,修改完程式码后记得单击 Deploy 按钮,这才会把这代码布署到云端,如下图所示。

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps(event, indent=4, default=str)
    }

在这里插入图片描述

修改 Lambda 程式码

步骤 5. 透过 API Gateway 触发 Lambda 函式

单击上图的 API Gateway 或是 组态 页签后选择 触发 功能画面,会看到步骤 3 所建立的 API Gateway端点,单击 API 终端节点 就可以透过 API Gateway 触发 Lambda 函式,如下图所示。

在这里插入图片描述

API 终端节点触发 Lambda 函式

下图显示呼叫 API Gateway 的结果,因为使用者的请求为 GET ,可以在 [“requestContext”][“http”]这个键值中找到使用者的请求内容。

在这里插入图片描述

Lambda 函式运行结果

步骤 6. 使用 curl 呼叫 API Gateway

因为 RESTful API 通常都是透过程式调用,所以我们试着用 curl 透过 get 与 post 方法来传资料给后端的 Lambda 函式,观察在 API Gateway 后方的Lambda 函式,会接收到怎样的请求格式。

# GET request
curl "https://j98fukyxs3.execute-api.ap-northeast-1.amazonaws.com/default/lambda2api?say=Hi&to=Mon"

# POST request
curl "https://j98fukyxs3.execute-api.ap-northeast-1.amazonaws.com/default/lambda2api" \
  -X POST \
  -d "{\"say\":\"Hi\",\"to\":\"Mon\"}" \
  -H "content-type: application/json" 

当 API Gateway 收到 curl 的 get 请求时,传过来的资料会在 [“rawQueryString”] 这个栏位中,标头在 [“requestContext”][“http”] 这个栏位,如下图所示。

在这里插入图片描述

API Gateway 发出 GET 请求

当 API Gateway 收到 curl 的 post 请求时,传过来的资料会在 [“body”] 这个栏位中,标头在 [“requestContext”][“http”] 与 [“headers”] 这两个栏位,如下图所示。

在这里插入图片描述

API Gateway 发出 POST 请求

参考资料

  • AWS Lambda, https://aws.amazon.com/lambda/
  • What is AWS Lambda?, https://docs.aws.amazon.com/lambda/latest/dg/welcome.html
  • Choosing an API type, https://docs.aws.amazon.com/lambda/latest/dg/services-apigateway.html?icmpid=docs_lambda_console#services-apigateway-apitypes
  • json — JSON encoder and decoder, https://docs.python.org/3/library/json.html
  • Amazon API Gateway, https://aws.amazon.com/api-gateway/
举报

相关推荐

0 条评论