ノート:
- このチュートリアルでは、Oracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructureの資格証明、テナンシおよびコンパートメントに例の値を使用します。演習を終える際は、これらの値をクラウド環境に固有の値に置き換えてください。
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データベースに接続して受信者の電子メール・アドレスが取得され、これらすべての受信者に電子メールが送信されます。
目的
-
OCI Email DeliveryサービスとOCI Functionsを統合します。
-
OCI Vaultを利用して、資格証明と機密情報を安全に管理します。
-
パーソナライズされた電子メール・ディスパッチのために、PostgreSQLデータベースを使用してOCIデータベースから受信者アドレスを取得します。
-
カスタマイズ可能なコンテンツのために、OCI Object Storageから電子メール・テンプレートを動的に取得します。
前提条件
-
Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)で許可されているOCIテナンシおよびポリシーへのアクセス。
-
OCIリソースへのアクセス- OCI Email Delivery、OCI Functions、OCI Vault、OCI Object Storageサービス。
-
既存のOCI Object Storageバケット、OCI Vault、PostgreSQLデータベース・システムを含むOCI Database。
タスク1: OCI Email Deliveryサービスの設定
OCI Email Deliveryサービスを構成するには、OCI Email Deliveryで電子メールを送信するステップバイステップの手順およびビデオ: OCIで電子メール配信を構成する方法を参照してください。
構成の完了後、OCIユーザーに対して少なくとも1つの承認済Eメール送信者およびSimple Mail Transfer Protocol (SMTP)資格証明が必要です。
タスク2: OCIオブジェクト・ストレージ・バケットでの電子メール・テンプレートのアップロード
電子メール・テンプレートを「電子メール・テンプレート」からダウンロードし、既存のバケットにアップロードします。
タスク3: PostgreSQLデータベースを使用したOCIデータベースでの受信者アドレスの設定
-
PostgreSQLデータベース・システムを使用してOCIデータベースに接続します。詳細は、PostgreSQL CLIを使用したPostgreSQLを使用したOCIデータベースへの接続を参照してください。
-
PostgreSQLデータベースを使用して、OCIデータベースの受信者電子メール・アドレスの表を作成します。
CREATE TABLE emails ( address VARCHAR(255) PRIMARY KEY );
-
表に値を挿入します。
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で使用されます。
タスク5: OCI関数の設定
-
ファンクションを作成します。詳細は、「ファンクション: CLIを使用したスタート・ガイド」を参照してください。
ノート:このチュートリアルでは、Python関数を使用します。
このチュートリアルでは、アプリケーションは
email-delivery-function
という名前で、デプロイされるファンクションはemail_function
という名前です。 -
元の基本機能の設定後、ファンクション・フォルダに次のファイルがあります。
func.py:
カスタムPython関数コードを配置します。func.yaml:
ファンクションの構成データ。requirements.txt:
ファンクション・コードに必要な依存関係をリストします。
-
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
ファイルを編集します。
-
-
requirements.txt
ファイルを編集して、新しいPythonコードが依存する追加のライブラリを含めます:-
OCI
: OCIソフトウェア開発キット(SDK)がOCI Functionsにデプロイされるときに、ファンクションの実行時環境にインストールされていることを確認します。 -
psycopg2-binary
: ファンクション・コードがPostgreSQLデータベースを使用してOCIデータベースに接続および操作できるようにします。
$ cat requirements.txt fdk oci psycopg2-binary
-
-
次の構成を関数コンテキストに追加します。ボールトの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"
-
ファンクションをデプロイします。
ノート:
email-delivery-function
をアプリケーションの名前に置き換えます。fn -v deploy --app email-delivery-function
-
ファンクションを呼び出します。この関数には、次を含むペイロードが必要です。
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']!
関連リンク
承認
- 著者 - Adina Nicolescu (シニア・クラウド・エンジニア)
その他の学習リソース
docs.oracle.com/learnの他のラボをご覧いただくか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントは、Oracle Help Centerを参照してください。
Integrate OCI Email Delivery Service with OCI Functions, OCI Object Storage, OCI Vault, and OCI Database with PostgreSQL
F96466-01
April 2024