Amazon-Simple-Email-Service-SES

Amazon SESのサプレッションリストからメールアドレスを一括追加と一括削除する

Amazon SES サプレッションリストからのメールアドレス一括追加と削除

こんにちは。SRE 課の栩野です。

Amazon SES に関する内容が続きますが、前回のサプレッションリストの操作に続いて
今回はサプレッションリストへメールアドレスを一括で追加と削除を行う方法を実践してみます。

一括での操作が出来れば、サプレッションリストの管理にかかる時間を大幅に短縮できます。

(Amazon SES に関する前回までのブログは以下になります。)
AMAZON SES でのメール送信ログを表示する
AMAZON SES のサプレッションリストについて

サプレッションリストの一括操作方法

今回実施する一括操作の流れとしては

  1. まずは一括で追加もしくは削除するメールアドレスのリストを作成します。
  2. 次にそのアドレスリストを S3 バケットにアップロードします。
  3. 最後に AWS CLI で sesv2 コマンドを使い、S3 にアップロードしたアドレスリストを
    読み込ませて、サプレッションリストに対しての一括操作を行います。

ではさっそくサプレッションリストに対して
一括でのメールアドレス追加と削除を実践していきます。

事前準備

以下の設定は完了済みの前提で進めていきます。

  • AWS CLI のセットアップ
  • IAM ユーザに SES と S3 の操作ポリシーアタッチ

S3 バケットの作成

一括操作で読み込ませるメールアドレスリストをアップロードするために
S3 バケットを作成していきます。

AWS CLI で S3 バケットの作成

以下のコマンドで S3 バケットを任意の名前で作成します。

// 例としてバケット名は「hogehoge-addresslist-bucket」にしています。
// この後の手順は任意のバケット名に置き換えて実施してください。
$ aws s3 mb s3://hogehoge-addresslist-bucket

作成したバケットに適切なポリシーのアタッチ

次に SES からオブジェクトが読み込めるよう JSON で記載したポリシーファイルを作成し
バケットにアタッチします。

// エディタを使って以下のjsonファイルを作成します。
// 「AWSACCOUNTID」の部分はご利用の AWS アカウント ID に置き換えてください。
$ vi bucketpolicy.json
----------------------------------------------
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowSESGet",
            "Effect": "Allow",
            "Principal": {
                "Service": "ses.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::hogehoge-addresslist-bucket/*",
            "Condition": {
                "StringEquals": {
                    "aws:Referer": "AWSACCOUNTID"
                }
            }
        }
    ]
}
----------------------------------------------

作成したポリシーファイルは以下のコマンドでバケットにアタッチします。

$ aws s3api put-bucket-policy --bucket hogehoge-addresslist-bucket --policy file://bucketpolicy.json

ポリシーファイルのアタッチ後はファイルを削除しておきます。

$ rm bucketpolicy.json

メールアドレスの一括追加

ここからサプレッションリストの一括操作に入っていきます。
まずはメールアドレスの一括追加を行っていきます。

追加するメールアドレスリストの作成

まずは追加するメールアドレスの一覧を記載したリストを作成します。
CSV もしくは JSON に対応していますが、CSV の方が記載量が少ないので今回は CSV で作成します。

記載方法の例は以下の通りになります。

// 縦にメールアドレスを記載していき、カンマの右側に
// 「BOUNCE」もしくは「COMPLAINT」どちらかの理由を記載します。
$ vi add_addresslist.csv
-----------------------
hogehoge@hogehoge.com,BOUNCE
hogehoge2@hogehoge.com,COMPLAINT
hogehoge3@hogehoge.com,BOUNCE
piyopiyo@piyopiyo.com,BOUNCE
piyopiyo2@piyopiyo.com,COMPLAINT
piyopiyo3@piyopiyo.com,BOUNCE
-----------------------

一括追加用メールアドレスリストのアップロード

作成しておいた S3 バケットに以下コマンドで一括追加用メールアドレスリストをアップロードします。

$ aws s3 cp add_addresslist.csv s3://hogehoge-addresslist-bucket/add_addresslist.csv

サプレッションリストへのメールアドレス一括追加

以下のコマンドでサプレッションリストにメールアドレスを一括で追加します。

※一括追加処理では、API コールあたり 100,000 の一括追加制限があります。
※AWS CLI のバージョンが古い場合、sesv2 create-import-job が存在しない場合が
 あるので、その時は最新バージョンにアップデートお願いします。

$ aws sesv2 create-import-job \
--import-destination "{\"SuppressionListDestination\": {\"SuppressionListImportAction\":\"PUT\"}}" \
--import-data-source "{\"S3Url\": \"s3://hogehoge-addresslist-bucket/add_addresslist.csv\",\"DataFormat\": \"CSV\"}"

追加されたことを確認

メールアドレスリストに記載したアドレスがサプレッションリストに正しく追加されていることを
以下コマンドで確認します。

$ aws sesv2 list-suppressed-destinations

正しく追加されていることが確認出来れば、一括追加は完了です。

S3 にアップロードした追加アドレスリストはもう利用しないので
以下コマンドで削除しておきます。

$ aws s3 rm s3://hogehoge-addresslist-bucket/add_addresslist.csv

メールアドレスの一括削除

次に、サプレッションリストからメールアドレスを一括で削除していきます。

今回はサプレッションリストに登録されたメールアドレス全てを一括で削除実施します。

現状のサプレッションリストの状態確認

サプレッションリストに登録されたメールアドレス全削除を実施する前に
現状の登録状態を確認します。

サプレッションリストの確認コマンドは一回で 1000 件までの表示のため
もし最下部に「NextToken」の文字列が出力されていれば 2 ページ以降が存在します。
「NextToken」が出力されている場合は、最後のページまで何ページあるのか確認してください。

// サプレッションリストの確認コマンド
$ aws sesv2 list-suppressed-destinations

// NextTokenが出力されている場合は以下コマンドで次のページを確認
$ aws sesv2 list-suppressed-destinations --next-token [トークン]

// 以下はNextTokenを使った例
$ aws sesv2 list-suppressed-destinations --next-token AYADeGuSc+gufTj6QUp/vrv8m3UAXwABABVhd3MtY3J5cHRvLXB1YmxpYy1rZXkAREE4aTRUTThCejM3NUd6NFVmYmwzQ1VUdmc0RVk2SUppWGFUcGRMUHV2d3hzSHhuWXF2cDhUaEpjeFJFWFBoN3EzUT09AAEAB2F3cy1rbXMAUGFybjphd3M6a21zOmFwLW5vcnRoZWFzdC0xOjYwNTAwMjc1NjAwNjprZXkvOTI1YzBiOGYtZThjNi00YmJiLTg0ODYtMjZjZjk0NTk0NjcwALgBAgEAeN331TLOm/nUJjZcb9OlLaEDRDvLouSjsisG/juIbyOAAeR0SEI8k201vtzeuZ8nNfMAAAB+MHwGCSqGSIb3DQEHBqBvMG0CAQAwaAYJKoZIhvcNAQcBMB4GCWCGSAFlAwQBLjARBAxAZJhEXG+lZxD3VPwCARCAO2Rbt7py7tvLZ+jHA0jQaZu9LEBJrMgIDPOuNMNYjbx0YCHRJIYy9gQNCjq96xg6WJDDP5SQhUuMOEboAgAAAAAMAAAQAAAAAAAAAAAAAAAAAJZp2TBFApZCG5kBzJJdbQr/////AAAAAQAAAAAAAAAAAAAAAQAAAbzh9QNDNc/cbkoBlYcdYkjd0+2XSH5SKMG7ajI3vwEzdCyZFH6bmBsF9QemtRvKT6Mx1exzz1VoWn3QsHChkNtn7ZIC5N4+NqCoVR+tnD1Arb4X2zioUPD7/dSsIP09hyal3TqQPDLVy532PinjZYn0Q35jr9HN+JNekmq11+KGPqm+ZuK+ajmDqFDl76JiEbJXLL8CPuQB41NtLLX3go2yzkGNNqi2OIoQpGQeqzy7EttD2Bs7XwWo9KIEUiHBYQ+3mSIynlU8SVTJZO+Esp/dpAoeuHDFSgtKgLkhgSUD6YrkDUnq5Iov8KrArNHGpmYUq9OFT0/HBNAhEFmX+LOlzwsq8s+n1i9pM7zZ2SCsZsH9oI4Oz4/0r/rClApRYhArsoNCNqC2/JtHo0SxqPpOiWfC078iYhj7+XXoUEgSWTOeSzDQjvYur/Fl968+0tCvGJJSCk4Xb3G04fkD/gJW1OS62V9M6T7vKsMvncI4OEybEkStHmazeWlZs20FC7darbyyvjiaDYWxUeS+mYKWsMSTrYO8PNVyrfh8/70pjwFE1RgmkS1Fj9rzXw9eoiQKIx5TYRy2zXesHRrnM0/5E1ux0HdrlQ8+w0kIAGcwZQIxAMzqGO5hsDmjPCRLBDuf/wIXkrwQkH/v5TDWbzEnkbZd+4WaIO21lYAEwob9qkIe+wIwKV3egXc+O7YF8oPf9jSPJMyjya+rNQ05UZ9hpRESL6mDtsbWf8b3ZaHjWpDOyN1x

削除するメールアドレスリストの作成

サプレッションリストのメールアドレスを全削除する場合は
以下の方法で全登録アドレスを抽出したリストを作成します。

一括追加時同様に CSV と JSON が可能ですが、CSV の方が記載が少ないため
CSV で進めていきます。

またメールアドレス抽出時の整形に jq コマンドを利用しているので
未インストールの場合は、「jq コマンド インストール」等で検索して準備お願いします。

// サプレッションリストからメールアドレスだけを抽出して
// 「delete_addresslist.csv」というCSVファイルを作成します。
$ aws sesv2 list-suppressed-destinations |jq -r '.SuppressedDestinationSummaries[].EmailAddress' >> ./delete_addresslist.csv

// 先ほど「NextToken」で次ページが存在した場合は、[トークン]を置き換えて
// ページ数の数だけ以下コマンドを実施します。
$ aws sesv2 list-suppressed-destinations --next-token [トークン] |jq -r '.SuppressedDestinationSummaries[].EmailAddress' >> ./delete_addresslist.csv

一括削除用メールアドレスリストのアップロード

抽出したメールアドレスの削除リストを S3 に以下コマンドでアップロードします。

$ aws s3 cp delete_addresslist.csv s3://hogehoge-addresslist-bucket/delete_addresslist.csv

S3 にアップロード出来れば、削除アドレスリストは削除しておきます。

$ rm ./delete_addresslist.csv

サプレッションリストへのメールアドレス一括削除

以下コマンドでサプレッションリストからメールアドレスを一括で削除実施します。

※一括削除処理では、API コールあたり 10,000 の一括削除制限があります。
※AWS CLI のバージョンが古い場合、sesv2 create-import-job が存在しない場合が
 あるので、その時は最新バージョンにアップデートお願いします。

$ aws sesv2 create-import-job \
--import-destination "{\"SuppressionListDestination\": {\"SuppressionListImportAction\":\"DELETE\"}}" \
--import-data-source "{\"S3Url\": \"s3://hogehoge-addresslist-bucket/delete_addresslist.csv\",\"DataFormat\": \"CSV\"}"

削除されたことを確認

サプレッションリストが空になっていることを以下コマンドで確認します。
※一括削除が反映さえるまで、多少タイムラグが生じることがあります。

$ aws sesv2 list-suppressed-destinations

サプレッションリストが空になっていることが確認出来れば、一括削除完了です。

S3 にアップロードした削除アドレスリストはもう利用しないので
以下コマンドで削除しておきます。

$ aws s3 rm s3://hogehoge-addresslist-bucket/delete_addresslist.csv

最後に

サプレッションリストへの一括追加と一括削除いかがでしたでしょうか。
手順にしてみたら、手軽に AWS CLI を使って実施することが出来ました。

一括操作が必要な際は、是非参考にしてください!

以上、ありがとうございました。

参考

アカウントレベルのサプレッションリストの使用

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA