函数计算入口参数event详解

本文涉及的产品
简介: 函数计算入口参数event是一个可以根据具体需求高度自由化定制的参数,真的可以为所欲为

官方文档中对event的解释如下:

event是用户调用函数时传入的数据,它可以是一个简单的string,也可以是一个JSON string,还可以是一个图片(二进制数据)。函数中的event参数是个字节流,在Python2.7中是str类型,在Python3中是bytes类型。

用户在函数中可以根据实际情况对event进行转换:

  • 输入数据是一个JSON string的话,用户可以把它转换成一个dict:
# -*- coding: utf-8 -*-
import json
def my_handler(event, context):
    evt = json.loads(event)
    return evt['key']
  • 输入数据是一个文件的bytes, 比如图片的文件作为event参数传入
# -*- coding: utf-8 -*-
from wand.image import Image
def resize(event, context):
    with Image(blob=event) as img:
        with img.clone() as i:
            i.resize(128, 128)
            return i.make_blob()

丰富event参数功能

上面列出的event参数功能都是针对具体的string或者文件bytes的情况,假设用户想在event中同时传送文本字符串和图片、音频、视频等其他文件资源,这个是可行吗?答案是肯定的。
在本教程中,我们以python3 runtime为例,将一张图片作为json的某个filed值传入函数的event参数,先在控制台上创建一个函数如下:

# -*- coding: utf-8 -*- 
import json
from wand.image import Image
import base64

def handler(event, context):
    evt = json.loads(event)
    img_str = evt.get('image_str', "")
    print("handler log:", evt.get('name'))
    image_data = base64.b64decode(img_str)
    if not image_data:
        return
    with Image(blob=image_data) as img:
        with img.clone() as i:
            i.resize(128, 128)
            return i.make_blob()

假设这个函数所在的service名为demo, 函数名字是multimedia, 本地代码:

# coding=utf-8
import fc2
import base64
import json

def get_multimedia_json(img_file):
    json_data = None
    with open(img_file, 'rb') as jpg_file:
        byte_content = jpg_file.read()
        base64_bytes = base64.b64encode(byte_content)
        base64_str = base64_bytes.decode('utf-8')
        raw_data = {
            'name': "multimedia",
            'image_str': base64_str,
        }
        json_data = json.dumps(raw_data)
    return json_data

json_data = get_multimedia_json("test.jpg")

client = fc2.Client(
    endpoint='<your account id>.cn-hangzhou.fc.aliyuncs.com',
    accessKeyID='<your ak id>',
    accessKeySecret='<your ak secret>',
    )

# Invoke function synchronously.
resp = client.invoke_function('demo', 'multimedia', payload=json_data)

with open('output.jpg', 'wb') as jpg_file:
    jpg_file.write(resp.data)

这里假设函数的当前目录有test.jpg图片,执行函数之后,在本地会生成一张test.jpg缩放成128*128大小的图像output.jpg

event是一个可以根据具体需求高度自由化定制的参数,真的可以为所欲为:
image

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
30天前
|
JSON Serverless API
Serverless 应用引擎常见问题之query参数无法取到上一步传输过来的jjson参数如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
157 3
|
3月前
|
缓存 Serverless 开发者
serverless devs部署问题之push image失败如何解决
Serverless部署是指将应用程序部署到无服务器架构中,该架构允许开发者专注于代码而无需关心底层服务器的运行和维护;针对Serverless部署过程中可能遇到的挑战,本合集提供全面的指南和最佳实践,帮助开发者顺利实现应用的无服务器化部署。
77 1
|
9月前
|
Java Serverless
FC Java runtime 找不到函数入口问题
在函数计算中使用Java编程时,需要定义一个函数作为入口函数。由于Java有包的概念,因此执行方法和其他语言有所不同,需要带有包信息。在入口函数需要配置包信息
594 0
FC Java runtime 找不到函数入口问题
|
2月前
|
人工智能 数据管理 Serverless
阿里云数据库走向Serverless与AI驱动的一站式数据平台具有重大意义和潜力
阿里云数据库走向Serverless与AI驱动的一站式数据平台具有重大意义和潜力
404 2
|
2月前
|
人工智能 运维 Cloud Native
、你如何看待阿里云数据库走向Serverless与AI驱动的一站式数据平台?
、你如何看待阿里云数据库走向Serverless与AI驱动的一站式数据平台?
149 2
|
2月前
|
人工智能 数据管理 大数据
阿里云数据库走向Serverless与AI驱动的一站式数据平台是一个很有前景和意义的发展方向
阿里云数据库走向Serverless与AI驱动的一站式数据平台是一个很有前景和意义的发展方向
33 2
|
7天前
|
监控 Serverless API
阿里云函数计算的工作原理与事件驱动模型密切相关
【4月更文挑战第17天】阿里云函数计算的工作原理与事件驱动模型密切相关
59 4
|
7天前
|
消息中间件 运维 Serverless
阿里云函数计算是一种FaaS(Function as a Service)云服务
【4月更文挑战第17天】阿里云函数计算是一种FaaS(Function as a Service)云服务
46 3

相关产品

  • 函数计算