6分钟

任务2 云函数编写

任务目的

在CVM中创建项目文件夹,以存放云函数以及所有依赖,并在文件夹中创建index.py文件,编写云函数代码。

  • 示例逻辑: 对每次GET请求判断是否存在‘key1’字符传入,如有,则成功次数(scf_suc_counts)+1,如无,则失败次数(scf_fail_counts)+1
  • 本示例基于Python2.7环境演示

任务步骤

1.创建项目

进入/data目录。

[root@scftest ~]# cd /data

创建项目文件夹并进入文件夹。

[root@scftest data]# mkdir MyProject
[root@scftest data]# cd MyProject/

创建index.py并进入编写界面。

[root@scftest MyProject]# vi index.py

2.编写代码

编写代码,这里需要学员自己的云API密钥SecretId和SecretKey,并且为了安全考虑,建议学员建立子用户用来操作SCF与CM。

关于子用户创建、SecretId和SecretKey的部分,学员可以参考实战课程《利用腾讯云COS作为图床为Markdown文档提供图片链接》4.2步骤。

示例代码为:

# -*- coding: utf8 -*-
import time
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.monitor.v20180724 import monitor_client, models
#自定义监控初始化函数,指定region和secrecId、secretKey
def MONITOR(secretId,secretKey):  # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
                                  # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
    try:
        # 获取region地区,这里填写云函数所在的地域
        region = "ap-guangzhou"

        cred = credential.Credential(secretId,secretKey)  # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
                                                          # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140

        client = monitor_client.MonitorClient(cred, region)
    except TencentCloudSDKException as err:
        print(err)
    return client
#自定义监控上报函数,传入函数名称,指标名称,指标值
def API(client,instanceName,MetricName,Value):
    req = models.PutMonitorDataRequest() 
    req.AnnounceInstance = instanceName
    req.AnnounceTimestamp = int(time.time())
    req.Metrics = [
      {"MetricName": MetricName,"Value": Value}
    ]
    resp = client.PutMonitorData(req)
    return resp.to_json_string()

#将yourSecretId的内容换成你的SecretId,将yourSecretKey换你的SecretKey。
def main_handler(event, context):
    client = MONITOR("yourSecretId", "yourSecretKey")  # 用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
                                                       # 用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参考https://cloud.tencent.com/document/product/598/37140
    if event.get('queryString')is not None and 'key1' in event.get('queryString').keys():
        #scf的名称需要包含namespace和函数名称,中间用"|"分割
        print(API(client,"default|scf_monitor_Test","scf_suc_count",1))
        result = "scf_suc_count+1"
    else:
        print(API(client,"default|scf_monitor_Test","scf_fail_count",1))
        result = "scf_fail_count+1"
    return result  #return

保存云函数。

保存代码