ノート:

OCI Email Delivery ServiceとOCI Functions、OCI Object Storage、OCI Vault、OCI DatabaseをPostgreSQLに統合

イントロダクション

企業は、自動通知、アプリケーションの更新、マーケティング・キャンペーンなど、さまざまな目的で効果的な電子メール通信を利用しています。これらのニーズを満たすために、Oracle Cloud Infrastructure(OCI)は、安全で大量のマーケティングおよびトランザクション電子メールを送信するための高速で信頼性の高い管理ソリューションを提供するように設計された、堅牢なEmail Deliveryサービスを提供します。

このチュートリアルでは、OCI Email Deliveryサービスが、OCI Functions、OCI Vault、OCI Object Storage、およびOCI DatabaseとPostgreSQLをシームレスに統合して、電子メール送信プロセスの自動化と信頼性を向上させ、信頼できる電子メール配信ソリューションを作成するための柔軟なプラットフォームを提供する方法を説明します。提供されているコードは、開発者が特定のニーズに応じてカスタマイズされた電子メール配信パイプラインを構築するための出発点となります。

OCI Functionsサービスを使用して作成されたファンクションを起動すると、OCI Object Storageから電子メール・テンプレートが取得され、PostgreSQLデータベースを使用してOCIデータベースに接続して受信者の電子メール・アドレスが取得され、これらすべての受信者に電子メールが送信されます。

目的

前提条件

タスク1: OCI Email Deliveryサービスの設定

OCI Email Deliveryサービスを構成するには、OCI Email Deliveryで電子メールを送信するステップバイステップの手順およびビデオ: OCIで電子メール配信を構成する方法を参照してください。

構成の完了後、OCIユーザーに対して少なくとも1つの承認済Eメール送信者およびSimple Mail Transfer Protocol (SMTP)資格証明が必要です。

タスク2: OCIオブジェクト・ストレージ・バケットでの電子メール・テンプレートのアップロード

電子メール・テンプレートを「電子メール・テンプレート」からダウンロードし、既存のバケットにアップロードします。

送信するEメールのテンプレートを含むバケット

タスク3: PostgreSQLデータベースを使用したOCIデータベースでの受信者アドレスの設定

  1. PostgreSQLデータベース・システムを使用してOCIデータベースに接続します。詳細は、PostgreSQL CLIを使用したPostgreSQLを使用したOCIデータベースへの接続を参照してください。

  2. PostgreSQLデータベースを使用して、OCIデータベースの受信者電子メール・アドレスの表を作成します。

    CREATE TABLE emails (
        address VARCHAR(255) PRIMARY KEY
    );
    
  3. 表に値を挿入します。

    INSERT INTO emails (address) VALUES
        ('email1@example.com'),
        ('email2@example.com'),
        ('email3@example.com');
    

タスク4: OCI Vaultでのシークレットの作成

使用する機密値(たとえば、SMTPユーザー名とパスワード(OCI Email Deliveryサービスで使用)、OCIデータベース(PostgreSQLデータベースのユーザー名とパスワード)のシークレットをボールトに作成します。これらのシークレットは、後でOCI Functionsで使用されます。

Vaultシークレット

タスク5: OCI関数の設定

  1. ファンクションを作成します。詳細は、「ファンクション: CLIを使用したスタート・ガイド」を参照してください。

    ノート:このチュートリアルでは、Python関数を使用します。

    このチュートリアルでは、アプリケーションはemail-delivery-functionという名前で、デプロイされるファンクションはemail_functionという名前です。

    アプリケーション機能

  2. 元の基本機能の設定後、ファンクション・フォルダに次のファイルがあります。

    • func.py:カスタムPython関数コードを配置します。
    • func.yaml:ファンクションの構成データ。
    • requirements.txt:ファンクション・コードに必要な依存関係をリストします。
  3. Pythonスクリプトからファンクション・コードをダウンロードし、func.pyファイルのコードを置き換えます。

    スクリプトfunc.pyの動作の概要:

    • 電子メールの送信、JSONデータの操作、OCIサービスへのアクセス、およびPostgreSQLデータベースを使用したOCIデータベースとの対話に必要なライブラリをインポートします。

    • OCI Vault (decodeSecret)に格納されている電子メール(sendEmail)およびデコード・シークレットを送信するための関数を定義します。

    • 次のことを行うメイン・ハンドラ関数(handler)を定義します。

      • SMTP資格証明、SMTPホスト、SMTPポートおよびその他の構成値をファンクション・コンテキストから取得します。

      • OCIオブジェクト・ストレージから電子メール・テンプレート・コンテンツを取得します。

      • 受信JSONペイロードから送信者情報および件名を取得します。

      • OCI Vaultから取得した資格証明を使用して、PostgreSQLデータベースを使用してOCIデータベースに接続します。

      • 問合せを実行して、データベース内の表から電子メール・アドレスを取得します。

      • 取得した電子メール・アドレスを反復し、sendEmail関数を使用して電子メールを送信します。

      • 電子メールが送信された電子メール・アドレスを示す成功メッセージを返します。

    ノート:

    • スクリプトのhostを、OCIデータベースの下にあるPostgreSQLデータベース・システム・エンドポイントで、PostgreSQL接続セクションで独自のOCIデータベースに置き換えます。また、OCI Vaultで別のシークレットとして設定したり、ペイロードから取得することもできます。

    • func.pyという名前ではない別のファイルからファンクションを実行する場合は、そのファイルをファンクションのフォルダに配置し、それに応じてfunc.yamlファイルを編集します。

  4. requirements.txtファイルを編集して、新しいPythonコードが依存する追加のライブラリを含めます:

    • OCI: OCIソフトウェア開発キット(SDK)がOCI Functionsにデプロイされるときに、ファンクションの実行時環境にインストールされていることを確認します。

    • psycopg2-binary: ファンクション・コードがPostgreSQLデータベースを使用してOCIデータベースに接続および操作できるようにします。

    $ cat requirements.txt
    fdk
    oci
    psycopg2-binary
    
  5. 次の構成を関数コンテキストに追加します。ボールトのOracle Cloud Identifier (OCID)とOCIデータベースのアドレスを、PostgreSQLデータベース・システム・エンドポイントに置き換えます。

    fn config function email-delivery-function email_function db-host "..postgres_endpoint_IP.."
    fn config function email-delivery-function email_function vault-ocid "ocid1.vault.oc1.eu-frankfurt-1..."
    fn config function email-delivery-function email_function smtp-host "smtp.email.eu-frankfurt-1.oci.oraclecloud.com"
    fn config function email-delivery-function email_function smtp-port 587
    fn config function email-delivery-function email_function smtp-password "xxxxxxxxxx"
    fn config function email-delivery-function email_function smtp-username "smtp_username"
    fn config function email-delivery-function email_function db-username "dbuser"
    fn config function email-delivery-function email_function db-password "xxxxxxxxxx"
    
  6. ファンクションをデプロイします。

    ノート: email-delivery-functionをアプリケーションの名前に置き換えます。

    fn -v deploy --app email-delivery-function
    
  7. ファンクションを呼び出します。この関数には、次を含むペイロードが必要です。

    • sender-email: OCI Email Deliveryサービスからの承認済送信者。
    • sender-name: 受信者に表示される送信者の名前。
    • subject: 電子メールの件名。

    必要に応じて、アプリケーション名と関数名を置き換えます。

    echo '{ "sender-email":"...approved_sender_address...", "sender-name":"Company Test", "subject":"test email" }' | fn invoke email-delivery-function email_function
    

    関数呼び出しは、次のメッセージを返します。

    Email successfully sent to ['email1@example.com', 'email2@example.com', 'email3@example.com']!
    

承認

その他の学習リソース

docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントは、Oracle Help Centerを参照してください。