このトピックでは、DataWorksのFunction Computeノードを使用して、function Computeで作成された関数を呼び出して電子メールを送信する方法について説明します。
背景情報
DataWorksでは、Function Computeノードを使用してFunction Computeサービスを呼び出すことができます。 Function Computeサービスのさまざまな機能のカスタム設定を実行し、DataWorksのFunction Computeノードを使用してサービスを呼び出すことができます。
前提条件
DataWorksが有効化されています。 詳細については、「DataWorksの有効化」をご参照ください。
Function Computeが有効化されています。 詳細については、「関数の迅速な作成」をご参照ください。
制限事項
機能の制限
DataWorksでは、イベント関数のみを呼び出すことができます。 DataWorksでイベント処理関数を定期的にスケジュールする場合は、HTTP関数ではなくイベント関数を作成して、function Computeでイベントリクエストを処理する必要があります。 その他の関数タイプについては、「関数タイプの選択」をご参照ください。
地域の制限
Function Computeノードによって提供される機能は、次のリージョンのワークスペースでのみ利用できます。中国 (杭州) 、中国 (上海) 、中国 (北京) 、中国 (深セン) 、中国 (成都) 、中国 (香港) 、シンガポール、マレーシア (クアラルンプール) 、インドネシア (ジャカルタ) 、ドイツ (フランクフルト) 、英国 (ロンドン) 、米国 (シリコンバレー) 、米国 (バージニア)。
ステップ1: 関数の作成
Function Computeコンソールにログインします。 上部のナビゲーションバーで、関数を作成するリージョンを選択します。
左側のナビゲーションウィンドウで、[関数] をクリックします。
[関数] ページで、[関数の作成] をクリックします。
[関数の作成] ページで、[イベント関数] を選択し、パラメーターを設定します。

パラメーター
説明
関数名
関数の名前。 この例では、このパラメーターを
send-mail-fcに設定します。ランタイム
この例では、[ランタイム] ドロップダウンリストから [Python 3.9] を選択します。
コードのアップロード方法
この例では、このパラメーターをサンプルコードの使用に設定し、サンプルコードの説明をHello、world! .
ビジネス要件に基づいて、[詳細設定] および [環境変数] セクションのパラメーターを設定します。 詳細については、「関数の管理」をご参照ください。
[作成] をクリックします。 関数が作成されます。 [関数の詳細] タブの [コード] サブタブが表示されます。

index.pyファイルを編集し、ビジネスロジックコードを記述します。 この例では、電子メールを送信するためのコードを記述します。重要ビジネス要件に基づいて、次のコードで
mail_host、mail_port、mail_username、mail_password、mail_sender、およびmail_receiversパラメーターを設定します。使用するメールアカウントに対して、簡易メール転送プロトコル (SMTP) 認証を有効にする必要があります。 一部の電子メールサービスプロバイダーは、既定でSMTP認証を有効にしません。 目的のメールアカウントでSMTP認証が有効になっているかどうかを確認する必要があります。 SMTP認証が有効になっていない場合は、この機能を有効にする必要があります。 たとえば、SMTP認証はデフォルトで163メールボックスに対して有効になっていません。
セキュリティの目的で、一部の電子メールサービスプロバイダは、第三者の電子メールクライアントからのログオンのための認証コードと同様の専用パスワードを使用することができる。 この場合、
mail_passwordをアカウントパスワードではなく認証コードに設定する必要があります。 たとえば、163メールボックスの認証コードが存在します。 サードパーティのクライアントを使用して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' ## The address of the email server. mail_port = '465'; ## The SMTP port of the email server. mail_username = 'sender_****@163.com' ## The logon username. mail_password = 'EWEL******KRU' ## The logon password. mail_sender = 'sender_****@163.com' ## The email address of the sender. mail_receivers = ['receiver_****@163.com'] ## The email address of the recipient. 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') ''' You can add code for reading email content here. ''' return mail_content[デプロイ] をクリックします。
[テスト機能] の横にある
アイコンをクリックし、[テストパラメーターの設定] を選択します。 [テストパラメーターの設定] パネルで、テストのパラメーターを設定し、[OK] をクリックします。 次のイベントコンテンツを入力します。
{ "msg": "This is a test message" }[Test Function] をクリックして、関数をテストします。

受信者のメールボックスでテストメールが受信されているかどうかを確認します。
説明一部の電子メールサーバーは、未知のユーザーによって送信された電子メールをスパム電子メールとして識別し、電子メールを傍受する場合があります。 テストメールが受信トレイに見つからない場合は、スパムフォルダでテストメールを検索できます。
手順2: DataWorksコンソールでのFunction Computeノードの作成と設定
DataWorks コンソールにログインします。
左側のナビゲーションウィンドウで、[ワークスペース] をクリックします。
上部のナビゲーションバーで、手順1: 関数の作成で指定したリージョンを選択します。
[ワークスペース] ページで、目的のワークスペースを見つけ、[ワークスペース名] /[表示名] 列でワークスペースの名前をクリックして、[ワークスペースの詳細] ページに移動します。 現在のリージョンで使用可能なワークスペースがない場合は、ワークスペースを作成します。 詳細については、「ワークスペースの作成」をご参照ください。
左側のナビゲーションウィンドウで、[データモデリングと開発] > [DataStudio] を選択して、[DataStudio] ページに移動します。
[スケジュール済みワークフロー] ペインで、目的のワークフローの名前をクリックします。 次に、[一般] を右クリックし、 を選択します。 [ノードの作成] ダイアログボックスで、[名前] パラメーターを設定し、[確認] をクリックします。 Function Computeノードが作成されました。
Function Computeノードの設定タブで、Function Computeノードのパラメーターを設定します。 下表に、各パラメーターを説明します。
パラメーター
説明
サービスの選択
手順1: 関数の作成で作成したサービスを選択します。 この例では、
send-mail-serviceを選択します。 サービスの作成方法については、「関数の迅速な作成」をご参照ください。バージョンまたはエイリアスの選択
その後の関数の呼び出しに使用するサービスのバージョンまたはエイリアスを選択します。 [デフォルトバージョン] を選択すると、Versionパラメーターが表示され、LATESTに固定されます。 この例では、[デフォルトバージョン] を選択します。
サービスバージョン
Function Computeは、サービスレベルのバージョン管理機能を提供します。これにより、サービスの1つ以上のバージョンをリリースできます。 バージョンは、サービス設定、サービスに属する機能のコードと設定などの情報を含むサービススナップショットに似ています。 バージョンにはトリガー情報が含まれていません。 バージョンをリリースすると、システムはサービスのスナップショットを生成し、将来使用するためにスナップショットに関連付けられたバージョン番号を割り当てます。 バージョンをリリースする方法の詳細については、「バージョンの管理」をご参照ください。
バージョンエイリアス
Function Computeでは、サービスバージョンのエイリアスを作成できます。 エイリアスは、サービスの特定のバージョンを指します。 エイリアスを使用して、バージョンリリース、ロールバック、またはカナリアリリースを簡単に実行できます。 エイリアスは、サービスまたはバージョンに依存します。 エイリアスを使用してサービスまたは関数にアクセスすると、function Computeはエイリアスをそのエイリアスが指すバージョンに解析します。 このように、インボーカは、エイリアスが指す特定のバージョンを知る必要がない。 エイリアスの作成方法については、「エイリアスの管理」をご参照ください。
関数の選択
ステップ1: 関数の作成で作成した関数を選択します。 この例では、
send-mail-fcを選択します。 関数の作成方法については、「関数の管理」をご参照ください。説明DataWorksでは、イベント関数のみを呼び出すことができます。 DataWorksでイベント処理関数を定期的にスケジュールする場合は、HTTP関数ではなくイベント関数を作成して、function Computeでイベントリクエストを処理する必要があります。 その他の関数タイプについては、「関数タイプの選択」をご参照ください。
呼び出しメソッド
この例では、[同期呼び出し] を選択します。 呼び出しメソッドの詳細については、「関数の呼び出し」をご参照ください。
同期呼び出し: 関数を同期して呼び出すと、イベントが関数を直接トリガーし、function Computeが関数を実行して応答を待ちます。 関数が呼び出されると、function Computeは関数の実行結果を返します。
非同期呼び出し: 関数を非同期で呼び出すと、function Computeは、リクエストの実行が完了した後にのみ応答を返すのではなく、リクエストが永続化された後にすぐに応答を返します。
関数に時間がかかる、リソースがかかる、またはエラーが発生しやすいロジックがある場合は、この方法を使用して、プログラムが効率的かつ信頼性の高い方法でトラフィックの急増に対応できるようにすることができます。
この方法は、実行時間が1時間を超えるFunction Computeタスクに使用することを推奨します。
変数
関数の値として変数に割り当てられるパラメーター。 例:
{ "msg": "This is a test message from dataworks!" }オプションです。 Function Computeノードをデバッグして実行します。 Function Computeノードを設定した後、設定タブの上部ツールバーの
アイコンをクリックして、ノードを実行するリソースグループを指定し、コード内の変数に定数を割り当てて、ノードをデバッグおよび実行し、ノードのコードロジックが正しいかどうかをテストできます。 ノードのスケジューリングプロパティを設定して、ノードを定期的にスケジュールおよび実行します。 DataWorksはスケジューリングパラメーターを提供します。これは、スケジューリングシナリオでノードコードで動的パラメーターの受け渡しを実装するために使用されます。 スケジューリングパラメーターの設定の詳細については、「スケジューリングパラメーターのサポートされている形式」をご参照ください。 スケジューリングプロパティの詳細については、「スケジュール」をご参照ください。
ステップ3: Function Computeノードをコミットしてデプロイする
Function Computeノードは、実稼働環境にコミットおよびデプロイされた後にのみ自動的にスケジュールできます。
Function Computeノードを保存してコミットします。
Function Computeノードの設定タブの上部ツールバーにある
および
アイコンをクリックして、Function Computeノードを保存およびコミットします。 ノードをコミットするときに、プロンプトに従って変更の説明を入力し、コードレビューとスモークテストを実行するかどうかを指定します。 オプションです。 Function Computeノードをデプロイします。
使用するワークスペースが標準モードの場合、コミット後にノードをデプロイするには、右上隅の [デプロイ] をクリックする必要があります。 詳細については、「基本モードのワークスペースと標準モードのワークスペースの違い」および「ノードのデプロイ」をご参照ください。
次のステップ
Function Computeノードを運用環境のOperation Centerにコミットしてデプロイした後、Operation CenterのノードでO&M操作を実行できます。 詳細については、「自動トリガーノードでの基本的なO&M操作の実行」をご参照ください。