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
NextEngineクラウドジャーニー ~メールシステムのクラウド移行~ / AWS Dev...
Search
na_it_o
October 20, 2020
Technology
0
110
NextEngineクラウドジャーニー ~メールシステムのクラウド移行~ / AWS Dev Day Online Japan 2020
AWS Dev Day Online Japan 2020で発表したスライド
https://aws.amazon.com/jp/about-aws/events/2020/devday/
na_it_o
October 20, 2020
Tweet
Share
More Decks by na_it_o
See All by na_it_o
PHPコンテナのマルチステージビルドとキャッシュ戦略 / PHPerKaigi 2022
na_it_o
1
2.4k
Other Decks in Technology
See All in Technology
Running JavaScript within Ruby
hmsk
3
430
PagerDuty×ポストモーテムで築く障害対応文化/Building a culture of incident response with PagerDuty and postmortems
aeonpeople
3
530
AWSの新機能検証をやる時こそ、Amazon Qでプロンプトエンジニアリングを駆使しよう
duelist2020jp
1
330
持続可能なドキュメント運用のリアル: 1年間の成果とこれから
akitok_
1
270
Winning at PHP in Production in 2025
beberlei
1
270
Twelve-Factor-Appから学ぶECS設計プラクティス/ECS practice for Twelve-Factor-App
ozawa
3
160
Aspire をカスタマイズしよう & Aspire 9.2
nenonaninu
0
350
Новые мапы в Go. Вова Марунин, Clatch, МТС
lamodatech
0
1.5k
Notion x ポストモーテムで広げる組織の学び / Notion x Postmortem
isaoshimizu
1
150
AI-in-the-Enterprise|OpenAIが公開した「AI導入7つの教訓」——ChatGPTで変わる企業の未来とは?
customercloud
PRO
0
100
Web Intelligence and Visual Media Analytics
weblyzard
PRO
1
5.9k
30代からでも遅くない! 内製開発の世界に飛び込み、最前線で戦うLLMアプリ開発エンジニアになろう
minorun365
PRO
16
5k
Featured
See All Featured
Optimizing for Happiness
mojombo
378
70k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Agile that works and the tools we love
rasmusluckow
329
21k
Fireside Chat
paigeccino
37
3.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
29
5.7k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
23
2.7k
How to Think Like a Performance Engineer
csswizardry
23
1.6k
Practical Orchestrator
shlominoach
187
11k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
178
53k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Transcript
NextEngineクラウドジャーニー ~メールシステムのクラウド移行~ Hamee株式会社 SRE部 楠 洋平
内容 話すこと • SESの受信機能を使った弊社事例 • 受信メール処理のアーキテクチャ 話さないこと • SESの送信機能を使った事例 •
各ソリューションの詳細仕様 • 実運用の苦労 2 -MTAの管理にうんざりしている皆さんに捧ぐ-
Hamee株式会社 Mission クリエイティブ魂に火をつける コマース事業 スマホアクセサリー通販etc. プラットフォーム事業 NextEngine運営 本社:小田原 会社概要 3
スピーカー 楠 洋平 SRE部 NextEngineのSRE • インフラ構築・運用など Terraform/Docker/Golang 4
サービス概要 ECオーナー向け 管理サービス (プラットフォーム) 5
Set システム概要 オンプレミス セットで分かれている (20〜30セット) • 拡張の単位 • 複数のユーザ企業 (マルチテナント)
• Webゲームのワールドのような概念 セット内構成 • Webサーバ × 4台 o Webアプリケーション o 受信メール処理 o バッチ • DB・ストレージサーバ × 2台 o データベース o 共有ファイル 6 Load Balancer Storage Web PHP + Apache MySQL + GlusterFS Set ・・・
クラウド化PJ 固定リソースの確保、調達・スケールの限界 (システムの老朽化) →セットの概念をなくした スケール可能な構成でのクラウド化 7
クラウドジャーニー 目指す先 より良い開発・運用環境 フェーズ1 2020年2月〜 まずはクラウド化 (6つ9つの課題) Webアプリケーションのコンテナ化 極力既存コードに手を加えない
フェーズ2以降 2020年12月〜 本格的に最適化 8 6つの課題 (→ 9つの課題) 1. 受信メール 2. バッチ 3. デプロイ 4. 共有ファイル 5. ログ 6. DB 7. セッション 8. キャッシュ 9. 移設
受注情報のメールを受けて在庫連携 受信メール処理 NextEngine -受信メール処理- 9 メール受信 メール取込 引当 在庫更新 起票
受注完了 メール送信
sendmailでaliasを経由してphpスクリプト起動 受信メール・アーキテクチャ -BEFORE- 10 /etc/aliases 店舗毎に事前発行済み sendmail 受信メール処理 .php
[email protected]
[email protected]
Amazon 楽天 ユーザ企業 ne-001 : | “受信メール処理 .php 001” ne-002 : | “受信メール処理 .php 002” ローカルに保存
現状の課題 • Webサーバはコンテナ化しフレキシブルにスケールする予 定。一緒に扱いたくない • というか、MTAの管理はうんざり 11
受信メール・アーキテクチャ -AFTER- 12 DynamoDBでは各メールごとに「処理がどこまで進んだか(どの Lambda・タスクが実行されたか)」「既存コードの実行時に渡す値」「処理結果」を管理 全体像 Amazon DynamoDB Amazon SES
Amazon SNS Amazon SQS Amazon S3 Amazon ECS 受信メール処理 .php ステータス更新 バケット移動
ap-northeast-1 us-east-1 受信メール・アーキテクチャ -AFTER- 13 Rule Sets SES topic 保管ルール
S3 Action with SNS topic ステータス更新ルール Lambda Action SQS subscription Lambda subscription SQS Event Trigger SESで受信可能なのは米国東部(バージニア北部)米国西部 (オレゴン)、欧州 (アイルランド)のみ →SNS、Lambda、暗号化のためのKMSは同一リージョンに存在しなければならない SNSからのキューイングは標準キューのみ( FIFOキュー非対応) →メッセージの重複の可能性 受信 Queue Amazon SNS Amazon SES Amazon SQS AWS Lambda AWS Lambda
受信メール・アーキテクチャ -AFTER- 14 SQS Event Trigger Dead Letter Queue 既存コード
本文パース DBアクセス Wrapper S3オブジェクト展開 DynamoDB更新 既存コード呼び出し RunTask APIのレスポンスでErrorはECSサービスへのリクエスト成否のみ。 Errorが含まれなくてもタスクの起動に失敗する場合がある。レスポンス内の別属 性 Failure が空でないことの確認が必要。 SQS Event TriggerはLambdaの正常終了時にメッセージを削除する。削除したくない際はハンドラーで Errorを返す。 ※重複排除 処理 RunTask Amazon SQS AWS Lambda Amazon ECS Amazon S3 取得 受信メール処理 .php
受信メール・アーキテクチャ -AFTER- 15 未処理 成功 失敗 リトライ 保管 処理状況確認 バケット移動
AWS Lambda Amazon CloudWatch Amazon DynamoDB Amazon S3
受信メール・アーキテクチャ -AFTER- 16 リトライ リトライ 存在確認 情報取得 キューイング Amazon CloudWatch
AWS Lambda Amazon S3 Amazon DynamoDB Amazon SQS
AWS Account - 1 リソース管理・デプロイ方法 17 Git Terraform Role (Manage
all resources) AWS Account - 2 Terraform Role (Manage all resources) Terraform files AWSリソース Atlantis (Terraform) PR Webhook assume role AWS Fargate ※Atlantis : TerraformをPRベースでワークフロー化するツール - https://www.runatlantis.io/
CI リソース管理・デプロイ方法 18 Git Application code Dockerfile Git Task Definition
Service test build push merge request CI register deploy ECSタスク Webアプリタスク・サービス メール処理タスク PR, Merge Webhook Webhook PR Merge Amazon ECR Amazon ECS ※ecspresso : ECSのデプロイツール - https://github.com/kayac/ecspresso ecspresso (deploy tool)
リソース管理・デプロイ方法 19 Git Terraform files CI Git Application code CreateFunction
API Input test build deploy Lambda Trigger・Role Function PR PR, Merge Webhook Atlantis (Terraform) Webhook lambroll (deploy tool) AWS Fargate AWS Lambda ※lambroll : Lambdaのデプロイツール - https://github.com/fujiwara/lambroll
ポイント • マネージドサービス利用でMTA管理から解放! • ローカルファイル回避 o コンテンツ > S3、キュー >
SQS • 非同期処理、冪等性担保 • デプロイ自動化 o まだ試行錯誤中 ▪ リポジトリ構成、ブランチ戦略 ▪ Credentials管理 ▪ デプロイツール 20
NextEngine -送信メール処理- NextEngineがユーザ企業から商品購入者へのメールを代行 21
送信メール -ソリューション選定- SES バウンス管理などレピュテーションコントロールが難しい アカウント単位で止まると全ユーザ企業ストップ SendGrid(他社メール配信サービス) ★採択 サブアカウント単位での管理が可能 22
プロジェクト状況 • 本番稼働に向けテスト中 • AWS ソリューションアーキテクトの方に都度 レビュー、質問対応等のご支援いただきながら ブラッシュアップ 23
まとめ • 受信メール処理のアーキテクチャ紹介 o ローカルファイル ▪ コンテンツ > S3、キュー >
SQS o 非同期処理、冪等性担保とか • デプロイ o 自動化 24
We are hiring. • 採用ページ https://recruit.hamee.co.jp/ • 『小田原手当』 • 『いざ!小田原』
25