[云] 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 json
 
def lambda_handler(event, context):
    json_input = event
    if 'body' in event: # it can be an external request via API gateway
        json_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 + b
    else:
        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 json
 
def lambda_handler(event, context):
    # Initialize response
    response = {
        'statusCode': 200,
        'body': ''
    }
 
    json_input = event
    if 'body' in event: # it can be an external request via API gateway
        json_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 + b
        response['body'] = json.dumps({'result': result})
        return response
    else:
        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 json
    
    def lambda_handler(event, context):
        json_input = event
        if 'body' in event:  # 通过 API 网关的外部请求可能带有 body
            json_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 + b
        else:
            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 json

def lambda_handler(event, context):
    # 初始化响应
    response = {
        'statusCode': 200,
        'body': ''
    }

    json_input = event
    if 'body' in event:  # 通过 API 网关的外部请求可能带有 body
        json_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 + b
        response['body'] = json.dumps({'result': result})
        return response
    else:
        response['body'] = json.dumps({'error': '未找到输入'})
        return response

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

我们接下来会做什么:

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

使用的环境:

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

使用 Locust 进行负载测试

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pipeline开发笔记

pipeline开发笔记 jenkins常用插件Build Authorization Token Root配置GitLab的webhooks(钩子)配置构建触发器--示例 piblish over sshBlue OceanWorkspace Cleanup PluginGit插件PipelineLocalization: Chinese (Simplified) --中文显示Build Environment Plugin 显示构建过程…

vscode离线状态ssh连接不断输入密码登不上:配置commit_id

如题&#xff0c;vscode在一个离线服务器上&#xff0c;通过remote-ssh登录远程服务器&#xff0c;不断弹出密码框&#xff0c;总是进不去&#xff0c;后来了解到主要是不同vscode版本需要下载对应抑制commit-id的vscode-server-linux-x64.tar.gz包。 1&#xff09;vscode, 点…

Jupyter Notebook汉化(中文版)

原版jupyter notebook是英文的&#xff0c;想要将其改为中文 在jupyter notebook所在环境输入以下命令 pip install jupyterlab-language-pack-zh-CN打开jupyter notebook&#xff0c;在设置语言中将其设置为中文

提升小学语文教学效果的思维导图方法

众所周知&#xff0c;教学不仅仅是站在讲台上传授知识&#xff0c;它还包括了备课、评估学生学习成果以及不断调整教学方法等多个环节。在面对教学中的各种挑战时&#xff0c;思维导图可以成为解决这些问题的有力工具。思维导图是一种利用图形来组织和表达发散性思维的工具&…

【DBA Part01】国产Linux上安装Oracle进行数据迁移

内容如下&#xff1a; 1.1.生产环境RHEL/OEL Linux8Oracle11gR2安装配置 1.2.国产麒麟操作系统Oracle11gR2安装配置 1.3.国产麒麟操作系统Oracle11gR2 RAC集群安装配置 1.4.Oracle11gR2迁移到国产麒麟操作系统&#xff08;单机/RAC&#xff09; 本阶段课程项目需求说明&am…

Spring配置/管理bean-IOC(控制反转) 非常详细!基于XML及其注解!案例分析! 建议复习收藏!

目录 1.Spring配置/管理bean介绍 2.基于XML配置bean 2.1基于id来获取bean对象 2.2基于类型获取bean对象 2.3通过指定构造器配置bean对象 2.4通过p名称空间配置bean 2.5通过ref配置bean(实现依赖注入) 2.6注入内部Bean对象&#xff0c;依赖注入另一种方式 2.7 注入集合…

PCL 基于距离阈值去除错误对应关系

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 获取初始对应点对 2.1.2 基于距离的对应关系筛选函数 2.1.3 可视化函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实…

批量处理文件权限:解决‘/usr/bin/chmod: Argument list too long’的有效方法

批量处理文件权限&#xff1a;解决‘/usr/bin/chmod: Argument list too long’的有效方法 错误原因解决方案1. 分批处理2. 使用xargs3. 增加ARG_MAX限制4. 使用脚本 结论 在Linux系统中&#xff0c;有时你可能会遇到这样的错误消息&#xff1a;“/usr/bin/chmod: Argument lis…

大数据之hive(分布式SQL计算工具)加安装部署

1.分布式SQL计算: 对数据进行统计分析&#xff0c; SQL是目前最为方便的编程工具. 2.hive:主要功能: 将 SQL语句翻译成MapReduce程序运行,提供用户分布式SQL计算能力 3.构建分布式SQL计算:(hive核心组件) 需要有: 一:元数据管理功能, 即&#xff1a;数据位置,数据结构,等对数…

SpringBoot篇(二、制作SpringBoot程序)

目录 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 3. 阿里云 4. 手动 五、在IDEA中隐藏指定文件/文件夹 六、复制工程-快速操作 七、更改引导类别名 一、代码位置 二、四种方式 1. IDEA联网版 2. 官网 官网制作&#xff1a;Spring Boot 3. 阿里云 阿里云版制…

HTTP和RPC通信协议

在软件开发中&#xff0c;通信协议扮演着关键的角色&#xff0c;它们定义了不同系统或组件之间进行通信的规则和方式。HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和RPC&#xff08;Remote Procedure Call Protocol&#xff09;是两种常见的通信协议。然而RPC 和…

开源模型应用落地-Qwen2.5-7B-Instruct与vllm实现推理加速的正确姿势-Gradio

一、前言 目前&#xff0c;Qwen模型已经升级到了2.5版本。无论是语言模型还是多模态模型&#xff0c;它们都是在大规模的多语言和多模态数据上进行预训练的&#xff0c;并通过高质量的数据进行后期微调&#xff0c;以更好地符合人类的需求。 Gradio作为一个强大的工具&#xff…

Windows--使用node.js的免安装版本

原文网址&#xff1a;Windows--使用node.js的免安装版本_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Windows下如何使用node.js的免安装版本。 下载 1.访问官网 https://nodejs.org/en 记住这个版本号&#xff0c;这个是长期支持的版本。 2.找到压缩包 点击其他下载&#…

Verilog基础:层次化标识符的使用

相关阅读 Verilog基础https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482 一、前言 Verilog HDL中的标识符(identifier)是一个为了引用而给一个Verilog对象起的名字&#xff0c;分为两大类&#xff1a;普通标识符大类和层次化标识符大类。…

【OpenCV】人脸识别方法

代码已上传GitHub&#xff1a;plumqm/OpenCV-Projects at master EigenFace、FisherFace、LBPHFace 这三种方法的代码区别不大所以就一段代码示例。 EigenFace与FisherFace 1. 将人脸图像展开为一维向量&#xff0c;组成训练数据集 2. PCA&#xff08;EigenFace&#xff09;或…

Spring MVC 原理与源码

Spring MVC 整体代码量有 5w 行&#xff0c;通过本专栏&#xff0c;可以快速的研读核心部分的代码&#xff0c;节省你的时间。 DispatcherServlet 的流程处理如下图&#xff1a; 但是随着前后端分离&#xff0c;后端大多提供 Restful API &#xff0c;里面的 ViewResolver 和 …

word怎么清除格式,Word一键清除所有格式教程

你是否曾在编辑Word文档时遇到过复制内容时格式混乱的情况?别担心&#xff0c;这只需要清除一下格式就可以了&#xff0c;很多朋友还不知道word怎么清除格式&#xff0c;下面小编就来给大家讲一讲word一键清除所有格式的方法教程&#xff0c;操作非常简单&#xff0c;有需要的…

02电力电子技术简介

电力电子技术简介 第一章主要是做通识性的介绍&#xff0c;介绍电力电子涉及的基本概念、学习方法和关联学科。最重要的是希望大家能理解电力电子在现实生活中的广泛应用。这一章简介主要分三部分来介绍。首先是概要性的通盘介绍。然后会通过力电子技术性的内容来了解一些拓扑…

用Python将Office文档(Word、Excel、PowerPoint)批量转换为PDF

在处理不同格式的Office文档&#xff08;如Word、Excel和PowerPoint&#xff09;时&#xff0c;将其转换为PDF格式是常见的需求。这种转换不仅确保了文件在不同设备和操作系统间的一致性显示&#xff0c;而且有助于保护原始内容不被轻易修改&#xff0c;非常适合于正式报告、提…

InnoDB引擎(架构,事务原理,MVCC详细解读)

目录 架构分析 逻辑存储结构​ 内存结构​ Buffer Pool​ ChaneBuffer 自适应哈希​ LogBuffer​ 磁盘结构​ 后台线程​ 事务原理​ redolog日志 undolog日志​ MVCC​ 三个隐藏字段​ undolog版本链 readview​ RC(读已提交原理分析)​ RR(可重复读原理分析…