云函数攻防

在学习云函数之前,我们要先了解一下Serverless

Serverless概述

简单来说,Serverless就是无需管理服务器的架构模式,我们只需要写业务代码,云平台会自动处理部署、弹性扩容、资源调度、运维运作等一切幕后工作

在狭义上来讲Serverless可以分成以下两个方面

┌───────────────────────────────────────────────────────────┐
│                        Serverless                         │
└────────────┬────────────────────────────────┬─────────────┘
             │                                │
 ┌───────────▼────────────┐      ┌────────────▼───────────┐
 │  FaaS:函数即服务       │      │  BaaS:后端即服务       │
 │  Function as a Service │      │  Backend as a Service  │
 └────────────────────────┘      └────────────────────────┘

无服务器(Serverless)不是表示没有服务器,而是表示当使用Serverless时,我们无需关心底层的资源,也无需登录服务器和优化服务器,只需关注最核心的代码片段,即可跳过复杂的、繁琐的基本工作。

本文主要研究的是函数即服务,也就是云函数

什么是云函数

首先,函数我们都了解,是程序中的一段可以被重复调用、具有特定功能的代码结构

云函数就是一种运行在云端的函数,属于 Serverless 架构的核心组件。你只需编写函数代码,云平台自动完成运行环境、部署、调度和扩容。 真正实现了只写业务逻辑,其他全部自动化

函数即服务提供的是一种直接在云上运行无状态的、短暂的、由事件触发的代码的能力。

函数即服务和传统应用架构不同,函数即服务提供的是事件触发式的运行方式,云函数不是始终运行的状态,而是在事件发生时由事件触发运行,并且在一次运行的过程中处理这一次事件。因此在云函数的代码中,仅需考虑针对一个事件的处理流程,而针对大量事件的高并发处理,由平台实现云函数的多实例并发来支持。

云函数无法长驻,调用的时候创建,执行完之后立即就销毁,所以无法直接保存状态。

偷一张图片来,便于理解

当服务没有被请求时,云计算上并没有这个函数的实例。一旦请求发出,调度平台将以毫秒级的服务实例化一个服务并完成响应。请求处理完成后,调度服务又将自动收回这个实例。云函数的使用成本只要是由调用次数、资源使用量和外网出流量等统计出来,而如果在业务低谷期,访问量少的时候,运维的成本是很小的。对于创业公司来讲,可以省去大部分初期运维的费用,可见价值还是很大的

执行方法

对应项目的main函数是程序执行的起点

在调用云函数时,首先会寻找执行方法作为入口,执行用户的代码,用户需以文件名.执行方法名的形式进行设置

例如用户设置的执行方法为 index.handler,则 SCF 平台会首先寻找代码程序包中的 index 文件,并找到该文件中的 handler 方法开始执行。

函数入参

函数入参,是指函数在被触发调用时所传递给函数的内容。通常情况下,函数入参包括 eventcontext 两部分,但根据开发语言和环境的不同,入参个数可能有所不同

event

event 参数类型为 dict,event 中包含了触发函数执行的基本信息,可以是平台定义的格式,也可以自定义格式。函数被触发开始执行后,可以在代码内部对 event 进行处理

有两种方法可以触发云函数SCF执行:

  • 通过调用云API触发函数执行
  • 通过绑定触发器触发函数执行
context

context 为 SCF 平台提供的入参,将 context 入参传递给执行方法,代码可通过解析 context 入参对象,获取到运行环境及当前请求的相关信息

具体可以看腾讯云的官方手册,这里不再赘述

云函数 基本概念_腾讯云

函数返回

SCF 平台会获取到云函数执行完成后的返回值,并根据下表中不同的触发方式进行处理。

触发方式

处理方式

同步触发

通过 API 网关、云 API 同步 invoke 触发函数的方式为同步触发。

使用同步方式触发的函数在执行期间,SCF 平台不会返回触发结果。

在函数执行完成后,SCF 平台会将函数返回值封装为 JSON 格式并返回给调用方。

异步触发

使用异步方式触发的云函数,SCF 平台接收触发事件后,会返回触发请求 ID 。

在函数执行完成后,函数的返回值会封装为 JSON 格式并存储在日志中。

用户可在函数执行完成后,通过返回的请求 ID 查询日志获取该异步触发函数的返回值。

当函数中的代码返回具体值时,通常返回特定的数据结构。例如 :

运行环境

返回数据结构类型

Python

简单数据结构或 dict 数据结构

Node.js

JSON Object

PHP

Array 结构

GO

简单的数据结构或带有 JSON 描述的 struct

为保证针对各开发语言和环境的统一性,函数返回会使用 JSON 数据格式统一封装。SCF 平台在获取到例如以上运行环境函数的返回值后,将会对返回的数据结构进行 JSON 化,并返回 JSON 内容到调用方。

触发器和触发源

  • 任何可以产生事件,触发云函数执行的均可以被称为触发器或触发源。触发器在本身产生事件后,通过将事件传递给云函数来触发函数运行。
  • 触发器在触发函数时,可以根据自身特点,使用同步或异步方式触发函数。同步方式触发函数时,触发器将等待函数执行完成并获取到函数执行结果;异步方式触发函数时,触发器将仅触发函数而忽略函数执行结果。
  • 腾讯云云函数在和腾讯云的某些产品或服务对接时,也有自身实现的一些特殊方式,例如推(PUSH)模式和拉(PULL)模式。
    • 推模式:触发器主动将事件推送至云函数平台并触发函数运行。
    • 拉模式:云函数平台通过拉取模块,从触发器中拉取到事件并触发云函数运行。

攻防方面,我们也可以通过云函数实现一系列操作,例如各种扫描器,还有一些其他的,基本上就是基于python的,可以去看python黑帽子这本书,附上我创业未半中道崩殂的知识库链接python黑帽子 · 语雀

至于实操的话,鼠鼠手里没有米,没钱买云服务,下次一定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值