AWS Step Functions로 한 번만 이메일 보내기
4963 단어 nodeserverlessawseventdriven
Step Functions 및 DynamoDB를 사용하여 여러 이메일을 보내지 않도록 하는 방법을 살펴보겠습니다. DynamoDB에서 조건식을 사용하여 이미 이메일을 처리했는지 확인합니다. 상태 머신의 기본 흐름은 다음과 같습니다.
동일한 입력으로 여러 번 실행하면 추가 이메일이 전송되지 않습니다. 멱등성이 있습니다.
해시 만들기
이메일의 짧은 문자열 표현을 만들어 데이터베이스에 저장하려고 합니다. 보낸 사람, 받는 사람, 제목 및 내용을 기반으로 고유한 문자열을 생성하는 해시 함수를 사용해 봅시다. 이는 데이터베이스의 고유 키로, 이전에 이메일을 처리했는지 여부를 확인하는 데 사용됩니다.
const crypto = require('crypto');
exports.handler = async (email) => {
const combined = `${email.from}${email.to}${email.subject}${email.content}`
const hash = crypto.createHash('sha256').update(combined).digest('base64');
return hash;
};
항목 저장
그런 다음 조건식을 사용하여 데이터베이스에 해시를 삽입하려고 시도합니다. 항목은 이미 존재하지 않아야 합니다. 항목이 이미 존재하는 경우(이미 처리했음을 나타냄) 이 오류를 포착하고 이메일을 보내지 않으려고 합니다. 존재하지 않는 경우 이메일 전송을 진행합니다.
이메일 보내기
이메일을 보내는 방법에는 여러 가지가 있습니다. 이메일 전송 API에 따라 구현하십시오. 이 단계는 한 번만 수행하려는 거의 모든 작업으로 대체할 수 있습니다. 예를 들어 결제 및 주문.
exports.handler = async (email) => {
// TODO implement send email
return "sent email";
};
이메일이 이전에 처리되지 않은 경우 실행은 다음과 같아야 합니다.
이메일이 이미 처리되었습니다.
ConditionalCheckFailedException
를 잡고 Step Functions에서 통과 상태를 사용합니다. 이번에는 실제로 이메일을 보내지 않았더라도 성공 상태로 끝나는 것이 중요합니다. 이는 멱등 API의 특성입니다. 다른 모든 오류에는 실패 상태를 사용하십시오.이메일이 이미 전송된 경우 실행은 다음과 같아야 합니다.
결론
그게 다야! 상태 시스템에 대한 정의는 여기에서 확인할 수 있습니다. https://gist.github.com/danielfyhr/4144dba260cc2bce1509d12cfd998664
표준 워크플로는 각 워크플로 단계를 정확히 한 번 실행하도록 보장합니다. https://aws.amazon.com/step-functions/faqs/
Reference
이 문제에 관하여(AWS Step Functions로 한 번만 이메일 보내기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/danielfy/sending-emails-only-once-with-aws-step-functions-35il텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)