[云] Deploying Your First Serverless Application

Goal:
Hands-on lab to get started with Serverless
Agenda:
Deploying Your First Serverless Application
Assignment Introduction

Create and test function in AWS Lambda 

Let's create an addition function using AWS Lambda.
To create the addition function:
Navigate to the AWS Lambda console and click "Create function.“
Select "Author from scratch," name your function, choose Python 3.12 as the runtime, and select the LabRole execution role from the list of existing roles.
Implement the addition function within the provided lambda_function.py template.
Deploy the function.
The addition function is provided in the next slide.

 Our addition function

import jsondef lambda_handler(event, context):json_input = eventif 'body' in event: # it can be an external request via API gatewayjson_input = json.loads(event['body'])if 'a' in json_input and 'b' in json_input:a = int(json_input['a'])b = int(json_input['b'])return a + belse:return "No input found"

Code explanation 

def lambda_handler(event, context):
The lambda_handler is the entry point for any AWS Lambda function.event: 
This parameter contains the input data for the function. 
This data is sent to the function when it's invoked.context: 
This parameter provides information about the invocation, function, 
and execution environment.if 'body' in event:
This checks if the event dictionary contains a key named body. 
This is crucial because AWS API Gateway 
(a common way to trigger Lambda functions) 
often sends data within a body key.

Add trigger

To add an API Gateway trigger:
Go to your function's overview page and click "Add trigger.“
Select "API Gateway" as the trigger source.
Create a new API: choose "HTTP API" as the API type and "Open" as the security setting.
Click "Add.“

Check API endpoint 

 Invoke function via API

Send POST requests

curl --header "Content-Type: application/json" --request POST --data "{\"a\": \"2\", \"b\": \"3\"}" <API endpoint>

Expected response :

5

What we got:

{"message":"Internal Server Error"}

Why is this? AWS Lambda functions that are triggered by API Gateway must return a specific structure, including statusCode and body . Without this structure, the API Gateway may return a 500 Internal Server Error.
Let’s modify our response format!
import jsondef lambda_handler(event, context):# Initialize responseresponse = {'statusCode': 200,'body': ''}json_input = eventif 'body' in event: # it can be an external request via API gatewayjson_input = json.loads(event['body'])if 'a' in json_input and 'b' in json_input:a = int(json_input['a'])b = int(json_input['b'])result = a + bresponse['body'] = json.dumps({'result': result})return responseelse:response['body'] = json.dumps({'error': 'No input found'})return response
Comprehensive Error Handling: Introduced try-except blocks to catch and handle different errors (JSON parsing, missing parameters, and unexpected errors).
More Informative Error Responses: Specific error messages for different failure scenarios.

What we’ll do:
Develop a Lambda function for simple ML model inference.
Deploy a machine learning model as a serverless application using AWS Lambda and API Gateway.
Analyze the cold start phenomenon associated with serverless functions.
Environments used:
Local machine
AWS console
Google Colab

Locust for load testing 

 

目标:

  • 实践实验:入门无服务器计算

议程:

  • 部署您的第一个无服务器应用程序
  • 作业介绍

创建和测试 AWS Lambda 函数

  1. 让我们使用 AWS Lambda 创建一个加法函数。

要创建加法函数:

  • 导航到 AWS Lambda 控制台并点击“创建函数”。
  • 选择“从头开始创建”,为您的函数命名,选择 Python 3.12 作为运行时,并从现有角色列表中选择 LabRole 执行角色。
  • 在提供的 lambda_function.py 模板中实现加法函数。
  • 部署函数。
  • 加法函数代码
  • import jsondef lambda_handler(event, context):json_input = eventif 'body' in event:  # 通过 API 网关的外部请求可能带有 bodyjson_input = json.loads(event['body'])if 'a' in json_input and 'b' in json_input:a = int(json_input['a'])b = int(json_input['b'])return a + belse:return "未找到输入"
    

lambda_handler 是任何 AWS Lambda 函数的入口。

  • event: 包含函数的输入数据。此数据是在函数被调用时发送的。
  • context: 提供关于调用、函数和执行环境的信息。

if 'body' in event:

此处检查 event 字典中是否包含名为 body 的键。
这很重要,因为 AWS API Gateway(触发 Lambda 函数的常见方式)通常会在 body 键中发送数据。

添加触发器

  • 添加 API Gateway 触发器:
    • 转到函数的概览页面,点击“添加触发器”。
    • 选择“API Gateway”作为触发源。
    • 创建一个新 API:选择“HTTP API”作为 API 类型,并选择“开放”作为安全设置。
    • 点击“添加”。

检查 API 端点

通过 API 调用函数

  • 发送 POST 请求
    curl --header "Content-Type: application/json" --request POST --data "{\"a\": \"2\", \"b\": \"3\"}" <API 端点>
    

我直接用curl会报错:

PS C:\Users\Eric1> curl --header "Content-Type: application/json" --request POST --data "{\"a\": \"2\", \"b\": \"3\"}" https://qgb4uu66o3.execute-api.us-east-1.amazonaws.com/default/myFirstLambda
Invoke-WebRequest : 找不到接受实际参数“Content-Type: application/json”的位置形式参数。
所在位置 行:1 字符: 1
+ curl --header "Content-Type: application/json" --request POST --data  ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo          : InvalidArgument: (:) [Invoke-WebRequest],ParameterBindingException+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
PS C:\Users\Eric1> Invoke-RestMethod -Uri "https://qgb4uu66o3.execute-api.us-east-1.amazonaws.com/default/myFirstLambda" -Method Post -Body '{"a": "2", "b": "3"}' -ContentType "application/json"result
------5

  • 预期响应:

    • 5
  • 实际得到:

    • {"message":"Internal Server Error"}

很神奇,后来又好了:

C:\Users\Eric1>curl --header "Content-Type: application/json" --request POST --data "{\"a\": \"2\", \"b\": \"3\"}" https://qgb4uu66o3.execute-api.us-east-1.amazonaws.com/default/MyAddition
{"result": 5}

 

为什么会这样? 通过 API Gateway 触发的 AWS Lambda 函数必须返回特定的结构,包括 statusCodebody。如果没有这种结构,API Gateway 可能会返回 500 内部服务器错误。

我们来修改我们的响应格式!

import jsondef lambda_handler(event, context):# 初始化响应response = {'statusCode': 200,'body': ''}json_input = eventif 'body' in event:  # 通过 API 网关的外部请求可能带有 bodyjson_input = json.loads(event['body'])if 'a' in json_input and 'b' in json_input:a = int(json_input['a'])b = int(json_input['b'])result = a + bresponse['body'] = json.dumps({'result': result})return responseelse:response['body'] = json.dumps({'error': '未找到输入'})return response

  • 更全面的错误处理: 引入了 try-except 块来捕获和处理不同的错误(JSON 解析、缺少参数和意外错误)。
  • 更具信息性的错误响应: 针对不同的失败场景提供了特定的错误消息。

我们接下来会做什么:

  • 开发用于简单机器学习模型推理的 Lambda 函数。
  • 使用 AWS Lambda 和 API Gateway 部署机器学习模型作为无服务器应用程序。
  • 分析与无服务器函数相关的冷启动现象。

使用的环境:

  • 本地机器
  • AWS 控制台
  • Google Colab

使用 Locust 进行负载测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/453528.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIP-HarmonyOS Application Developer 习题(十六)

&#xff08;判断&#xff09;1、HiLink通过分布式软总线的方式连接所有设备&#xff0c;强能力设备可对弱能力设备进行设备虚拟化&#xff0c;将弱设备当做本机设备直接调用。 答案&#xff1a;错误 分析&#xff1a;HiLink 主要针对的是应用开发者与第三方设备开发者&#xf…

100种算法【Python版】第1篇——贪心策略

贪心是一种策略 1 策略内核1.1 基本思想1.2 策略步骤1.3 贪心算法举例说明1.3.1 活动选择问题1.3.2 01背包问题1.3.3 最优解分析 2 贪心策略的应用2.1 应用&#xff1a;计算单源最短路径2.2 应用&#xff1a;霍夫曼编码字符串 3 策略优缺点3.1 优点3.2 缺点3.3 总结 1 策略内核…

助力语音技术发展,景联文科技提供语音数据采集服务

语音数据采集是语音识别技术、语音合成技术以及其他语音相关应用的重要基础。采集高质量的语音数据有助于提高语音识别的准确性&#xff0c;同时也能够促进语音技术的发展。 景联文科技作为专业的数据采集标注公司&#xff0c;支持语音数据采集。可通过手机、专业麦克风阵列、专…

快速了解Python流程控制语句基本使用

&#x1f600;前言 在编程中&#xff0c;流程控制语句是用于控制程序执行顺序的关键部分。通过条件判断和循环机制&#xff0c;程序能够根据不同的情况选择执行特定的代码块&#xff0c;或重复执行某段代码。本文将详细介绍 Python 中常见的流程控制语句&#xff0c;包括 if、i…

JS事件和DOM

1. DOM 1.1 基本概念 DOM&#xff0c;全称 Document Object Model&#xff0c;即文档对象模型。它是 Web 上最常用的 API 之一&#xff0c;是加载在浏览器中的文档模型&#xff0c;可以将文档表示为节点树&#xff08;或称 DOM 树&#xff09;&#xff0c;其中每个节点代表文…

缓存常见问题:缓存穿透、雪崩、击穿及解决方案分析

1. 什么是缓存穿透&#xff0c;怎么解决&#xff1f; 缓存穿透是指用户请求的数据在缓存中不存在即没有命中&#xff0c;同时在数据库中也不存在&#xff0c;导致用户每次请求该数据都要去数据库中查询一遍。如果有恶意攻击者不断请求系统中不存在的数据&#xff0c;会导致短时…

Java面试场景题(1)---如何使用redis记录上亿用户连续登陆天数

感谢uu们的观看&#xff0c;话不多说开始~ 对于这个问题&#xff0c;我们需要先来了解一下~ 海量数据都可以用bitmap来存储&#xff0c;因为占得内存小&#xff0c;速度也很快 我大概计算了一下~ 完全够&#xff1a;String类型512M 1byte 8个bit位 8个状态 512M1024byt…

计算机组成原理(笔记7高速缓冲存储器Cache,计算机组成原理的重难点全、直接、组相连)

为什么要设立高速缓冲存储器 &#xff08;Cache&#xff09;&#xff1f; Cache是介于CPU和主存之间的小容量存储器&#xff0c;存取速度比主存快。它能高速地向CPU提供指令和数据&#xff0c;加快程序的执行速度。它是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。…

01 一篇读懂25机械考研复试超全流程讲解|考研面试经验和面试真题快来背诵!

复试面试流程及经验汇总篇 千万不要小瞧出成绩前的准备以及最常见面试问题你提前熟记于心&#xff0c;面试再遇到&#xff0c;能够有逻辑有条理的回答出不是空洞的话&#xff0c;给导师的印象分就肯定高。 考研复试面试最全最完整的实用攻略&#xff0c;从出考研初试成绩前到…

《深度学习》模型的部署、web框架 服务端及客户端案例

目录 一、模型的部署 1、模型部署的定义与目的 1&#xff09;定义 2&#xff09;目的 2、模型部署的步骤 1&#xff09;导出模型 2&#xff09; 部署模型 3&#xff09;测试模型 4&#xff09;监控模型 3、模型部署的方式 1&#xff09;云端部署 2&#xff09;嵌入…

RHCE--at,crontab例行性工作

一&#xff1a;安装at &#xff08;1&#xff09;配置yum仓库&#xff1a;以配置网络源举例&#xff1a; 先在/etc/yum.repos.d/ 目录下创建一个以.repo结尾的文件 vim /etc/yum.repos.d/aliyun.repo 写入可以在阿里云镜像站查找appstream和baseos的地址阿里巴巴开源镜像站…

内核调度hh

的国际化的比较好 11 其他

英语语法学习框架(考研)

一、简单句 英语都是由简单句构成&#xff0c;简单句共有五种基本句型&#xff1a;①主谓&#xff1b;②主谓宾&#xff1b;③主谓宾宾补&#xff1b;④主谓宾间宾&#xff08;间接宾语&#xff09;&#xff1b;⑤主系表&#xff1b; 其中谓语是句子最重要的部分&#xff0c;谓…

别再用老旧架构了!单元化构建超强弹性和容错系统!

0 关键收获 单元化架构提高了微服务的弹性和容错性。可观察性对于开发和运营单元化架构至关重要。单元路由器是单元基础架构的关键组件&#xff0c;它需要快速响应单元可用性和健康变化。要成功采用单元化架构&#xff0c;需要全面和综合的方法来实现可观察性。单元化架构利用…

改变函数调用上下文:apply与call方法详解及实例

目录 改变函数调用上下文&#xff1a;apply与call方法详解及实例 一、什么是 apply 方法&#xff1f; 1、apply 语法 2、apply 示例 二、什么是 call 方法&#xff1f; 1、call 语法 2、call 示例 三、apply 和 call 的共同与差异 1、apply 和 call 的共同点 2、apply…

centos7-网络模式选择NAT连接时遇到的问题

今天花了我一上午的时间&#xff0c;必须要记录一下。 新创建的虚拟机&#xff0c;选择的centos7-NAT的网路连接模式。 科普一下: 我选择的NAT模式&#xff0c; 然后改了 vi /etc/sysconfig/network-scripts/ifcfg-ens33文件的 source ~/.bashrc和reboot之后 执行service n…

nginx 快速入门

配置文件 nginx.conf 每个 http 块可以包括多个 server 块&#xff0c;而每个 server 块就相当于一个虚拟主机 #这一行表示这个server块监听的端口是80&#xff0c;只要有请求访问了80端口&#xff0c;此server块就处理请求listen 80;# 表示这个server块代表的虚拟主机的名字…

优雅的入参校验,Valid常用校验

更好的阅读体验&#xff1a;优雅的入参校验&#xff0c;Valid常用校验 对于前端传递的参数&#xff0c;正常情况下后端是要进行一些必要的校验&#xff0c;最简单的做法是用 if 效果是可以&#xff0c;但不优雅。使用 Validator 代替 if&#xff0c;就会优雅很多 ps&#xff…

重学SpringBoot3-Spring Data JPA简介

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ 重学SpringBoot3-Spring Data JPA简介 1. 什么是 Spring Data JPA&#xff1f;2. Spring Data JPA 的核心概念2.1. 实体&#xff08;Entity&#xff09;2.2. Repository&…

SpringBoot整合mybatisPlus实现批量插入并获取ID

背景&#xff1a;需要实现批量插入并且得到插入后的ID。 使用for循环进行insert这里就不说了&#xff0c;在海量数据下其性能是最慢的。数据量小的情况下&#xff0c;没什么区别。 【1】saveBatch(一万条数据总耗时&#xff1a;2478ms) mybatisplus扩展包提供的&#xff1a;…