8月6~7日に開催された「AWS JumpStart 2024」へモビルスからもエンジニア4名が参加しました。
今回はSaaS Product DivisionでMOBI VOICEの開発を行っているプラディープ さんの参加レポートをお届けします。
※原文は英語ですが日本語版のリクエストもあったため、後半に翻訳文を貼り付けしています。
What is AWS JumpStart
AWS JumpStart offers a two-day workshop program designed to enhance your understanding of AWS and your architectural design skills. The program includes preparatory learning, hands-on exercises, team discussions, and presentations.
Prerequisites
- モジュール 0&1 (約40分) (基本の知識)
- モジュール 2 – 5(約2時間)(忙しい方向け)
- AWS Skill Builder - AWS Technical Essential (おすすめ)
- はじめてのアーキテクティンク(深い勉強の場合)
- AWS Solution Architect Associate資格勉強会(深い勉強の場合)
I am already an AWS Certified Solutions Architect – Associate, so I took the AWS Skill Builder refresher course before starting the AWS Jumpstart workshop.
AWS Skill Builder - AWS Technical Essentials Summary
The course is divided into six modules:
- Introduction to Amazon Web Services
- AWS Compute
- AWS Networking
- AWS Storage
- Databases on AWS
- Monitoring, Load Balancing, and Scaling
During the course, I created an employee directory application that stores images and information about fictional employees using the following AWS services:
- AWS IAM (Identity and Access Management)
- Amazon S3
- Amazon CloudWatch
- Amazon DynamoDB
- Amazon EC2
- Amazon RDS
Tools Used in the AWS Jump session
- Slack
- Zoom
- Mira
- AWS
Schedule
Day 1 : 6th Aug 2024
The session covered the basics of web application development, hands-on development with EC2 instances, and the creation of a Todo application.
Hands On Session - Application development of ToDo
Steps to develop the Todo application
- Create VPC/Security group
- Create VPC
- Create 3 Security group for alb,web,db
- Creation of Aurora MySQL
- Creation of ALB
- Creation of ECS
Final Architecture of the ToDo application
Final View in the browser
Summary of day 1
During the development of the to-do application, I learned about the development of VPC, ALB, AuroraDB, ECS, CloudWatch, and AWS Fargate. While creating the ALB, I made a mistake in assigning subnet groups. After debugging for a while, I was able to rectify the error. In Slack, there was a channel called bedrocks-questions, which was linked to the Bedrock generative AI. We posted our questions there, and the AI provided answers. I found this really helpful during the session because it allowed us to get answers without disturbing the presenter.
Day 2 : 7th Aug 2024
Quiz
The session was conducted via Zoom, and it was interesting to see nearly 180+ members participating live.
Architecture Design Challenge(Unicorn EC Site development)
Overview
- You will join Unicorn Relations LLC as new employees, and you will be divided into teams to design the architecture for a given service.
- During the process, three teams will be randomly selected to present their architecture.
Objectives
- Gain practical experience by designing and visualising the architecture of a service using AWS services.
- Deepen your understanding of trade-offs and characteristics of various services during the architecting process
Requirement :
Scale
- User Count: Tens of thousands
- Peak Hours: Evenings in Japan
- Service Area: Japan
- Platform: Web
Required Features
- Product listing page
- Product details
- Product images
- Cart and purchase functionalities
- Payment, inventory management, and delivery systems will utilize external SaaS APIs
- Account management functionality
System Requirements (modifiable)
- Backend: Java/Spring Boot
- Frontend: TypeScript/React
- Database: MySQL
- Local development is using Docker, but containers are not mandatory
Outline of My architecture
During the morning session, the architecture development was done individually. Based on the information learned on Day 1, I created the diagram below:
Summary of my creation
The architecture depicted in the diagram is designed for a scalable web platform serving tens of thousands of users, primarily active during peak hours in the evenings in Japan. It includes the following key components:
- User Access: Amazon Route 53 for DNS, Amazon CloudFront for CDN, and S3 for static content.
- Compute: EC2 instances within a VPC across multiple availability zones for high availability, managed by Elastic Load Balancing.
- Data Storage: Amazon Aurora for database needs, ensuring read and write scalability.
- Monitoring: Amazon CloudWatch for monitoring and logging.
- Backend and Frontend: AWS Lambda and API Gateway for serverless backend interactions, utilizing external APIs for payment, inventory, and delivery. Frontend built with TypeScript/React.
- Account Management: Amazon Cognito.
- Notifications: Amazon SNS.
This setup ensures scalability, high availability, and efficient handling of user interactions and transactions.
In the group work session, the team was divided into groups of 4 members, each with an AWS mentor.
During the Zoom breakout room discussion of my architecture, the engineer provided various feedback about my design.
The provided architecture is robust and well-suited for a high-traffic e-commerce platform in Japan, ensuring scalability, high availability, and performance. However, some improvements can be made:
- Incorporate Auto Scaling Groups for EC2 instances to handle varying loads more efficiently.
- Utilize RDS Proxy to optimise database connections and improve Aurora's performance.
- Implement AWS WAF for enhanced security against web attacks.
- Leverage Amazon S3 Transfer Acceleration for faster global content delivery.
- Consider using AWS Fargate for container orchestration to reduce management overhead and improve scalability.
These enhancements will further optimise the system's reliability, security, and performance.
After the group discussion, we collaboratively developed the architecture below and presented it to the AWS members. We received valuable feedback on our design.
Assumptions and Future Improvement Opportunities for the above architecture
Assumptions
- Using Docker, ECS (Elastic Container Service) is adopted.
- WAF (Web Application Firewall) is used for security.
Future Improvement Opportunities
- Expansion to Overseas Markets:
- Load balancers can be used to distribute traffic globally.
- Operating with Microservices:
- Transitioning to a microservices architecture for better scalability and maintainability.
- Adopting NoSQL Databases:
- Utilizing NoSQL databases for their scalability, flexibility, and performance advantages, making them suitable for an e-commerce site.
Summary of the Architecture
The application, designed for a web platform with tens of thousands of users primarily active during Japan's evening hours, leverages a robust architecture hosted on AWS Cloud. Key components include:
- Frontend: TypeScript/React application.
- Backend: Java/Spring Boot services.
- Database: MySQL on Amazon RDS.
- Caching: Amazon ElastiCache.
Features:
- User Functionality: View product lists, detailed information, images, and manage cart and purchases.
- External Integrations: Payment, inventory, and shipping functions via SaaS APIs.
- Authentication: Managed by Amazon Cognito.
- Storage and Delivery: Managed by Amazon S3 and CloudFront.
Infrastructure:
- Container Management: ECS with Fargate for scalable container orchestration.
- Networking: VPC with public and private subnets across multiple availability zones, utilizing NAT and Internet Gateways.
- CI/CD: Automated with AWS CodePipeline, CodeBuild, and CodeDeploy, integrated with GitHub.
- Asynchronous Communication: SQS and Lambda.
- Monitoring: CloudWatch for performance tracking.
This architecture ensures high availability, scalability, and efficient resource management to meet user demands effectively.
Finally overall feedback about the AWS Jump Start
In the architecture review, all team members came from different companies involved in app development. Since we typically focus on web applications related tasks, we were able to discuss both app and infrastructure perspectives, which brought refreshing insights from the app-side viewpoints.
Reaching a consensus was challenging when opinions diverged between the app and infrastructure sides; it felt like a personal challenge. Additionally, the hands-on experience with ECS was valuable, especially since I will be working with containers in my future role.
Reflecting on the overall experience, it was highly educational from a practical standpoint. While I had learned about AWS services through books and seminars, applying that knowledge fully in practice had been difficult. Participating in this workshop felt like moving to the next level, similar to stepping onto the court for the first time after practising dribbling, passing, and shooting.
For those with limited practical design experience, this workshop offers substantial learning opportunities. Conversely, if you have concerns about your knowledge, I recommend doing some preparatory learning to participate effectively in group discussions
--------------------------------------------------------------------------------------------------
AWS JumpStartとは?
AWS JumpStartはAWSの理解とアーキテクチャ設計スキルの向上を目的とした2日間のワークショッププログラムです。事前学習、ハンズオン演習、チームディスカッション、プレゼンテーションから構成されています。
事前学習
- モジュール 0&1 (約40分) (基本の知識)
- モジュール 2 – 5(約2時間)(忙しい方向け)
- AWS Skill Builder - AWS Technical Essential (おすすめ)
- はじめてのアーキテクティンク(深い勉強の場合)
- AWS Solution Architect Associate資格勉強会(深い勉強の場合)
私はすでにAWS認定ソリューションアーキテクト – アソシエイト資格を持っているため、事前学習としてAWS Skill Builder - AWS Technical Essentialを受講しました。
AWS Skill Builder - AWS Technical Essentials 概要
このコースは6つの講座から構成されています
- Amazon Web Servicesの紹介
- AWSコンピューティング
- AWSネットワーキング
- AWSストレージ
- AWSのデータベース
- モニタリング、ロードバランス、スケール
コースの中では以下のAWSサービスを使用して従業員の画像と情報を保存する架空のディレクトリアプリケーションを作成しました
- AWS IAM (Identity and Access Management)
- Amazon S3
- Amazon CloudWatch
- Amazon DynamoDB
- Amazon EC2
- Amazon RDS
AWS Jump sessionの中で使用したツール
- Slack
- Zoom
- Mira
- AWS
スケジュール
Day 1 : 2024年8月6日
Day1では、Webアプリケーション開発の基本、ECS・Auroraを使ったTodoアプリケーションの作成について学びました。
ハンズオンセッション-ToDoアプリケーション開発
ToDoアプリケーション開発の手順
- VPC/セキュリティグループの作成
- VPCの作成
- ALB、Web、DB用の3つのセキュリティグループの作成
- Aurora MySQLの作成
- ALBの作成
- ECSの作成
最終的に作成したToDoアプリケーションのアーキテクチャ
ブラウザでの最終表示
Day1まとめ
ToDoアプリケーションの開発を通じてVPC、ALB、AuroraDB、ECS、CloudWatch、そしてAWS Fargateについて学びました。ALBを作成する際に、サブネットグループの割り当てでミスをしてしまいましたがデバッグを行い、エラーを修正することができました。
用意されたSlackには「bedrocks-questions」というチャンネルがあり、生成AIサービス「Amazon Bedrock」と連携していて、質問を投稿するとAIが回答を提供してくれます。この機能は発表を遮ることなく質問ができ回答を得られるので、非常に役に立ちました。
Day 2 : 2024年8月7日
クイズ
セッションはZoomで行われ、180人以上のメンバーがライブで参加していたのが印象的でした。
アーキテクチャ設計チャレンジ(ECサイト開発)
概要
- ある会社へ入社した想定で、チームに分かれて指定されたサービスのアーキテクチャを設計する
- ランダムに選ばれた複数のチームが自分たちのアーキテクチャを発表
目的
- AWSサービスを使用してサービスのアーキテクチャを設計し、可視化することで実践的な経験を得る
- アーキテクチャを設計する過程で、AWSサービスのトレードオフや特徴についての理解を深める
要件:
スケール
- ユーザー数: 数万
- ピーク時間: 日本の夕方
- サービスエリア: 日本
- プラットフォーム: Web
必要な機能
- 商品一覧ページ
- 商品詳細
- 商品画像
- カートと購入機能
- 支払い、在庫管理、配送システムは外部のSaaS APIを利用
- アカウント管理機能
システム要件(変更可能)
- Backend: Java/Spring Boot
- Frontend: TypeScript/React
- Database: MySQL
- ローカル開発にはDockerを使用していますが、コンテナの使用は必須ではありません
アーキテクチャの概要
午前中のセッションでは、アーキテクチャの設計を個別に行いました。Day 1で学んだ情報を基に、以下の図を作成しました。
作成内容の概要
図に示されたアーキテクチャは、数万のユーザーに対応するスケーラブルなWebプラットフォームを設計しており、主に日本の夕方のピーク時間帯に活発に使用されます。以下の主要なコンポーネントから構成されています:
- ユーザーアクセス: Amazon Route 53でDNS管理、Amazon CloudFrontでCDN、S3で静的コンテンツを提供
- 計算リソース: 高可用性のために複数のアベイラビリティゾーン内のVPCにEC2インスタンスを配置し、Elastic Load Balancingで管理
- データストレージ: 読み書きのスケーラビリティを確保するためにAmazon Auroraを使用
- 監視: Amazon CloudWatchで監視とログ収集を行う
- BackendとFrontend: サーバーレスBackendのインタラクションにはAWS LambdaとAPI Gatewayを使用し、支払い、在庫、配送には外部APIを利用。FrontendはTypeScript/Reactで構築
- アカウント管理: Amazon Cognito
- 通知: Amazon SNS
このセットアップでは、スケーラビリティ、高可用性、そしてユーザーのインタラクションやトランザクションの効率的な処理を確保しています。
次に行われたグループワークセッションでは、チームが4人ずつのグループに分かれ、それぞれにAWSメンターが付きました。
Zoomのブレイクアウトルームでアーキテクチャを議論する中で、同じグループのメンバーから私が設計した内容について様々なフィードバックをもらいました。
フィードバックとしては、日本の高トラフィックなeコマースプラットフォームに適しており、スケーラビリティ、高可用性、パフォーマンスを確保しているが、以下の改善が挙げられました:
- EC2インスタンスのオートスケーリンググループを導入し、変動する負荷により効率的に対応できるようにする
- データベース接続を最適化し、Auroraのパフォーマンスを向上させるためにRDS Proxyを利用
- Web攻撃に対するセキュリティを強化するためにAWS WAFを実装
- グローバルコンテンツの配信を迅速にするためにAmazon S3 Transfer Accelerationを活用
- コンテナオーケストレーションの管理負担を軽減し、スケーラビリティを向上させるためにAWS Fargateの使用を検討
これらの改善により、システムの信頼性、セキュリティ、パフォーマンスがさらに最適化されます。
グループディスカッションの後、グループで以下のアーキテクチャを開発しました。AWSのメンバーに向けて発表し、設計について貴重なフィードバックをいただきました。
上記のアーキテクチャに対する前提条件と将来的な可能性
前提条件
- Dockerを使用し、ECS(Elastic Container Service)を採用
- セキュリティにはWAF(Web Application Firewall)を使用
将来的な可能性
- 海外市場への展開:
- ロードバランサーを使用して、トラフィックをグローバルに分散させることができる
- マイクロサービスの導入:
- マイクロサービスアーキテクチャに移行することで、スケーラビリティとメンテナンス性を向上させることができる
- NoSQLデータベースの採用:
- NoSQLデータベースを利用することで、スケーラビリティ、柔軟性、パフォーマンスの利点を活かし、eコマースサイトに適したシステムを構築できる
アーキテクチャのまとめ
このアプリケーションは、日本の夕方の時間帯に主にアクティブな数万人のユーザー向けのWebプラットフォームとして設計されており、AWS Cloud上にホストされる堅牢なアーキテクチャを活用しています。主要なコンポーネントは以下の通りです:
- Frontend: TypeScript/React application.
- Backend: Java/Spring Boot services.
- データベース: MySQL on Amazon RDS.
- キャッシュ: Amazon ElastiCache.
機能:
- ユーザー機能: 商品リストの表示、詳細情報、画像の閲覧、カートと購入の管理
- 外部統合: 支払い、在庫、配送機能はSaaS APIで提供
- 認証: Amazon Cognitoで管理
- ストレージと配信: Amazon S3とCloudFrontで管理
インフラストラクチャ:
- コンテナ管理: スケーラブルなコンテナオーケストレーションのためにECSとFargateを使用
- ネットワーキング: 複数のアベイラビリティゾーンにまたがるVPCにパブリックおよびプライベートサブネットを配置し、NATゲートウェイとインターネットゲートウェイを利用
- CI/CD: AWS CodePipeline、CodeBuild、CodeDeployを使用して自動化し、GitHubと統合
- 非同期通信: SQSとLambdaを使用
- 監視: CloudWatchでパフォーマンスをトラッキング
このアーキテクチャは、高可用性、スケーラビリティ、そしてリソースの効率的な管理を確保し、ユーザーの要求に効果的に対応します。
AWS Jump Start全体を通しての感想
様々な企業のメンバーと一緒にアーキテクチャを作成したりレビューを行いました。私は通常の業務ではWebアプリケーション側の開発を行っていますが、メンバーの中にはインフラを担当している方もいて、アプリとインフラの両方の視点で議論することで新しい気づきを得ることができました。
アプリ側とインフラ側で意見が分かれたこともあったのですが合意するのは難しく、自分としては挑戦のように感じました。また今後の業務でコンテナを扱うことになるため、ECSを使った実践的な経験は非常に貴重で特に役立ちました。
全体を振り返ると、この経験は実践的な内容で非常にためになるものでした。これまでAWSのサービスについては書籍やセミナーで学んできましたが、それを実際の開発に活かすことは難しかったです。このワークショップに参加したことで、まるでドリブルやパス、シュートの練習をした後に初めてコートに立つような感覚で、次のレベルに進んだように感じました。
実践的なAWSアーキテクチャの設計経験が限られる方にとって、このワークショップは大いに学びの機会があります。一方で、自分の知識に不安がある場合はグループディスカッションに効果的に参加できるよう事前に学習をしておくことをお勧めします。
モビルスでは、一緒に働く仲間を募集中です!
興味のある方は、ぜひ採用情報のページをご覧ください!