AWS Lambda 搭配 Amazon API Gateway

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 控制台,单击左边功能导览列中的函式,会进入函式画面,注意所在区域,本范例以东京区域为例,如下图所示,单击建立函式按钮。

https://ithelp.ithome.com.tw/upload/images/20220424/201295106d0vuVJbEJ.png
AWS Lambda 函式控制台画面

步骤 2. 建立 Lambda 函式

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

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

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

https://ithelp.ithome.com.tw/upload/images/20220424/20129510gjUPuSWRaE.png
建立 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 来观察增加的权限。

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

https://ithelp.ithome.com.tw/upload/images/20220424/20129510cP7hmO6aX4.png
新增 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)
    }

https://ithelp.ithome.com.tw/upload/images/20220424/20129510PyriY3wvhI.png
修改 Lambda 程序码

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

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

https://ithelp.ithome.com.tw/upload/images/20220424/20129510sZRShOjv7B.png
API 终端节点触发 Lambda 函式

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

https://ithelp.ithome.com.tw/upload/images/20220424/20129510gNC60ZlkKR.png
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"] 这个栏位,如下图所示。

https://ithelp.ithome.com.tw/upload/images/20220424/201295107yGsQ0dmP3.png
API Gateway 发出 GET 请求

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

https://ithelp.ithome.com.tw/upload/images/20220424/20129510UoIwMF3r6J.png
API Gateway 发出 POST 请求

参考资料


<<:  诠释 behavioral, creational and structural pattern 的概念

>>:  使用 KubeEye 为你的 K8s 集群安全保驾护航

Day06 补充笔记2

Export Modules 汇出程序模组 在React中可以透过 Export 语法来汇出程序模组...

介绍影像辨识的处理流程 - Day 10

介绍影像辨识的处理流程 - Day 10 所有影像辨识的问题都会面临以下几个问题:图片中有几个要辨识...

.NET Core第9天_MVC_Model的引入

在上一篇我们已经知道MVC路由和静态资源导入的方式 因此起手式 从新增专案.net core空专案到...

[Day 28] 使用ChromeDriver来做单元测试(一)

Laravel Dusk提供了一个自动化的测试API, 不用安装Selenium等软件, 直接用独立...

Day 07:我今天想不到标题之整合 tmux 和 zsh

我把从第一天到现在每天的 Home 目录都放上 GitHub 了,README.md 里面有说明 ...