本文为您介绍如何在DataWorks中通过函数计算节点调用函数计算服务,并实现发送邮件功能。
背景介绍
DataWorks当前已经支持通过函数计算节点调用函数计算服务,在函数计算服务中可以自定义各种功能,最终可通过DataWorks进行调用。
前提条件
已开通DataWorks服务,详情请参见开通DataWorks服务。
已开通函数计算服务,详情请参见快速创建函数。
使用限制
功能限制
DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型。
地域限制
DataWorks目前仅支持华东1(杭州)、华东2(上海)、华北2(北京)、华南1(深圳)、西南1(成都)、中国香港、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)地域的工作空间使用函数计算功能。
步骤一:创建函数
登录函数计算控制台,在顶部导航栏切换至目标地域。
在左侧导航栏,单击函数。
在函数页面单击创建函数。
选择事件函数并配置函数信息。
参数
描述
函数名称
输入函数名称。本文示例为:
send-mail-fc
。运行环境
本文使用Python 3.9。
代码上传方式
本文选择使用示例代码并使用Hello, world! 示例。
高级配置、环境变量可根据实际情况进行设置。详情可参见创建函数。
单击创建,完成函数创建,进入函数详情的代码页面。
编辑
index.py
,输入业务逻辑代码。本文以发送邮件为例,代码如下:重要以下示例代码中的
mail_host
、mail_port
、mail_username
、mail_password
、mail_sender
、mail_receivers
参数请根据实际情况设置。电子邮件的账号必须开启SMTP服务。某些电子邮件服务提供商默认未开启,需自行检查并开启。例如:163邮箱默认就未开启SMTP服务。
某些电子邮件服务提供商基于安全原因,可能会使用一种类似授权码的专用密码,用于三方邮件客户端进行登录。这时
mail_password
需设置为授权码而不是账号密码。例如:163邮箱就存在授权码,且三方登录时必须使用授权码来作为密码登录。
# -*- coding: utf-8 -*- import logging import json import smtplib from email.mime.text import MIMEText def handler(event, context): evts = json.loads(event) logger = logging.getLogger() logger.info('event: %s', evts) mail_host = 'smtp.163.com' ## 邮箱服务地址 mail_port = '465'; ## 邮箱smtp协议端口号 mail_username = 'sender_****@163.com' ## 登录用户名 mail_password = 'EWEL******KRU' ## 登录用户密码 mail_sender = 'sender_****@163.com' ## 发件人邮箱地址 mail_receivers = ['receiver_****@163.com'] ## 收件人邮箱地址 mail_content=generate_mail_content(evts) message = MIMEText(mail_content,'plain','utf-8') message['Subject'] = 'mail test' message['From'] = mail_sender message['To'] = mail_receivers[0] smtpObj = smtplib.SMTP_SSL(mail_host + ':' + mail_port) smtpObj.login(mail_username,mail_password) smtpObj.sendmail(mail_sender,mail_receivers,message.as_string()) smtpObj.quit() return 'mail send success' def generate_mail_content(evt): mail_content='' if 'msg' in evt.keys(): mail_content=evt['msg'] else: logger = logging.getLogger() logger.error('msg not present in event') ''' 此处可增加处理邮件内容读取逻辑 ''' return mail_content
单击部署代码按钮。
单击测试函数右侧下拉箭头,在弹出的菜单中单击配置测试参数,输入测试参数后单击确定按钮。
事件内容输入:
{ "msg": "This is a test message" }
单击测试函数即可完成测试。
检查收件人的邮箱中是否收到邮件。
说明某些电子邮件服务器可能会将未知发件人识别为垃圾邮件从而进行拦截,因此若您未在收件箱中找到测试邮件,则需到垃圾邮件中进行查找。
步骤二:在DataWorks中创建并配置函数计算节点
登录DataWorks控制台。
单击左侧导航栏中的工作空间。进入工作空间列表页面。
将页面顶部导航栏的地域列表切换为步骤一:创建函数中指定的地域。
在工作空间列表中单击目标工作空间名称,进入工作空间详情页面。若您在当前地域下无工作空间,则需创建一个工作空间,详情可参见创建工作空间。
单击左侧导航栏中的数据建模与开发下的数据开发,进入DataWorks数据开发页面。
单击目标业务流程名称,在业务流程中,右击通用,选择
。在创建节点弹出框中输入节点名称并单击确定按钮,完成函数计算节点的创建。设置函数计算节点参数。
参数
描述
选择服务
选择版本或别名
选择后续调用函数时所使用的服务版本或别名。默认版本为LATEST。本文选择默认版本。
选择函数
选择步骤一:创建函数中创建的函数。本文为:
send-mail-fc
。如需新建,详情请参见管理函数。说明DataWorks目前仅支持调用事件函数,不支持调用HTTP函数。因此,若要在DataWorks周期性调度处理事件函数,则在创建函数时,需要创建用于处理事件请求的事件函数。更多函数类型介绍,详情请参见函数类型。
调用方式
本文选择同步。调用方式详情可参见函数调用。
变量
调用函数的参数。本文示例如下:
{ "msg": "This is a test message from dataworks!" }
可选:调试运行函数计算节点。节点配置完成后,您可单击图标,指定任务运行的资源组并为代码变量赋值常量进行调试运行,测试节点代码逻辑是否正确。
配置节点的周期调度属性。DataWorks提供的调度参数,可实现调度场景下代码动态传参。更多调度参数的配置,请参见调度参数支持的格式。更多调度属性,请参见任务调度属性配置概述。
步骤三:提交并发布节点
函数计算节点需要提交发布至生产环境后,才会自动调度运行。
保存并提交节点。
可选:发布节点。
后续步骤
任务提交发布至生产运维中心调度后,您可通过DataWorks的运维中心进行相关运维操作,详情请参见运维中心。
在掌握如何创建和使用函数计算节点的基本步骤之后,您可通过最佳实践进一步深入了解该节点,详情请参见在DataWorks中通过函数计算节点实现动态为PDF添加水印。