Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NextEngineクラウドジャーニー
 ~メールシステムのクラウド移行~ / AWS Dev...

na_it_o
October 20, 2020

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

More Decks by na_it_o

Other Decks in Technology

Transcript

  1. 内容 話すこと • SESの受信機能を使った弊社事例 • 受信メール処理のアーキテクチャ 話さないこと • SESの送信機能を使った事例 •

    各ソリューションの詳細仕様 • 実運用の苦労 2 -MTAの管理にうんざりしている皆さんに捧ぐ-
  2. Set システム概要 オンプレミス セットで分かれている (20〜30セット) • 拡張の単位 • 複数のユーザ企業 (マルチテナント)

    • Webゲームのワールドのような概念 セット内構成 • Webサーバ × 4台 o Webアプリケーション o 受信メール処理 o バッチ • DB・ストレージサーバ × 2台 o データベース o 共有ファイル 6 Load Balancer Storage Web PHP + Apache MySQL + GlusterFS Set ・・・
  3. クラウドジャーニー
 目指す先
 より良い開発・運用環境
 
 フェーズ1  2020年2月〜
 まずはクラウド化
 (6つ9つの課題)
 Webアプリケーションのコンテナ化
 極力既存コードに手を加えない


    
 フェーズ2以降  2020年12月〜
 本格的に最適化
 8 6つの課題 (→ 9つの課題)
 1. 受信メール
 2. バッチ
 3. デプロイ
 4. 共有ファイル
 5. ログ
 6. DB
 7. セッション
 8. キャッシュ
 9. 移設
  4. sendmailでaliasを経由してphpスクリプト起動 受信メール・アーキテクチャ -BEFORE- 10 /etc/aliases 店舗毎に事前発行済み sendmail 受信メール処理 .php [email protected]

    [email protected] Amazon 楽天 ユーザ企業 ne-001 : | “受信メール処理 .php 001” ne-002 : | “受信メール処理 .php 002” ローカルに保存
  5. 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
  6. 受信メール・アーキテクチャ -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
  7. 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/
  8. 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)
  9. リソース管理・デプロイ方法 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
  10. ポイント • マネージドサービス利用でMTA管理から解放! • ローカルファイル回避 o コンテンツ > S3、キュー >

    SQS • 非同期処理、冪等性担保 • デプロイ自動化 o まだ試行錯誤中 ▪ リポジトリ構成、ブランチ戦略 ▪ Credentials管理 ▪ デプロイツール 20