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

サーバーレス環境をより改善してみた話

Sugar Sato
December 17, 2022
1.8k

 サーバーレス環境をより改善してみた話

Sugar Sato

December 17, 2022
Tweet

Transcript

  1. Angular, TypeScript GithubActionsでCICD TypeScript, Express 外部サービス連携で必要なイン ターネットアクセス サービスに必要なデータの蓄積 ユーザ情報やマスタ情報等 ユーザ情報の追加や変更

    認証はJWTで行う チャット情報の操作 APIから操作可能な範囲のみ Amplify API Gateway Lambda NAT Gateway Internet Gateway DynamoDB Cognito RDS サービス全体の構成図
  2. Groups - PK - GSI1 - unread - lastMessage -

    updatedAt チャットへの参照権限をチェック (e.g. 権限のないグループへの操 作をブロック) GraphQLのオペレーションに対 して、DynamoDBのメッセージ テーブルを操作する チャットの書き込みをトリガーし て必要な処理を行う 認証はCognitoのJWT Query - getMessages Mutation - createMessage - updateMessage - deleteMessage Subscription - onCreateMessage - onUpdateMessage - onDeleteMessage Messages - PK - GSI1 - senderId - body {} - postedAt Amplify Appsync DynamoDB DynamoDB Lambda チャット機能の構成図
  3. • 技術的負債の洗い出し ◦ 完全なサーバーレスにできていないこと ◦ RDS(MySQL)の使用 ▪ VPC LambdaとRDS Proxyが必須化していた

    ◦ RDS Proxy ▪ SQL実行のパフォーマンスが非常に悪い ▪ 動作が重たくなる影響が大きかった
  4. Golang, Gin Angular, TypeScript チャット情報の操作 サービスに必要なデータの蓄積 ユーザ情報やマスタ情報等 ユーザ情報の追加や変更 認証はJWTで行う GithubActionsでCICD

    DynamoDBと OpenSearch(ElasticSearch)を 同期して、サービスの検索強化 メールアドレス認証 CloudFront API Gateway Lambda SES Cognito DynamoDB Lambda OpenSearch サービス全体の構成図
  5. • DynamoDBに集約 ◦ チャットのみに使っていたDynamoDBを活用 ◦ APIレスポンスの向上(≒20ms) ▪ 1000ms => 20ms

    • OpenSearchを活用してサービスの検索の品質向上 ◦ DynamoDBとミラーリング • コストの削減(検証環境アカウント) ◦ RDS: ≒$65/month ◦ DynamoDB: ≒$0.15/month RDSとのお別れ
  6. 2. 月次メール配信機能 • LambdaのCronの時間 ◦ JSTと勘違い... ◦ UTCなので日付をまたぐ処理などに注意 • SESの送信上限

    ◦ 14件/sec (利用頻度によって緩和) ◦ 同じ時間に、一括送信をしたい ▪ 一回のメールで50人まで送信可能 ▪ Bccを使うことで、ToAddressを除いた49人に送信 ▪ ToにはサービスのEmailアドレスを使用 ▪ 最大:49人*14件=686件