我是程序员前端&优化

十分钟上线 - 函数计算构建支付宝小程序的后端

2019-06-19  本文已影响66人  阿里云云栖号

阿里云函数计算服务(FunctionCompute,FC)是一个事件驱动的全托管计算服务。通过函数计算与云端各个服务的广泛集成,开发者只需要编写函数代码,就能够快速地开发出弹性高可用的后端系统。接下来我们使用FC,来快速实现一个图片转换服务, 并把这个图片转换服务作为支付宝小程序的后端。

支付宝小程序demo前端效果图:

资源下载及准备工作

示例代码附件 【必须】

支付宝小程序开发工具下载 【非必须】

函数计算FC 快捷入口
对象存储OSS 快捷入口
日志服务Log Service 快捷入口

简明架构图

函数入口

普通函数入口

def my_handler(event, context):
    return 'hello world'

my_handler需要与创建函数时的"Handler"字段相对应:例如创建函数时指定的 Handler 为main.my_handler,那么函数计算会去加载main.py中定义的my_handler函数

event 参数是用户调用函数时传入的数据,其类型是str

context 参数中包含一些函数的运行时信息(例如 request id/临时 AK 等)。其类型是FCContext,具体结构和使用在下面的使用 context介绍

函数的返回值会作为调用函数的结果返回给用户,它可以是任意类型:对于简单类型会函数计算会把它转换成 str 返回,对于复杂类型会把它转换成 JSON 字符串返回

HTTP 触发器的函数入口

HELLO_WORLD = b"Hello world!\n"
def handler(environ, start_response):
    context = environ['fc.context']
    status = '200 OK'
    response_headers = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
    return [HELLO_WORLD]

需要注意的点:environ 中的 HTTP_Variables ,里面包含 request 中 header, 比如某个请求的 header 的为 'x-Custom-key':'value' , 在 environ 中会表现为:environ['HTTP_X_CUSTOM_KEY']='value', 可以理解为,对于 request header 中的 key,WSGI 做如下处理:key = "HTTP_" + k.upper().replace("-","_")

更多详细介绍请参考函数入口python runtime

具体操作步骤

假定这次实验所有操作在华东2 上海region 完成,所有实验相关的资源请从附件中下载

这里介绍两种部署函数的方法:

  1. 利用fun 工具进行自动化部署
  2. 利用控制台进行可视化部署

准备工作

利用fun工具进行自动部署

Fun 是用于在阿里云上定义 serverless 应用的模型。
Serverless 应用是由事件触发功能组成的应用。一个典型的 serverless 应用由一个或多个由诸如向 阿里云 OSS 上传对象,在 阿里云 OTS 上执行数据操作以及 API 操作等事件触发的阿里云函数计算组成。这些函数可以独立使用。也可以利用其它资源,例如阿里云 OTS 的表和 OSS 的 buckets。最基本的 serverless 应用可以只有一个函数。

比如对于这个案例,定义的yaml文件如下:

ROSTemplateFormatVersion: '2015-09-01'
Transform: 'Aliyun::Serverless-2018-04-03'
Resources:
  sh-pro:
    Type: 'Aliyun::Serverless::Log'
    Properties:
      Description: 'image process log pro'
    fc-log:
      Type: 'Aliyun::Serverless::Log::Logstore'
      Properties:
        TTL: 362
        ShardCount: 1 
  pydemo:
    Type: 'Aliyun::Serverless::Service'
    Properties:
      Description: 'fc xiaochengxu demo'
      Policies:
        - AliyunOSSFullAccess
      LogConfig:
        Project: 'sh-pro'
        Logstore: 'fc-log'
    upload:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: upload.handler
        CodeUri: './'
        Description: 'http function for upload image'
        Runtime: python2.7
        Timeout: 60
        MemorySize: 256
      Events:
        http-trigger:
          Type: HTTP
          Properties:
            AuthType: ANONYMOUS
            Methods: ['POST']
    proc:
      Type: 'Aliyun::Serverless::Function'
      Properties:
        Handler: proc.handler
        CodeUri: './'
        Description: 'http function for process image'
        Runtime: python2.7
        Timeout: 60
        MemorySize: 256
      Events:
        http-trigger:
          Type: HTTP
          Properties:
            AuthType: ANONYMOUS
            Methods: ['GET']

上面的定义的yaml文件要做以下几件事情:

  1. 创建日志资源:logproject:sh-pro, logstore: fc-log
  2. 创建service:xcxdemo 以及function: uploadproc, 函数添加了一个类型为HTTP,名叫http-trigger的trigger
  3. 配置service role以及logconfig, 其中role的权限为AliyunOSSFullAccess和函数执行日志写到fc-log的权限

具体操作

  npm install @alicloud/fun -g

执行成功后,应该可以看到如下资源被创建, 截图:

控制台setup

创建函数,并且配置http trigger

测试函数

curl https://1186202104331798.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/pydemo/upload/  -F "lena.png=@/Users/songluo/work/shworkshop/wp/lena.png"  -v

curl https://1186202104331798.cn-shanghai.fc.aliyuncs.com/2016-08-15/proxy/pydemo/proc/rotate/10/lena.png >> 1.png

将函数作为支付宝小程序的后端

然后打开 调试器 和 模拟器

总结

函数计算有如下优势:



本文作者:rsong

阅读原文

本文为云栖社区原创内容,未经允许不得转载。

上一篇 下一篇

猜你喜欢

热点阅读