使用 Learner Lab - 使用 API Gateway 触发 AWS Lambda
AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务,让学生可以在 100 USD的金额下,自行练习所要使用的 AWS 服务,如何进入 Learner Lab 请参考 使用 Learner Lab - 学生,以下示范如何使用 API Gateway 触发 AWS Lambda,并取得 post 上传的内容。
步骤 1. 创建 Lambda 函数
在 AWS 网页控制台 上方的搜寻图示中输入 Lambda ,单击 Lambda 服务,如下图所示。
图 1. AWS 网页控制台中找寻 Lambda 服务
单击 创建函数 服务,如下图所示。
图 2. 创建 Lambda 函数
设定 Lambda 函数如下
- 从头开始创作
基本信息 - 函数名称: API2Lambda
- 运行时: Python 3.8
- 架构: x86_64
权限 - 执行角色: 使用现有角色 LabRole (很重要、很重要、很重要)
图 3. 设定 Lambda 函数
步骤 2. 布署 Lambda 函数
因为这次代码的目的是读取 API Gateway 所传递过来的参数,所以将代码修改如下:
import json
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': json.dumps(event, indent=4, default=str, ensure_ascii=False)
}
修改完毕后单击 Deploy (布署),必须要先布署才算是将代码布署到云计算中,如下图所示。
图 4. Deploy (布署) Lambda 函数
接著单击上图中的 Test 按钮,会出现配置测试事件弹窗,配置如下:
- 测试事件操作: 创建新事件
- 事件名称: apigatewayPOST
- 事件共享设置: 私有
- 模版: apigateway-aws-proxy
下方的事件JSON会自动填写上述模版所生成的JSON范例,无需修改,直接单击保存即可。
图 5. 配置测试事件
接著再单击 Test 按钮即可运行,运行结果会出现在 Execution result 视窗,可以看到将模拟 API Gateway 请求的信息透过 event 这个参数取得内容。
图 6. 进行测试事件,检验代码执行结果
步骤 3. 添加 API Gateway 触发器
在 Lambda 主画面上方找到添加触发器按钮,如下图所示。
图 7. 在 Lambda 主画面中进行添加触发器
进入添加触发器画面,配置如下:
添加触发器
- 触发器配置: API Gateway
- Intent: Create a new API
- API type: HTTP API
- Security: Open
Additional settings - API name: API2Lambda-API
- Deployment stage: default
- 勾选 Cross-origin resource sharing (CORS)
图 8. 在添加触发器画面中进行 API Gateway 配置
添加触发器后可以在配置中查看触发器的结果,如下图所示。
图 9. 在配置中查看触发器
步骤 4. 使用 Postman 进行测试
接著使用常见的 API 测试软件来进行测试,在本机端打开 Postman,并输入相关的配置。
- URL 网址:将上图中的 API endpoint 输入
- 请求方法: POST
- Body: 选择 raw,格式为 JSON。
内容为
{
"key": "Value"
}
接著点击送出Send就得到完整的请求信息回应 (Response),在第 89 行中可以看到请求的内容,表示可以在 Lambda 中,透过 event 参数取得完整请求信息,使用 body 属性,就可以取得请求内容。
图 10. 在postman进行 API 测试
感谢亚马逊云科技王向炜 Alan Wang 提供的协助。
参考资料
- AWS Academy, https://aws.amazon.com/cn/training/awsacademy/
- AWS Academy 简介, https://blog.csdn.net/m0_50614038/article/details/123778237
- AWS Academy LMS (Learning Management System) 基础 – 教师, https://blog.csdn.net/m0_50614038/article/details/123778561
- AWS Academy LMS 申请开课 - 教师, https://blog.csdn.net/m0_50614038/article/details/123778838
- AWS Academy LMS 新增学生 - 教师, https://blog.csdn.net/m0_50614038/article/details/123779068