摘要: 阿里云函数计算服务 (FunctionCompute,FC) 是一个事件驱动的全托管计算服务通过函数计算与云端各个服务的广泛集成, 开发者只需要编写函数代码, 就能够快速地开发出弹性高可用的后端系统接下来我们利用 API 网关 + FC, 来快速实现一个图片转换服务
阿里云函数计算服务 (FunctionCompute,FC) 是一个事件驱动的全托管计算服务通过函数计算与云端各个服务的广泛集成, 开发者只需要编写函数代码, 就能够快速地开发出弹性高可用的后端系统接下来我们利用 API 网关 + FC, 来快速实现一个图片转换服务
我们先从最简单的 hello word 开始, 函数代码如下:
- def my_handler(event, context):
- return 'hello world'
函数名
my_handler 需要与创建函数时的 Handler 字段相对应: 例如创建函数时指定的 Handler 为 main.my_handler, 那么函数计算会去加载 main.py 中定义的 my_handler 函数
event 参数
event 参数是用户调用函数时传入的数据, 其类型是 str
context 参数
context 参数中包含一些函数的运行时信息 (例如 request id / 临时 AK 等) 其类型是 FCContext, 具体结构和使用在下面的使用 context 介绍
返回值
函数的返回值会作为调用函数的结果返回给用户, 它可以是任意类型: 对于简单类型会函数计算会把它转换成 str 返回, 对于复杂类型会把它转换成 JSON 字符串返回
结合 API 网关, 开发者可以方便地将自己的函数以 HTTP 的方式提供给别人使用关于 API 网关和 FC 的交互协议细节, 可参考这篇文章下图是图片拼接和选择服务的效果和代码示例当 body 内容为二进制时, 需在函数计算中对 body 内容进行 Base64 编码, 同时设置 isBase64Encoded=true 如果 body 无需 Base64 编码, isBase64Encoded 可以设置为 falseAPI 网关会对 isBase64Encoded=true 的 body 内容进行 Base64 解码后再透出给客户端
- import base64
- import logging
- import random
- import oss2
- from wand.image import Image
- TEMPLATE = open('/code/index.html').read()
- def my_handler(event, context):
- logger = logging.getLogger()
- logger.info('event: %s', event)
- creds = context.credentials
- auth = oss2.StsAuth(creds.accessKeyId, creds.accessKeySecret, creds.securityToken)
- bucket = oss2.Bucket(auth, 'oss-cn-shanghai-internal.aliyuncs.com', 'rockuw-sh-2')
- fc_obj = bucket.get_object('fc.png')
- py_obj = bucket.get_object('python.png')
- with Image(file=fc_obj) as fc_img:
- with Image(file=py_obj) as py_img:
- img = Image()
- img.blank(fc_img.width + py_img.width + 20, py_img.height)
- img.composite(image=fc_img, left=0, top=0)
- img.composite(image=py_img, left=fc_img.width+20, top=0)
- img.rotate(random.randint(0, 360))
- img_enc = base64.b64encode(img.make_blob(format='png'))
- resp = {
- 'isBase64Encoded': False,
- 'statusCode': 200,
- 'body': TEMPLATE.replace('{fc-py}', img_enc)
- }
- return resp
来源: http://geek.csdn.net/news/detail/256162