# プロジェクト内容
テレビ局の情報発信サイトとスマートフォンアプリの開発、運用保守。
# 組織/役割
全体7名/インフラ
# 担当業務
- AWS Fargate、Amazon Pinpointのキャッチアップとナレッジシェア
- 基本設計書を元にインフラ構成図作成
- 構成図をもとにコスト試算
- インフラ構築
- アプリの実装(Pinpointとアプリ,PinpointとAPI連携をLambdaで実装)
- 社内用に運用マニュアルの作成
- サーバやネットワークのエラーログの対応(エラー時にSlackに通知)
- インフラ関連のトラブルシューティング
- CI/CDの導入
- リリース後のパフォーマンスチューニング
# 言語/環境
フロントエンド
- HTML/CSS
- JavaScript
バックエンド
- PHP8 (WordPress)
モバイルアプリ(ios, Android)
- Dart (Flutter)
# 使用した主なAWSサービス
- Pinpoint
- Fargate
- EFS
- S3
- Aurora (MySQL)、RDS Proxy
- Lambda、Lambda@Edge
- SES
- SQS
- CloudFront
- ALB
- WAF
- Secrets Manager
- CodePipeline、CodeBuild
# 工夫した点
- CodePipelineとCodeBuildを用いて、GitHubのリポジトリをマージすることで、ビルド環境やデプロイ環境を自動化し、リリース作業時間の短縮をしました。また、CloudFrontのキャッシュを削除するLambdaをCodePipelineに組み込み、デプロイ後の作業も自動化することで、10分かかっていた作業を0にすることができました。
- FlutterとFargateからPinpointへの処理をサーバーインスタンスではなくLambdaによるトリガー処理で連携することで疎結合化を実現し、機能追加や変更、スケールを容易にしました。
# 課題
トラフィックの増加時、FargateのCPUが高くなりコンテナが落ちたり、レスポンスに時間がかかる問題がありました。原因として、ニュースの動画や画像が重い、CloudFrontのキャッシュ時間を長くすると、ニュースのタイムリーに流れなくなるため、キャッシュを短くする必要があるといったことが挙げられます。
# 成果
以下の取組を実施することで、サーバーへの負担を減らしコンテナの停止を無くし、最大レスポンス時間を7秒から2秒(7割削減)することができました。
- CloudFrontのキャッシュをビヘイビアごとにきめ細かく設定することによってサーバーの負荷低減とレスポンス速度向上
- Event Brigeから特定のパスのキャッシュを削除するLambdaを特定の時間に実行することで、ニュースがタイムリーに流れるようにし、サーバーの負担を低減
- CloudFrontで使用しているLambda@Edgeのメモリサイズを最適化することで、実行速度を上げる
- トラフィックが増加する時間をメトリクスから調査し、増加する時刻に合わせてAutoScalingをスケジューリングすることによるパフォーマンスの安定(Fargate Spotを使用することでコストも抑えました)