実際に使用するAWS環境ってどんな感じ?〜モバイルアプリ編〜

こんにちは!株式会社アイスリーデザイン エンジニアリング部の中島です。

私は大学でアプリ開発を学んでいましたが、入社後にAWSを本格的に勉強し始めました。

先日、あるプロジェクトでAWSを使う機会がありました。書籍やオンライン講座で学んだ知識を頼りに調べてみたものの、「このサービスは一体何を作る時に使っているのか?」「どんな機能を実現するためのものなの?」という具体的なイメージが湧かなくて、少しモヤモヤしてしまいました。

初学者にはただでさえ分からないことだらけなのに、いつどのように使うかなどの具体例があればもっと理解できるのになぁ、と。

そこで、初心者の私が実際に学んだことや感じたことをまとめてみることにしました。もし、「AWSって名前は知ってるけど、なんだか難しそう…」と思っている方がいたら、このブログが少しでも役に立てば嬉しいです!

それでは、実際にプロジェクトで使用しているAWS環境について、システム構成図をもとに解説していきます!

システム構成図

まず初めに、今回のプロジェクトで作成するものは、「モバイルアプリ」と

「モバイルアプリで配信する情報を管理するためのWebアプリ(以下Webアプリ)」の2つです。

本プロジェクトで採用したシステム構成は、顧客のセキュリティ要件を満たしつつ、運用の効率化と性能向上を図る設計となっています。まず、WAF、Cognito、CloudWatchを活用し、セキュリティとモニタリングの強化を実現しました。サーバーはオンプレミス環境ではなく、AWSのECS on Fargateを採用することで、サーバーレス運用を可能にし、管理コストを削減しています。

データベースには、Aurora PostgreSQLを選択しました。Auroraは他のRDBに比べて高性能で拡張性が高く、信頼性に優れており、顧客ニーズに最適な選択肢です。また、WebアプリがSPAである特性から、CloudFrontとS3を組み合わせ、スムーズな配信を実現しました。

これらを組み合わせることで、セキュアで高効率なシステムを構築しました。

以下が今回作成した構成図になります。

今回使用するサービスは以下の通りです。(少し見にくいかもしれませんが、番号は構成図に振られている番号を指しています。)

1.   Amazon CloudFormation
2.   AWS WAF
3.   Amazon Route 53
4.   AWS Certificate Manager
5.   Amazon CloudFront
6.   Amazon S3(SPA用)
7.   Amazon S3(画像保存用)
8.   Amazon API Gateway
9.   AWS PrivateLink
10. Network Load Balancer
11. Amazon Cognito
12. Amazon ECS
13. AWS Fargate
14. Amazon ECR
15. Amazon Aurora
16. AWS Systems Manager
17. Amazon CloudWatch
18. NAT Gateway
19. Internet Gateway

モバイルアプリの場合

今回の記事ではモバイルアプリを開発する上で、どのようにサービスを利用しているか解説していきます!

(Webアプリについては別記事で紹介していこうと思います!)

大まかな流れとしては以下になります。

  1. まず[2]WAFを通じて[8]API Gatewayへ通信します。
  2. その後、[8]API Gatewayから[9]Private Linkを通じ、プライベートサブネット内の[10]Network Load Balancerで通信数に応じてトラフィックを分散し、ECS on Fargateでバックエンドの処理を行います

外部と通信を行う際は[18]NAT Gatewayと[19]Internet Gatewayを使って接続します。

DBは[15]Aurora、画像保存は[7]S3、ドメイン解決は[3]Route 53、ログ取得は[17]CloudWatchを使用しています。

ここからは、モバイルアプリで使っているものをメインに解説していきます。

(Webアプリでも使っているものはWebアプリ編で解説しようと思いますので、続編をお待ちください!)

Amazon API Gateway

API Gatewayとは、APIの作成や管理を行うことができるフルマネージドサービスです。

3種類のAPIを作成可能で、それぞれ用途が異なります。

  • REST API:高度な機能やセキュリティが必要な場合に適しています。
  • HTTP API:シンプルで高速、コストを抑えたい場合に最適です。
  • WebSocket API:ゲームやライブ配信など、リアルタイム通信が必要な場面で活躍します。

APIの選び方

リアルタイム通信が必要ならWebSocket API、APIキーやセキュリティ対策が必要な場合はREST API、簡単な機能で十分ならHTTP APIを選びます。

今回はAPIキーやWAFの統合が必要なため、REST APIを採用しました。

AWS PrivateLink

AWS PrivateLinkは、データをインターネットに公開することなく、Amazon VPCとAWSサービス間で安全な接続を確立するためのサービスです。インターネットを介さないため、外部へのデータ漏洩リスクを低減できます。

今回は、API GatewayとVPC内のNetwork Load Balancer(NLB)を接続するためにPrivateLinkを使用しています。これにより、インターネットを介さず、安全かつ直接的な通信が実現しています。

Network Load Balancer

NLBとは、負荷分散を自動で行ってくれるサービスです。

同じような役割のサービスとしてALB(Application Load Balancer)も存在するのですが、REST APIとプライベート統合を行う場合はNLBが用いられます。

そのため、今回はALBではなくNLBを採用しています。

Amazon ECS & AWS Fargate

ECSとは、フルマネージドのコンテナオーケストレーションサービスで、コンテナ化されたアプリケーションの効率的なデプロイ、管理、スケールに役立ちます。

Fargateはコンテナをサーバーレスで実行することができるサービスで、ECSのデータプレーンの一種です。

データプレーンにはEC2も選択できるのですが、OS設定などの細かいカスタマイズが不要な場合、Fargateを使用した方が余計な作業が発生しません。

Amazon ECR

ECRとは、コンテナイメージレジストリサービスといって、Dockerイメージなどのコンテナイメージを保存、共有、デプロイできます。

今回のプロジェクトでは、GitLabで管理しているDockerfileを変更すると、コンテナイメージがビルドされてECRにプッシュされます。その後、新しいコンテナイメージを基に、ECS on Fargate上でコンテナが自動的に起動されるという流れになっています。

Internet Gateway & NAT Gateway

Internet Gatewayは、VPC内のリソースがインターネットに接続するために使用されるサービスです。一方、NAT Gatewayは、プライベートサブネット内のリソースがインターネットやVPC外部と安全に通信する際に利用されます。

今回のプロジェクトでは、セキュリティ上VPC内に保管したい情報を外部と通信する必要があり、この2つのサービスを組み合わせて活用しています。

Amazon Aurora

Auroraとは、フルマネージドのリレーショナルデータベースエンジンです。

RDBといえばRDSもありますが、以下のような違いがあります。

  • インスタンスとストレージが分離しており、6つのコピーを3つのAZにレプリケーションしている
  • 配置できるリードレプリカの最大個数が15個とRDBの3倍
  • リードレプリカにフェイルオーバー機能がついている

これらによる高可用性・耐障害性が特徴のAuroraですが、高性能な分料金が高い、使用できるデータベースエンジンがMySQLとPostgreSQLの2つのみ、といったデメリットもあるので、要件によって使い分けることが大切です。

Amazon S3

Amazon S3は、低コストで容量無制限のクラウドストレージサービスです。今回のプロジェクトでは、以下の用途で利用しています:

  1. 静的ウェブサイトホスティング
    管理画面用のSPA(シングルページアプリケーション)をホスティングするためのバケット。
  2. 画像保存
    モバイルアプリからAPI通信で画像を取得する際に利用する画像保存用のバケット。

モバイルアプリではAPI通信で画像を取得してくる時にしか利用していないため、⑦のバケットのみの利用となります。

まとめ

モバイルアプリ作成時に使用するAWS環境について解説してきましたが、いかがでしたか?

もちろん予算や規模感、必要な機能等によって利用するサービスは変わってきますが、少しでも具体的なイメージを持っていただけたなら嬉しいです。

今回はモバイルアプリに絞って解説してきましたが、次回はWebアプリ編を投稿予定です。

また、今回解説できなかった、モバイルアプリとWebアプリの両方で使用しているサービスについても次回で解説する予定ですので、ぜひご覧いただけますと幸いです!

参考

REST API と HTTP API のどちらかを選択する | Amazon API Gateway 開発者ガイド

Amazon ECS の AWS Fargate | Amazon Elastic Container Service 開発者ガイド

[初心者向けシリーズ] Dockerイメージを作成しAmazon ECRにプッシュする方法を確認してみた | DevelopersIO

Amazon Aurora の高可用性 | Amazon Aurora  のユーザーガイド

AWS環境の構築でお困りの方はご相談ください!