이메일 알림 구성

Cloud Composer 1 | Cloud Composer 2

이 페이지에서는 Cloud Composer 환경에 SMTP 서비스를 구성하는 방법을 설명합니다.

시작하기 전에

비공개 IP용으로 Cloud Composer 환경이 구성된 경우, 외부 이메일 서비스를 위한 API 엔드포인트 연결이 되어 있어야 합니다(예: https://api.sendgrid.com 또는 원하는 SMTP 서버).

SendGrid 이메일 서비스 구성

알림을 받으려면 SendGrid 이메일 서비스를 통해 이메일을 보내도록 환경 변수를 구성하세요.

SendGrid로 가입

아직 가입하지 않았으면 Google Cloud 콘솔에서 SendGrid에 가입하고, '제공업체에서 관리'를 클릭하여 SendGrid 도메인으로 이동하고, '설정'을 클릭하여 사용자 이름을 검색하고 API 키를 만듭니다. Google Cloud 개발자는 이메일을 월간 12,000개까지 무료로 사용할 수 있습니다.

SendGrid Email API로 이동

변수 구성

SendGrid는 API 키와 발신 이메일 주소를 사용하여 메일을 전송합니다. 이 정보는 다음 옵션 중 하나를 사용하여 제공할 수 있습니다.

  • (권장사항) Secret Manager에 값을 저장합니다.

  • Airflow에 값을 저장합니다.

Secret Manager에 값 저장

Secret Manager에 값을 저장하려면 다음 안내를 따르세요.

  1. apache-airflow-providers-sendgrid PyPI 패키지를 설치합니다.

  2. 환경에 Secret Manager를 구성합니다. 보안 비밀 백엔드에 대한 권한 및 Airflow 구성 옵션을 설정해야 합니다.

  3. 다음 Airflow 구성 옵션을 재정의하세요.

    섹션
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  4. 이름이 airflow-connections-sendgrid_default인 SendGrid 연결의 보안 비밀을 만듭니다. 보안 비밀 값을 연결 URI로 설정합니다. 예를 들면 다음과 같습니다.

    sendgrid://<username>:<sendgrid_api_key>@smtp.sendgrid.net:587
    

    Secret Manager에서 연결을 저장하는 방법에 대한 자세한 내용은 Airflow 연결 관리를 참조하세요.

  5. SendGrid의 이메일 주소를 구성합니다.

    • (Airflow 2.2.4 이상 버전) 보안 비밀을 통해 이메일 주소를 설정할 수는 없습니다. 대신 다음 Airflow 구성 옵션을 재정의하세요.

      섹션
      email from_email 발신 이메일 주소입니다(예: noreply@example.com).
    • (Airflow 버전 2.1.4~2.1.3) 사용자 환경에 다음 환경 변수를 설정합니다.

      이름
      SENDGRID_MAIL_FROM 발신 이메일 주소입니다(예: noreply@example.com).

Airflow에 값 저장

  1. 다음 Airflow 구성 옵션을 재정의하세요.

    섹션
    email email_conn_id sendgrid_default
    email email_backend airflow.providers.sendgrid.utils.emailer.send_email
  2. Airflow에서 sendgrid_default라는 연결을 구성합니다. 연결 URI에 SendGrid API 키를 지정합니다. 예를 들면 다음과 같습니다.

    gcloud composer environments run ENVIRONMENT_NAME \
      --location LOCATION \
      connections add -- \
      --conn-uri "sendgrid://USERNAME:SENDGRID_API_KEY@smtp.sendgrid.net:587" \
      sendgrid_default
    

    다음을 바꿉니다.

    • ENVIRONMENT_NAME: 환경의 이름
    • LOCATION: 환경이 위치한 리전입니다.
    • USERNAME: SendGrid 사용자 이름입니다.
    • SENDGRID_API_KEY: SendGrid API 키입니다.
  3. SendGrid의 이메일 주소를 구성합니다.

    • (Airflow 2.2.4 이상 버전) Airflow 구성 옵션을 재정의합니다.

      섹션
      email from_email 발신 이메일 주소입니다(예: noreply@example.com).
    • (Airflow 버전 2.1.4~2.1.3) 사용자 환경에 다음 환경 변수를 설정합니다.

      이름
      SENDGRID_MAIL_FROM 발신 이메일 주소입니다(예: noreply@example.com).

SendGrid 구성 테스트

SendGrid 구성을 테스트하려면 다음 안내를 따르세요.

  1. EmailOperator를 사용하는 테스트 DAG를 만듭니다. 예를 들면 다음과 같습니다.

import datetime

import airflow
from airflow.operators.email import EmailOperator

with airflow.DAG(
    "composer_sample_sendgrid",
    start_date=datetime.datetime(2022, 1, 1),
) as dag:
    task_email = EmailOperator(
        task_id="send-email",
        conn_id="sendgrid_default",
        # You can specify more than one recipient with a list.
        to="user@example.com",
        subject="EmailOperator test for SendGrid",
        html_content="This is a test message sent through SendGrid.",
        dag=dag,
    )
  1. 환경에 DAG를 업로드하고 태스크가 성공하는지 확인합니다.
  2. SendGrid 사용자 인증 정보를 사용하여 SendGrid에 로그인합니다.
  3. SendGrid UI에서 활동 페이지로 이동합니다.
  4. 목록에서 이메일을 검색합니다. SendGrid가 이메일을 처리하고 전달했다는 메시지가 표시되어야 합니다.
  5. 이메일 처리 및 전달이 완료되지 않은 경우 다음을 수행합니다.

    • SendGrid 구성을 확인합니다.
    • Secret Manager 백엔드를 사용 설정했는지 확인합니다. 추가 권한을 부여하고 Airflow 구성 옵션에 재정의를 설정했는지 확인합니다.
    • 이메일 클라이언트의 스팸 필터를 확인합니다.

타사 SMTP 서비스 구성

타사 SMTP 서비스를 통해 이메일을 전송하려면 email_backend Airflow 구성 옵션을 재정의하고 다른 SMTP 관련 매개변수를 구성합니다.

제3자 SMTP 서비스를 구성하려면 다음 Airflow 구성 옵션을 재정의합니다.

섹션
email email_backend airflow.utils.email.send_email_smtp
smtp smtp_host SMTP 서버의 호스트 이름
smtp smtp_user SMTP 서버의 사용자 이름
smtp smtp_port SMTP 서버의 포트. 포트 25를 사용할 수 없습니다. 표준 SMTP 포트 465 및 587과 같은 다른 포트를 사용할 수 있습니다.
smtp smtp_password smtp_password을 통한 비밀번호 설정은 지원되지 않습니다. SMTP 비밀번호를 설정하려면 SMTP 비밀번호 구성에 제공된 안내를 따르세요.
smtp smtp_mail_from 발신 이메일 주소입니다(예: noreply-composer@).
smtp smtp_starttls 보안 강화를 위해 True로 설정합니다.
smtp smtp_ssl 보안 강화를 위해 True로 설정합니다.

타사 SMTP 서비스에 대한 SMTP 비밀번호 구성

SMTP 비밀번호를 Airflow 구성 파일에 일반 텍스트로 보관하는 것은 보안에 좋지 않습니다. 따라서 Cloud Composer는 이 메서드를 지원하지 않습니다. 그 대신 SMTP 비밀번호 구성을 위해 다른 두 메서드를 사용할 수 있습니다.

명령어를 사용하여 SMTP 비밀번호 검색

구성 재정의를 사용하여 SMTP 비밀번호를 가져오는 명령어를 지정할 수 있습니다. SMTP 서비스와 통신할 때 Airflow는 이 명령어를 사용하여 비밀번호의 값을 가져옵니다. 파이프 및 리디렉션과 같은 bash 연산자 없이 단일 명령어를 지정합니다.

이 메서드를 사용하려면 다음 Airflow 구성 옵션을 재정의합니다.

섹션
smtp smtp_password_cmd SMTP 비밀번호를 반환하는 명령어를 지정합니다.

Secret Manager에 저장된 보안 비밀을 사용하여 SMTP 비밀번호 검색

Secret Manager를 Airflow 보안 비밀 백엔드로 구성할 수 있습니다.

Composer 환경에 대해 Secret Manager를 구성한 다음에는 SMTP 비밀번호를 Secret Manager에 저장할 수 있습니다.

  1. 새 보안 비밀을 만듭니다.

    echo -n "SMTP_PASSWORD" | gcloud beta secrets create \
      airflow-config-smtp-password \
      --data-file=- \
      --replication-policy=automatic
    

    SMTP_PASSWORD를 SMTP 비밀번호로 바꿉니다.

  2. Secret Manager에서 SMTP 비밀번호를 가져오도록 Airflow를 구성합니다. 이렇게 하려면 다음 Airflow 구성 옵션을 재정의합니다.

    섹션
    smtp smtp_password_secret smtp-password

다음 단계