函数计算 编写函数

By | 2021年4月22日

完成CDN事件触发器后,您可以开始写入函数代码。本文介绍如何使用函数计算控制台编写函数,实现CDN事件触发函数计算转存CDN离线日志。

前提条件

创建触发器

操作步骤

  1. 登录函数计算控制台
  2. 在顶部菜单栏,选择地域。
  3. 在左侧导航栏,单击服务及函数
  4. 服务列表区域,单击目标服务。然后在函数列表页签,单击目标函数名称。
  5. 单击代码执行页签,在代码编辑器中编写代码。

    本文以Python函数代码为例。

    import json
    import oss2
    import requests
    
    def handler(event, context):
        creds = context.credentials
        auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
        bucket = oss2.Bucket(auth, 'your endpoint', 'your bucket name')
    
      # Parse the event to get the source object info.
      eventObj = json.loads(event)["events"]
      fileUrl = eventObj[0]["eventParameter"]["filePath"]
      file = requests.get(fileUrl)
      result = bucket.put_object("your log name", fileUrl)
    
      return result.status                       

event格式说明

event是函数计算的入口参数,具体格式为如下。其中,对于不同的CDN事件类型,
eventParameter中包含的键值对不同。

{
    "events": [
        {
            "eventName": "LogFileCreated",//事件类型
            "eventSource": "cdn",//事件源名称
            "region": "cn-hangzhou",//地域,默认为“cn-hangzhou”。
            "eventVersion": "1.0.0",//事件版本
            "eventTime": "2018-06-14T15:31:49+08:00",//事件发生时间
            "traceId": "c6459282-6a4d-4413-894c-e4ea39686738" //事件源传递过来的ID,用于排查问题。
            "userIdentity": {
                "aliUid": "1xxxxxxxxxxxx" //用户ID
            },
            "resource": {
                "domain": "example.com"//域名
            },             
            "eventParameter": {
                "key": "value"
            },
        }
    ]
}

  • LogFileCreated事件的event示例。

    替换filePath为您CDN日志的路径,或任何测试文件。

    {
        "events": [
            {
                "eventName": "LogFileCreated",//事件类型
                "eventSource": "cdn",//事件源名称
                "region": "cn-hangzhou",//地域,默认为“cn-hangzhou”。
                "eventVersion": "1.0.0",//事件版本
                "eventTime": "2018-06-14T15:31:49+08:00",//事件发生时间
                "traceId": "c6459282-6a4d-4413-894c-e4ea39686738" //事件源传递过来的ID,用于排查问题。
                "userIdentity": {
                    "aliUid": "1xxxxxxxxxxxx" //用户ID
                },
                "resource": {
                    "domain": "example.com"//域名
                },
                "eventParameter": {
                    "domain": "example.com",//域名
                    "endTime": 1528959900,//日志文件的结束时间
                    "fileSize": 1788115,//日志文件大小
                    "filePath": "http://cdnlog.cn-hangzhou.oss.aliyun-inc.com/www.aliyun.com/2017_12_27/www.aliyun.com_2017_12_27_0800_0900.gz?OSSAccessKeyId=xxxx&Expires=xxxx&Signature=xxxx",//日志文件地址
                    "startTime": 1528959600//日志文件的起始时间
                },           
            }
        ]
    }
                        
  • CachedObjectsRefreshed、CachedObjectsPushed和CachedObjectsBlocked事件的event示例。
    {
        "events": [
            {
                "eventName": "CachedObjectsRefreshed",//事件类型
                "eventVersion": "1.0.0",  // 事件版本,目前都是1.0.0版本。
                "eventSource": "cdn", // 事件源名称
                "region": "cn-hangzhou", // 地域,默认为"cn-hangzhou"。
                "eventTime": "2018-03-16T14:19:55+08:00",//事件发生时间
                "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",//事件源传递过来的ID,用于排查问题
                "resource": {
                    "domain": "example.com"//资源所在的域名
                },
                "eventParameter": {
                    "objectPath": [
                        "/2018/03/16/13/33b430c57e7.mp4",//资源标识
                        "/2018/03/16/14/4ff6b9bd54d.mp4"//资源标识
                    ],
                    "createTime": 1521180769,//刷新开始时间
                    "domain": "example.com",//资源所在的域名
                    "completeTime": 1521180777,//刷新结束时间
                    "objectType": "File",  //刷新类型,取值为File,Directory
                    "taskId": 2089687230 //资源刷新任务ID
                },
                "userIdentity": {
                    "aliUid": "1xxxxxxxxxx" //用户ID
                }
            }
        ]
    }                    
  • CdnDomainStarted和CdnDomainStopped事件的event示例。
    {  "events": [
          { 
             "eventName": "CdnDomainStarted", //事件类型 
             "eventVersion": "1.0.0", //事件版本 
             "eventSource": "cdn", //事件源名称 
             "region": "cn-hangzhou", //区域,默认为“cn-hangzhou”。
             "eventTime": "2018-03-16T14:19:55+08:00",//事件发生时间
             "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",//事件源传递过来的ID,用于排查问题。
             "resource": {
                  "domain": "chongshi.alicdn.com" 
             }, 
             "eventParameter": {
                  "domain": "chongshi.alicdn.com", 
                  "status": "online" //Domain状态 
             }, 
             "userIdentity": {
                  "aliUid": "12345678"//用户ID 
             } 
          } 
       ]
    }
  • CdnDomainAdded和CdnDomainDeleted事件的event示例。
    {  "events": [
          { 
             "eventName": "CdnDomainStarted", //事件类型 
             "eventVersion": "1.0.0", //事件版本 
             "eventSource": "cdn", //事件源名称 
             "region": "cn-hangzhou", //地域,默认为“cn-hangzhou”。
             "eventTime": "2018-03-16T14:19:55+08:00",//事件发生时间
             "traceId": "cf89e5a8-7d59-4bb5-a33e-4c3d08e25acf",//事件源传递过来的ID,用于排查问题。
             "resource": {
                  "domain": "chongshi.alicdn.com" 
             }, 
             "eventParameter": {
                  "domain": "chongshi.alicdn.com", 
             }, 
             "userIdentity": {
                  "aliUid": "12345678"//用户ID 
             } 
          } 
       ]
    }

后续步骤

测试函数

请关注公众号获取更多资料

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注