SendGrid のマーケティングキャンペーンの利用料を定期的に監視する必要があった。
ここでは、親ユーザーで発行したAPI KEYを使ってサブユーザーに成り代わってリクエストする方法を紹介する。
SendGridを親ユーザーのみで利用する場合の注意点
SendGridは、サブユーザーを使わずに親ユーザーのみで運用することができる。しかし以下の問題があるためサブユーザーを切って運用したほうが良い。
- IPアドレスがSPAMトラップなどに見舞われたとき、メールが届かなくなる
- IP Reputationが落ちてSendGrid側からユーザーを停止されると、メールが送れなくなる
IPアドレスがSPAMトラップなどに見舞われたとき、メールが届かなくなる
こちらについては、サブユーザーごとに利用するIPアドレスを分散して利用するで対処できる
IP Reputationが落ちてSendGrid側からユーザーを停止されると、メールが送れなくなる
IP Reputation とはメール配信の健全性を表す一つの指標。 80%以上だとGood
ユーザー停止のリスクを減らすには、サブユーザーごとにIPアドレスを分けてIP Reputationを分散させておく対処が効く。
親ユーザーはサブユーザーに成り代われるが、データはほとんど独立している
親ユーザーは「Switch User」(下図)を利用することで、サブユーザーとしてログインすることができる。親ユーザーとサブユーザーがほぼ切り離されていて、サブユーザーを新規に作成するとほとんどの情報は引き継がれない。
親ユーザーからサブユーザーの統計情報やマーケティングキャンペーンの情報を閲覧するには、一度サブユーザーとしてログインする必要がある。
親ユーザーで発行した API KEY でサブユーザーの情報を取得する
私は上述の問題点から、 SendGrid のサブユーザーは独立したチームや部署ごとに割り当てることをおすすめしている。一方で、サブユーザーごとの利用状況をモニタリングしたいという要求も出てくる。
親ユーザーで発行した API KEY を用いてサブユーザーごとの情報を取得したいと思って、 SendGrid のドキュメントを眺めてみた。
サブユーザの代理で要求を行う
on-behalf-ofヘッダを利用することで、親アカウントが特定サブユーザの代理で要求を発行できるようになります。この方法は、サブユーザの権限にスイッチすることなく、一括でサブユーザの設定を変更したり、管理したりする際に利用できます。このヘッダを利用する場合、シンプルに On-Behalf-Of: サブユーザのユーザ名 と指定するだけです。
SDK で成り代わる
REST API では on-behalf-of を使えばいい ということがわかった。 SDK でも対応していることを願って探してみると……。
SendGridAPIClientクラスの中に、impersonate_subuserというキーワード引数を見つけた。
以上をまとめてコードを書くと次のようになる。 これで sg
はサブユーザーとして振る舞うことができる
from sendgrid import SendGridAPIClient
import os
API_KEY = os.environ.get('SENDGRID_API_KEY')
subuser_username = 'SAMPLE_SUBUSER'
sg = SendGridAPIClient(API_KEY, impersonate_subuser=subuser_username)