
# 使用函数工作流服务实现定时刷新缓存功能
#### 方案概述
定时刷新功能是华为云CDN配合函数工作流，在函数工作流服务创建定时刷新函数，从而实现定时刷新功能。如果您的业务需要定时刷新CDN节点缓存，以保证用户能获取到最新的资源，您可以通过本方案实现。
本文以Python3.9为例，为您介绍通过控制台创建FunctionGraph函数和Timer触发器，实现定时刷新CDN缓存的功能。
#### 资源与成本规划
本实践所需资源请见下表。
| 资源                  | 资源说明                            | 每月费用                                                                                                     |
|:---|:---|:---|
| 内容分发网络 CDN          | **流量**：用户访问CDN节点产生的流量，可购买流量包抵扣。 | 具体的计费方式及标准请参考[计费说明](https://support.huaweicloud.com/price-cdn/cdn_01_0155.html)。                         |
| 函数工作流 FunctionGraph | 请求次数费用、执行时间费用和其他费用，按需计费。        | 具体的计费方式及标准请参考函数工作流[计费项](https://support.huaweicloud.com/price-functiongraph/functiongraph_00_0010.html)。 |
   
#### 实施步骤
1. **创建委托**
   1. 登录[华为云控制台](https://console.huaweicloud.com)，在左侧导航栏，选择**"** 管理与监管\>统一身份认证服务**"**。
   
   2. 在左侧导航栏，选择"委托"页签，单击右上方的"创建委托"。
   
   3. 在创建委托页面，按照如下参数设置委托。
      - 委托名称：FG_TO_CDN001。
      
      - 委托类型：云服务。
      
      - 云服务：函数工作流FunctionGraph。
      
      - 持续时间：永久。
      
      
      ![](https://support.huaweicloud.com/bestpractice-cdn/zh-cn_image_0000001952309933.png)
      
   
   4. 单击"下一步"，在"选择策略"页面勾选"CDN RefreshAndPreheatAccess"策略。
   
   5. 单击"下一步"，选择授权范围。可根据业务需求选择"所有资源"或"全局服务资源"。
   
   6. 单击"确定"，完成委托创建。
    
2. **创建事件函数**
   1. 登录[华为云控制台](https://console.huaweicloud.com)，在左侧导航栏，选择**"** 计算\>函数工作流**"，**region选择可根据业务情况自行选择。
   
   2. 单击右上方"创建函数"，进入创建函数界面，选择"空白模板"**。**
      - 函数类型：事件函数。
      
      - 区域：默认。
      
      - 项目：默认。
      
      - 输入函数名称：cdn-auto-refresh（可自定义）。
      
      - 委托名称：选择已创建好的委托"FG_TO_CDN001" 。
      
      - 运行时语言：选择"Python 3.9"。
       
   
   3. 单击"创建函数"，进入代码编辑页面。
   
   4. 将[代码示例]中的代码复制到代码窗，单击"部署"。
   
   5. 部署完成后，可以单击"测试"手动触发函数，验证函数是否可用。
    
3. **创建触发器** 。在函数界面，单击"创建触发器"，设置相关参数。
   - 触发器类型：定时触发器 (TIMER)。
   
   - 定时器名称：自定义的定时器名称，例如：Timer-0001。
   
   - 触发规则：固定频率或Cron表达式。
     - 固定频率：固定时间间隔触发函数，该类型下支持配置单位为分、时、天，每种类型仅支持整数配置，其中分钟支持范围(0，60\]，小时支持范围(0，24\]，天支持范围(0，30\]。
     
     - Cron表达式：设置更为复杂的函数执行计划，例如：周一到周五上午08:30:00执行函数等，具体请参见[函数定时触发器Cron表达式规则](https://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0207.html#section3)。
      
   
   - 是否开启：开启。
    
4. 配置完成后，将根据触发器设置的频率定时执行刷新任务。
 
 #### 代码示例
使用代码示例时请根据需要调整刷新类型（type）及需要刷新的URL（urls）。
```
# -*- coding:utf-8 -*-
import json
import requests
def handler (event, context):
    header = {"x-auth-token":context.getToken(),'content-type':'application/json;charset=utf-8'}
    data = {
        "refresh_task":{
            "type":"file",
            "urls":["https://example.com/1.txt"]
        }
    }
    url = 'https://cdn.myhuaweicloud.com/v1.0/cdn/content/refresh-tasks'
    result = requests.post(url=url,headers=header,data=json.dumps(data))
    context.getLogger().info(result.text)
    return {
        'statusCode': 200,
        'body': result.text,
        'isBase64Encoded': False,
        'headers': {
            'Content-Type': 'application/json'
        }
    }
```
