目次
Amazon SES サプレッションリストからのメールアドレス一括追加と削除
こんにちは。SRE 課の栩野です。
Amazon SES に関する内容が続きますが、前回のサプレッションリストの操作に続いて
今回はサプレッションリストへメールアドレスを一括で追加と削除を行う方法を実践してみます。
一括での操作が出来れば、サプレッションリストの管理にかかる時間を大幅に短縮できます。
(Amazon SES に関する前回までのブログは以下になります。)
AMAZON SES でのメール送信ログを表示する
AMAZON SES のサプレッションリストについて
サプレッションリストの一括操作方法
今回実施する一括操作の流れとしては
- まずは一括で追加もしくは削除するメールアドレスのリストを作成します。
- 次にそのアドレスリストを S3 バケットにアップロードします。
- 最後に 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 を使って実施することが出来ました。
一括操作が必要な際は、是非参考にしてください!
以上、ありがとうございました。
参考
運用サービス課 課長
運用・監視の設計から導入まで、運用サービスを担当してます。
運用監視やセキュリティ関連の話題に興味があるので、そのあたりのブログを多めで投稿していきたいと思ってます。
LINK
クラウドベリージャム:プロフィールページ