郵便
 Computer >> コンピューター >  >> ソフトウェア >> 郵便

Go と AWS を使用して独自のサーバーレス サブスクライバー リストを作成する方法

この記事では、私が愛情を込めて作成したサブスクリプション サインアップ フローを、電子メールの確認を使用して作成した方法を紹介します。あなたにもできます。

動作を確認したい場合は、victoria.dev で私のメーリング リストに登録してください。

それでは、私がどのようにそれを構築したかをお見せしましょう.

簡易購読のご紹介

独自のメーリング リストまたはニュースレターの管理に関心がある場合は、独自の AWS リソースで Simple Subscribe をセットアップして、E メール アドレスを収集できます。

このオープンソース API は Go で記述され、AWS Lambda で実行されます。サイトへの訪問者はリストにサインアップできます。このリストは DynamoDB テーブルに保存され、いつでも照会したりエクスポートしたりできます。

誰かがサインアップすると、サブスクリプションの確認を求めるメールが届きます。これは「ダブル オプトイン」と呼ばれることもありますが、私は「検証済み」という用語を好みます。

Simple Subscribe はサーバーレス インフラストラクチャで動作し、AWS Lambda を使用してサブスクリプション、確認、およびサブスクリプション解除のリクエストを処理します。

GitHub で、完全にオープンソースのコードを含む Simple Subscribe プロジェクトを見つけることができます。コードをプルアップしてフォローすることをお勧めします!

この投稿では、各ビルドステップ、API の単一責任関数の背後にある思考プロセス、およびこのような AWS プロジェクトのセキュリティに関する考慮事項を共有します.

確認済みのサブスクリプション フローを構築する方法

検証されていない電子メールのサインアップ プロセスは簡単です。誰かが自分の電子メールをあなたのウェブサイトのボックスに入れると、その電子メールはあなたのデータベースに入ります。

ただし、ユーザー入力を信頼しないことについて何か教えたことがあるとすれば、検証されていないサインアップ プロセスという考え自体がハックルを引き起こすはずです。サンドイッチで揚げたスパムは素晴らしいものかもしれませんが、AWS の請求額を使い果たしていると面白くありません。

CAPTCHA やパズルなどの戦略を使用して人間であるかどうかを検証できますが、これらは潜在的な購読者を遠ざけるのに十分な摩擦を生み出す可能性があります.

代わりに、確認メールはアドレスの正確性とユーザー感覚の両方を確保するのに役立ちます。

電子メールの確認を伴うサブスクリプション フローを構築するには、各論理ステップを満たす単一の責任関数を作成します。それらは:

<オール>
  • メール アドレスを受け取り、記録します。
  • そのメール アドレスに関連付けられたトークンを生成し、記録します。
  • トークンを含む確認メールをそのメール アドレスに送信します。
  • メールアドレスとトークンの両方を含む確認リクエストを受け入れる
  • これらの各目標を達成するために、Simple Subscribe は公式の AWS SDK for Go を使用して DynamoDB および SES とやり取りします。

    各段階で、データがどのように見えるか、どのように保存するかを検討してください。これは、「誰かが 2 回購読しようとするとどうなるか」などの難問に対処するのに役立ちます。または、「誰かが所有していない電子メールを購読した場合はどうなるか?」などの脅威モデリングさえあります。

    準備?各ステップを分解して、魔法がどのように起こるか見てみましょう.

    購読

    サブスクリプション プロセスは、私のサイトのメイン ページにあるようなシンプルな Web フォームから始まります。属性 type="email" required を持つフォーム入力 ブラウザのおかげで、検証に役立ちます。送信されると、フォームは GET リクエストを Simple Subscribe サブスクリプション エンドポイントに送信します。

    Simple Subscribe は、目的のサブスクライバーの電子メールを含むクエリ文字列を使用して、このエンドポイントへの GET 要求を受け取ります。次に id を生成します 値と email の両方を追加します と id DynamoDB テーブルに追加します。

    テーブル項目は次のようになります:

    email confirm id timestamp
    [email protected] uuid-xxxxx 2020-11-01 00:27:39

    confirm ブール値を保持する列は、アイテムがまだ確認されていないサブスクリプション リクエストであることを示します。データベース内のメールアドレスを確認するには、正しい項目を見つけて confirm を変更する必要があります true へ .

    データを操作するときは、各操作の目的と、着信リクエストを既存のデータと比較する方法を検討してください。

    たとえば、誰かが同じ電子メール アドレスに対してその後の購読要求を行った場合、どのように処理しますか?

    「新しい id で新しい広告申込情報を作成してください」と言うかもしれません ."ただし、サーバーレス アプリケーション データベースが要求量によって支払われる場合、これは最善の戦略ではない可能性があります。

    DynamoDB の料金は、テーブルに読み書きするデータの量に依存するため、余分なデータの蓄積を避けることが有利です。

    そのことを念頭に置いて、新しい行を追加する代わりに更新を実行して、同じ電子メールのサブスクリプション要求を処理することが賢明です.

    Simple Subscribe は、実際には同じ関数を使用して、データベース アイテムを追加または更新します。これは通常、「更新または挿入」と呼ばれます。

    SQLite のようなデータベースでは、これは UPSERT 構文で実現されます。 DynamoDB の場合は、更新操作を使用します。 Go SDK の場合、構文は UpdateItem です。 .

    重複したサブスクリプション リクエストを受信すると、データベース アイテムは email で一致します。 それだけ。既存の項目が見つかった場合、その idtimestamp これにより、既存のデータベース レコードが更新され、テーブルが重複したリクエストであふれるのを回避できます。

    メール アドレスを確認する方法

    フォームを送信すると、対象の購読者は SES からリンクを含む電子メールを受け取ります。このリンクは email を使用して構築されています と id 次の形式を取ります:

    <BASE_URL><VERIFY_PATH>/[email protected]&id=uuid-xxxxx
    

    この設定では、id シークレット トークンとして機能する UUID です。これは、十分に複雑で推測しにくい照合可能な識別子を提供します。このアプローチにより、ユーザーが管理していない電子メール アドレスで購読することを思いとどまらせます。

    リンクにアクセスすると、検証エンドポイントに email でリクエストが送信されます と id クエリ文字列で。

    今回は、受信した email の両方を比較することが重要です。 と id 値をデータベース レコードに追加します。これにより、確認メールの受信者がリクエストを開始したことが確認されます。

    検証エンドポイントは、これらの値がデータベース内のアイテムと一致することを確認し、別の更新操作を実行して confirm を設定します。 true へ 、タイムスタンプを更新します。アイテムは次のようになります:

    email confirm id timestamp
    [email protected] 本当 uuid-xxxxx 2020-11-01 00:37:39

    メールのクエリ方法

    テーブルにクエリを実行して、メーリング リストを作成できるようになりました。メール送信ソリューションによっては、これを手動で、別の Lambda を使用して、またはコマンド ラインから行うこともできます。

    リクエストされたサブスクリプションのデータ以降 (confirm false です ) は、確認済みのサブスクリプションと一緒にテーブルに保存されます。送信先の電子メール アドレスをクエリするときに、このデータを区別することが重要です。 confirm のメールのみを返すようにする必要があります。 true です .

    メールアドレスの確認と同様に、Simple Subscribe は email を使用します。 と id メールアドレスの登録を解除するために、DynamoDB テーブルから項目を削除する関数への引数として。

    他のユーザーがリストから自分自身を削除できるようにするには、送信する各メールに email を含む URL を提供する必要があります。 と id 購読解除エンドポイントへのクエリ文字列として。次のようになります:

    <BASE_URL><UNSUBSCRIBE_PATH>/[email protected]&id=uuid-xxxxx
    

    リンクがクリックされると、クエリ文字列が購読解除エンドポイントに渡されます。提供された email の場合 と id データベース アイテムと一致すると、そのアイテムは削除されます。

    サブスクライバーが、人間の介入を必要とせずにリストから自動的に削除される方法を証明することは、あなたに委ねられたデータを処理するための倫理的で敬意に満ちた哲学の一部です。

    データの取り扱い方法

    他人のデータを受け入れると決めたら、それを管理するのはあなたの責任になります。これは、構築するすべてのものに適用されます。 Simple Subscribe の場合、データベースのセキュリティを維持し、定期的にテーブルを整理することを意味します。

    confirm のメール アドレスを保持しないようにするため false です 一定の時間枠を過ぎると、定期的に実行されるクリーニング機能を設定することをお勧めします。これは、手動、AWS Lambda 関数、またはコマンドラインを使用して実現できます。

    クリーンアップするには、confirm のデータベース アイテムを見つけます false です と timestamp 特定の時点よりも古いです。ユースケースとリクエスト量に応じて、クリーンアップを選択する頻度は異なります。

    また、ユースケースによっては、データのバックアップを保持したい場合があります。データの整合性が特に気になる場合は、DynamoDB のオンデマンド バックアップまたはポイント イン タイム リカバリを検討してください。

    独立したサブスクライバー ベースを構築する

    独自の購読者リストを作成することは、力を与える努力になる可能性があります!ニュースレターを開始したり、新しいコンテンツの通知を送信したり、仕事に関するコミュニティを作成したりする場合でも、私からあなたへのメールほど個人的または直接的なものはありません。

    今日からSimple Subscribeでサブスクライバーベースの構築を開始することをお勧めします.私のほとんどの作品と同様に、これはオープン ソースであり、個人的な使用は無料です。 GitHub リポジトリでコードに飛び込むか、SimpleSubscribe.org で詳細を確認してください。

    この投稿を楽しんでいただけましたら、ぜひお知らせください。 victoria.dev で私と一緒に学ぶ何千人もの人々に加わりましょう。このような他のプロジェクトについては、アクセスするか、RSS で購読してください。


    1. EmailJS を使用して Vue.js アプリケーションからメールを送信する方法

      数日前、私は単純な Vue プロジェクトに取り組むことに決め、作成した連絡先からメールを送信する必要がありました。誰かが私の連絡先フォームに記入するたびに、自動化された電子メールを受け取りたいと思っていました。 そこで私は検索を開始し、EmailJs にたどり着きました。この記事を書くことにしたのは、彼らのドキュメントが素晴らしく、とても使いやすいと感じたからです。また、それが誰かの助けになることを願っています:) 始めましょう! この記事では、EmailJS を使用して Vuejs アプリケーションからメールを送信する方法を紹介します。 続行する前に、Vue CLI を使用してミニ

    2. GitHub Marketplace の使用を開始する:アプリとツールを一覧表示する方法

      GitHub Marketplace アプリで開発者の GitHub ワークフローを改善したいですか? GitHub Marketplace は、開発者が無料および有料のツールを使用できる場所です。このプラットフォームは、アクションやアプリなどのさまざまな種類のツールを開発者に提供します。各ツールをプラットフォームに追加するには、さまざまな手順が必要です。この記事は、GitHub Marketplace の使用を開始する方法について説明しています。 パブリッシャー確認の申請 GitHub の右上隅にあるプロフィール写真をクリックし、[あなたの組織] をクリックします。 . [設定] をク