通過Function Compute節點發送郵件

更新時間:
Copy as MD

本文為您介紹如何在DataWorks中通過Function Compute節點調用Function Compute服務,並實現發送郵件功能。

背景介紹

DataWorks當前已經支援通過Function Compute節點調用Function Compute服務,在Function Compute服務中可以自訂各種功能,最終可通過DataWorks進行調用。

前提條件

使用限制

  • 功能限制

    DataWorks目前僅支援調用事件函數,不支援調用HTTP函數。因此,若要在DataWorks周期性調度處理事件函數,則在建立函數時,需要建立用於處理事件請求的事件函數。更多函數類型介紹,詳情請參見函數類型

  • 地區限制

    DataWorks目前僅支援華東1(杭州)、華東2(上海)、華北2(北京)、華南1(深圳)、西南1(成都)、中國香港、新加坡、馬來西亞(吉隆坡)、印尼(雅加達)、德國(法蘭克福)、英國(倫敦)、美國(矽谷)、美國(維吉尼亞)地區的工作空間使用Function Compute功能。

步驟一:建立函數

  1. 登入Function Compute控制台,在頂部導覽列切換至目標地區。

  2. 在左側導覽列,單擊函數

  3. 函數頁面單擊建立函數

  4. 選擇事件函數並配置函數資訊。

    參數

    描述

    函數名稱

    輸入函數名稱。本文樣本為:send-mail-fc

    運行環境

    本文使用Python 3.9

    代碼上傳方式

    本文選擇使用範例程式碼並使用Hello, world! 樣本

    高級配置環境變量可根據實際情況進行設定。詳情可參見建立函數

  5. 單擊創建,完成函數建立,進入函數詳情的代碼頁面。

    頁面顯示 send-mail-fc 函數的代碼編輯頁面,運行環境為 Python 3.9,目前的版本為 LATEST,編輯器中已產生預設代碼模板。

  6. 編輯index.py,輸入商務邏輯代碼。本文以發送郵件為例,代碼如下:

    重要
    • 以下範例程式碼中的mail_hostmail_portmail_usernamemail_passwordmail_sendermail_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
  7. 單擊部署代碼按鈕。

  8. 單擊測試函數右側下拉式箭頭image,在彈出的菜單中單擊配置測試參數,輸入測試參數後單擊確定按鈕。

    建立新測試事件 頁簽下,事件模版 選擇 hello-world事件名稱 輸入 test-event

    事件內容輸入:

    {
        "msg": "This is a test message"
    }
  9. 單擊測試函數即可完成測試。

    頁面提示執行成功,在詳細資料地區的請求資訊頁簽中可查看請求內容,例如 {"msg": "This is a test message"}

  10. 檢查收件者的郵箱中是否收到郵件。

    說明

    某些電子郵件伺服器可能會將未知寄件者識別為垃圾郵件從而進行攔截,因此若您未在收件匣中找到測試郵件,則需到垃圾郵件中進行尋找。

步驟二:在DataWorks中建立並配置Function Compute節點

  1. 登入DataWorks控制台

  2. 單擊左側導覽列中的工作空间。進入工作空间列表頁面。

  3. 將頁面頂部導覽列的地區列表切換為步驟一:建立函數中指定的地區。

  4. 工作空间列表中單擊目標工作空間名稱,進入工作空間詳情頁面。若您在當前地區下無工作空間,則需建立一個工作空間,詳情可參見建立工作空間

  5. 單擊左側導覽列中的資料建模與開發下的数据开发,進入DataWorks資料開發頁面。

  6. 單擊目標業務流程名稱,在商務程序中,右擊通用,選擇新建節點 > 函數計算。在建立節點彈出框中輸入節點名稱並單擊確定按鈕,完成函數計算節點的建立。

  7. 設定Function Compute節點參數。

    參數

    描述

    選擇版本或別名

    選擇後續調用函數時所使用的服務版本或別名。預設版本為LATEST。本文選擇默認版本

    • 服務版本

      Function Compute提供服務等級的版本控制功能,支援您為自己的服務發布一個或多個版本。當發布版本時,Function Compute會為服務產生快照,包括服務的配置、服務內的函數代碼及函數配置,但不包括觸發器,並自動分配一個版本號碼與其關聯,以供後續使用。發布版本,詳情請參見發布版本

    • 版本別名

      Function Compute支援為服務的版本建立別名。別名用於指向特定版本,您可利用別名輕鬆實現發布、復原以及灰階發布等功能。別名無法脫離服務或版本單獨存在。使用別名訪問服務或函數時,Function Compute會將別名解析為其指向的版本,調用方無需瞭解別名指向的具體版本。建立別名,詳情請參見建立別名

    選擇函數

    選擇步驟一:建立函數中建立的函數。本文為:send-mail-fc。如需建立,詳情請參見管理函數

    說明

    DataWorks目前僅支援調用事件函數,不支援調用HTTP函數。因此,若要在DataWorks周期性調度處理事件函數,則在建立函數時,需要建立用於處理事件請求的事件函數。更多函數類型介紹,詳情請參見函數類型

    調用方式

    本文選擇同步。調用方式詳情可參見函數調用

    • 同步調用:該方式事件將直接觸發函數,Function Compute會運行該函數並等待響應,當函數調用完成後,Function Compute直接返回執行結果。

    • 非同步呼叫:該方式Function Compute會將事件請求先持久化後再立即返迴響應,而不是等待請求執行完成後才返迴響應。

      • 若函數存在耗時較長、資源消耗較大或易錯邏輯,可採用非同步呼叫,提升程式響應速度,更加可靠地應對突發流量。

      • 運行時間長度超過1小時的Function Compute任務,請使用非同步呼叫。

    變量

    調用函數的參數。本文樣本如下:

    {
        "msg": "This is a test message from dataworks!"
    }
  8. 可選:調試運行Function Compute節點。節點配置完成後,您可單擊運行表徵圖,指定任務啟動並執行資源群組並為代碼變數賦值常量進行調試運行,測試節點代碼邏輯是否正確。

  9. 配置節點的周期調度屬性。DataWorks提供的調度參數,可實現調度情境下代碼動態傳參。更多調度參數的配置,請參見調度參數支援的格式。更多調度屬性,請參見任務調度屬性配置概述

三、提交並發布節點

Function Compute節點需要提交發布至生產環境後,才會自動調度運行。

  1. 儲存並提交節點。

    單擊工具列中的儲存提交表徵圖,儲存並提交節點。提交節點時,請根據提示輸入變更描述,並根據需要選擇是否進行程式碼檢閱及煙霧測試 (Smoke Test)。

    說明
    • 您需在調度配置中設定節點的重跑屬性依賴的上游節點,才可以提交節點。

    • 開啟程式碼檢閱後,開發人員提交的節點代碼必須通過評審人員的審核才可發布,詳情請參見程式碼檢閱

    • 為保障調度節點任務執行符合預期,建議您在發布前對任務進行煙霧測試 (Smoke Test),詳情請參見煙霧測試 (Smoke Test)

  2. 可選:發布節點。

    如果您使用的是標準模式的工作空間,提交成功後,需單擊右上方的发布,發布節點。相關介紹請參見標準模式的工作空間發布任務

後續步驟

相關文檔

Function Compute節點