Amazon SES 전송 결과를 DynamoDB에 저장하는 Lambda 함수

이 기사는 AWS Lambda 및 Serverless #2 Advent Calendar 2019의 24 일째 기사입니다.

Introduction



시스템에서 메일을 배달하는 경우 Bounce 또는 Complaint가 된 메일 주소에 대한 조치가 필요합니다.
Amazon SES의 경우 Sandbox에서 Production에서 사용할 때 어떤 프로세스를 구현하는지 신청해야 합니다.

AWS 공식에서는 다음과 같은 지식이 소개되어 있습니다.
How do I create an AWS Lambda function to store Amazon SNS notification contents for Amazon SES to an Amazon DynamoDB database?

개요로서는, 다음과 같은 처리가 됩니다.
1. 이메일 반송, 불만, 배달 등을 Amazon SNS에서 통지하도록 설정
2. SNS에서 알림을 받고 Lambda 실행
3. Lambda 처리로 DynamoDB에 저장

이번에는 위의 기사를 SAM으로 구현한 것을 소개합니다.

리포지토리



SAM에서 배포할 수 있는 항목을 위 리포지토리에 게시합니다.
런타임은 Python3.7

설정 방법



1. 알림에 사용할 SNS 만들기


$ aws sns create-topic --name ses-messages --region us-east-1

※ 이때 Amazon SES와 동일한 리전 내에서 SNS를 생성해야 합니다.

2. SES 설정에서 반송, 불만, 배달을 알리는 SNS 설정



bounces, complaints, deliveries에 대한 알림을 받기 위한 SNS로서,
1. 에서 만든 SNS를 설정합니다.



3. 전송 결과를 저장하는 DynamoDB 만들기



DynamoDB의 스키마를 정의한 json 파일을 두고 있습니다.
$ aws dynamodb create-table --cli-input-json file://dynamodb_table.json

※ 위에서 작성한 DynamoDB의 테이블은 간이적인 것입니다. GSI 설정, READ/WRITE Capacity 설정 등은 운용에 맞춰 필요합니다.

4. Lambda 함수 배포



환경 변수
  • S3_BUCKETSAM 배포를위한 S3 버킷
  • TABLE_SES_NOTIFICATIONS3.에서 만든 DynamoDB 테이블 이름
  • SNS_TOPIC_ARN created sns topic
    2.에서 만든 SNS ARN

  • 각 환경 변수를 설정하여 배포가 완료되었습니다.
    $ S3_BUCKET=sam-app-artifacts \
    TABLE_SES_NOTIFICATIONS=SESNotifications \
    SNS_TOPIC_ARN=arn:aws:sns:us-east-1:xxx:ses-messages \
    make deploy
    

    메일 전송 결과



    다음과 같이 전송할 때마다 DynamoDB에 저장됩니다.



    그리고는 이 테이블을 사용해, DynamoDB Triggers나 다른 배치 처리를 써 각각의 처리를 실시합니다.
    이제 Bounce, Complaint 등에 대처할 수 있습니다.

    Lambda 함수로 처리



    특히 손이 굳은 처리는 하지 않습니다.
    자주 있는 SNS로부터의 통지 내용을 파스 해 보존하는 형태입니다.

    Bounce, Complaint와 같은 각 시나리오에서 테스트를 원한다면 다음 주소를 사용할 수 있습니다.
    이것을 사용하면 디버깅도 원활하게 할 수 있습니다.
    htps : // / cs. 아 ws. 아마존. 이 m/그럼 _jp/세 s/아 st/로 HTML

    좋은 웹페이지 즐겨찾기