Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
aws-ses
Search
tannai
October 16, 2014
Technology
230
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
aws-ses
tannai
October 16, 2014
More Decks by tannai
See All by tannai
redash patche at dmm
yuukigoodman
0
760
akibago-2018-10-30
yuukigoodman
0
84
serverless-design-and-streaming-date-processing-service
yuukigoodman
0
1k
alexa-changes-development-process
yuukigoodman
0
1.6k
VUIとAlexaによるちょっと未来の体験の話2
yuukigoodman
0
900
regrowth2016alexa
yuukigoodman
0
1.3k
Rails App Deployment with CodeDeploy
yuukigoodman
0
1.6k
cognito-userpools-in-production
yuukigoodman
4
8.8k
aws-lambda-in-practice
yuukigoodman
2
2.1k
Other Decks in Technology
See All in Technology
AI Engineering Summit Tokyo 2026 AIの前に、やることがある 〜医療データ企業の4フェーズ〜
dtaniwaki
0
2.5k
EventBridge Connection
_kensh
5
690
DevOps Agentで始めるAWS運用 〜フロンティアエージェントが変える運用の現場〜
nyankotaro
1
380
フロンティアAIのゲート化と地政学リスク
nagatsu
0
110
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.9k
あなたの AI ワークスペースに、 専門コーダーを連れてくる - Amazon Quick Desktop 最新情報
kawaji_scratch
1
130
"何を作るか"を任される エンジニアは、どう育つのか
yutaokafuji
1
580
AIっぽい文章を採点して人間らしく直すアプリを作ってみた
yama3133
2
120
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2.1k
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
0
1.5k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.9k
スキルと MCP ツール、責務をどう分けるか? AI が迷わないインターフェース設計の戦略
cdataj
1
920
Featured
See All Featured
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
480
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
How STYLIGHT went responsive
nonsquared
100
6.2k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Google's AI Overviews - The New Search
badams
0
1k
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
sira's awesome portfolio website redesign presentation
elsirapls
0
280
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
360
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
230
Transcript
AWSのSimpleな話(仮) 社内勉強会 2014/10/16 @saisa6153
近況報告
引っ越しました 荏原中延 → 北品川
アルトサックス始めました 朝に品川埠頭で吹いています
明日で24歳です 危うく深夜作業で歳を重ねるところだった
本題
メールを送りたい
でもMTAは何かアレ 主に運用面
None
None
None
ドメイン/メアドの設定 • 送信にあたり、ドメイン所有権を証明する ◦ 指定のTXTレコードを設定 ◦ TTLが切れ次第確認される ◦ SPFに相当(?) •
同時にDKIM認証を設定 ◦ 指定のCNAMEレコードを設定 ◦ 必須ではないが行ったほうが良い ◦ ここらへんはRoute53なら2クリックなので良い • Sandbox環境では送信先メアドに制限 ◦ コンソールから設定したverifiedなものに制限 ◦ Production移行時に申請すると制限解除
SPF / DKIM • SPF(Sender Policy Framework) ◦ 送信元IPに紐づく認証 ◦
送信元の情報をDNSで公開 • DKIM(Domain Keys Identified Mail) ◦ 送信元による署名に基づく認証 ◦ メールに署名し、公開鍵をDNSで公開 • オンプレなら面倒だけどSESは超簡単 • 詳しくはAWS Black Belt Tech
SMTP Endpoint用IAM • SESのコンソールから作成する • 開発段階ではARNを広く取る ◦ “ses:*”
最初の一歩 >>> import boto.ses >>> conn = boto.ses.connect_to_region( ... 'us-east-1',
... aws_access_key_id='XXXXXXXXXXXXXXXXXXXXX', ... aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXX') >>> conn SESConnection:email.us-east-1.amazonaws.com
最初の一歩 >>> conn.list_verified_email_addresses() {'ListVerifiedEmailAddressesResponse': { 'ResponseMetadata': { 'RequestId': 'XXXX-YYYY-ZZZZ-AAAA’}, 'ListVerifiedEmailAddressesResult':
{ 'VerifiedEmailAddresses': ['
[email protected]
']}}} >>> conn.send_email( ... ‘
[email protected]
', ... 'Testmail subject', ... 'Here is body', ... ['
[email protected]
']) {'SendEmailResponse': { 'ResponseMetadata': { 'RequestId': 'XXXX-YYYY-ZZZZ-AAAA'}, 'SendEmailResult':{ 'MessageId': '0000000000-11111111111111-22222222222-333333333'}}}
Sender • 一斉送信は非同期に並列処理したい • workerをガッツリ立てていく戦略 • 同AZ内のSession用RedisをBrokerに利用 • 最初に送信対象リストをDynamoDBに作成 ◦
送信中にAZ障害が起きてもfailover先でリトライ可能 • 送信ステートをDynamoDBに保存 ◦ 送信中: workerが送信に着手 ◦ 送信完了: workerが送信を完了した
Bouncer • 正月など特殊な場合はBounceの増加が懸念さ れる • Sender同様、非同期workerを並列に • SQSの有効期限(24h)で全てDequeueするた め並列度を適宜上げる •
DynamoDBにBounceアドレスを記録しMySQL のカウントを更新する • 複数回Hard Bounceするなら削除する
None
DynamoDB • Multi-AZでリトライを可能にしつつworkerを並 列させるために必要 • メール送信時はstateのUPDATEが走るため Strong Consistency • Bounce処理時はPUTだけなのでEventual
Consistency • 良い感じに2iが必要(多分) • テーブルは使い捨て(DROPもするか?) ◦ UPDATEコストの方が高いっぽい ◦ UUIDかDATETIMEでテーブル作れば良いのでは
SES / SNS / SQS • 超シンプル!! ◦ Simple Email
Service ◦ Simple Notification Service ◦ Simple Queue Service • Bounceが発生したら ◦ SESがBounceを検知 ◦ SESがSNSを発生 ◦ SNSがSQSへEnqueue
None
None
おしまい Happy Sending!