주:

OCI Email Delivery Service와 OCI Functions, OCI Object Storage, OCI Vault 및 OCI Database를 PostgreSQL와 통합

소개

기업은 자동 알림, 애플리케이션 업데이트, 마케팅 캠페인 등 다양한 목적으로 효과적인 이메일 커뮤니케이션을 활용합니다. 이러한 요구를 충족하기 위해 Oracle Cloud Infrastructure(OCI)는 안전한 대용량 마케팅 및 트랜잭션 이메일을 전송할 수 있는 빠르고 안정적인 관리 솔루션을 제공하도록 설계된 강력한 이메일 딜리버리 서비스를 제공합니다.

이 사용지침서에서는 간소화된 이메일 전송을 위해 OCI 이메일 딜리버리 서비스가 어떻게 사용되는지, OCI Functions, OCI Vault, OCI Object Storage 및 OCI Database와 PostgreSQL의 원활하게 통합되어 이메일 디스패치 프로세스의 자동화 및 안정성을 개선하고, 신뢰할 수 있는 이메일 딜리버리 솔루션을 생성할 수 있는 유연한 플랫폼을 제공하는지 보여줍니다. 제공된 코드는 개발자가 특정 요구 사항에 따라 맞춤형 이메일 전송 파이프라인을 구축할 수 있는 출발점 역할을 합니다.

호출 시 OCI Functions 서비스를 사용하여 생성된 함수는 OCI Object Storage에서 전자메일 템플리트를 검색하고, PostgreSQL 데이터베이스를 사용하여 OCI 데이터베이스에 접속하여 수신자 전자메일 주소를 검색하고, 해당 모든 수신자에게 전자메일을 전송합니다.

목표

필요 조건

작업 1: OCI 전자메일 전송 서비스 설정

OCI 전자메일 전송 서비스를 구성하려면 OCI 전자메일 전송으로 전자메일을 전송하는 단계별 지침비디오: OCI에서 전자메일 전송 구성 방법을 참조하십시오.

구성을 완료한 후에는 OCI 사용자에 대해 승인된 전자메일 발신자 및 SMTP(Simple Mail Transfer Protocol) 인증서가 하나 이상 있어야 합니다.

작업 2: OCI 오브젝트 스토리지 버킷에서 전자메일 템플리트 업로드

전자메일 템플리트를 여기에서 다운로드하여 기존 버킷에 업로드합니다.

전송할 전자메일 템플리트가 포함된 버킷

작업 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 저장소에 암호 생성

사용할 민감한 값에 대한 암호(예: SMTP 사용자 이름 및 비밀번호(OCI Email Delivery 서비스에서 사용), OCI 데이터베이스(PostgreSQL 데이터베이스 사용자 이름 및 비밀번호 포함)를 저장소에 생성합니다. 이 암호는 나중에 OCI 함수에서 사용됩니다.

저장소 암호

작업 5: OCI 함수 설정

  1. 함수 생성. 자세한 내용은 함수: CLI를 사용하여 시작하기를 참조하십시오.

    주: 이 자습서에서는 Python 함수를 사용합니다.

    이 자습서에서는 응용 프로그램의 이름이 email-delivery-function이고 배치된 함수의 이름이 email_function입니다.

    애플리케이션 기능

  2. 원래 기본 함수가 설정된 후 함수 폴더에 다음 파일이 있습니다.

    • func.py: 사용자정의 Python 함수 코드를 배치합니다.
    • func.yaml: 함수에 대한 구성 데이터입니다.
    • requirements.txt: 함수 코드에 필요한 종속성을 나열합니다.
  3. 여기에서 함수 코드를 다운로드합니다. Python scriptfunc.py 파일의 코드를 대체합니다.

    func.py 스크립트의 작업 요약:

    • 전자메일 전송, JSON 데이터 작업, OCI 서비스 액세스, PostgreSQL 데이터베이스와 OCI 데이터베이스와의 상호 작용에 필요한 라이브러리를 임포트합니다.

    • 전자메일 전송(sendEmail) 및 OCI 저장소(decodeSecret)에 저장된 암호 디코딩 기능을 정의합니다.

    • 다음과 같은 기본 처리기 함수(handler)를 정의합니다.

      • 기능 컨텍스트에서 SMTP 자격 증명, SMTP 호스트, SMTP 포트 및 기타 구성 값을 검색합니다.

      • OCI Object Storage에서 전자메일 템플리트 콘텐츠를 검색합니다.

      • 수신 JSON 페이로드에서 발신자 정보 및 제목을 검색합니다.

      • OCI Vault에서 가져온 인증서를 사용하여 PostgreSQL 데이터베이스로 OCI 데이터베이스에 접속합니다.

      • 데이터베이스의 테이블에서 전자 메일 주소를 검색하는 질의를 실행합니다.

      • 검색된 전자 메일 주소를 반복하고 sendEmail 함수를 사용하여 전자 메일을 보냅니다.

      • 전자메일이 전송된 전자메일 주소를 나타내는 성공 메시지를 반환합니다.

    참고:

    • 스크립트의 host를 고유 OCI 데이터베이스로 OCI 데이터베이스 아래에 있는 PostgreSQL 데이터베이스 시스템 끝점으로 바꾸고 PostgreSQL 접속 섹션을 사용합니다. 또한 OCI Vault에서 암호를 다른 암호로 설정하거나 페이로드에서 가져올 수 있습니다.

    • func.py로 이름이 지정되지 않은 다른 파일에서 함수를 실행하려면 해당 파일을 함수 폴더에 배치하고 그에 따라 func.yaml 파일을 편집합니다.

  4. 새 Python 코드가 사용하는 추가 라이브러리가 포함되도록 requirements.txt 파일을 편집합니다.

    • oci: 함수가 OCI 함수에 배포될 때 OCI SDK(소프트웨어 개발 키트)가 함수의 런타임 환경에 설치되도록 합니다.

    • psycopg2-binary: 함수 코드가 PostgreSQL 데이터베이스를 사용하여 OCI 데이터베이스에 접속하고 조작할 수 있도록 허용합니다.

    $ cat requirements.txt
    fdk
    oci
    psycopg2-binary
    
  5. 다음 구성을 함수 컨텍스트에 추가합니다. 저장소의 OCID(Oracle Cloud 식별자) 및 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 전자메일 전송 서비스에서 승인된 발신자입니다.
    • 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를 참조하십시오.