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
AGENTS.mdとSkillsで始めるAIエージェント活用
sonoda_mj
2
190
Amazon Bedrock AgentCore ワークショップ JAWS UG TOHOKU / amazon-bedrock-agentcore-workshop-jawsug-tohoku-2026
gawa
9
620
[モダンアプリ勉強会]今更聞けないGit/GitHub入門
tsukuboshi
0
360
自律型AIエージェントは何を破壊するのか
kojira
0
150
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
170
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
130
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
370
「エンジニア進化論」2028年の開発完全自動化、エンジニアはどう進化するか
cyberagentdevelopers
PRO
4
4.3k
フロンティアAIのゲート化と地政学リスク
nagatsu
0
110
日本 Fintech 未来予測レポート 2027〜2028年(オリジナル版)
8maki
0
1.3k
攻撃者視点で考えるDetection Engineering
cryptopeg
0
710
Socrates × Looker 〜セマンティックレイヤーで進化するデータ分析エージェント〜
hanon52_
3
2k
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
220
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Odyssey Design
rkendrick25
PRO
2
690
Rails Girls Zürich Keynote
gr2m
96
14k
So, you think you're a good person
axbom
PRO
2
2.1k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
960
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
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!