こんにちは!株式会社アイスリーデザイン エンジニアリング部の中島です。
前回は「モバイルアプリ開発時に使用するAWS環境」について解説しました。
実際に使用するAWS環境ってどんな感じ?〜モバイルアプリ編〜
今回は「Webアプリ開発時に使用するAWS環境」がテーマになります。
Webアプリ開発時にどのような要件があったのか、それらを解決するためにどんなサービスを利用したのかを、実際のプロジェクトで使用しているAWS環境をもとにご紹介していきます。この記事を通して、少しでもAWSサービスへの理解が進んだり、システム設計のヒントになれば嬉しいです!
それでは、前回に引き続きシステム構成図をもとに解説していきます!
Webアプリの場合
まず、このプロジェクトで作成するものは、「モバイルアプリ」と「モバイルアプリで配信する情報を管理するためのWebアプリ(以下Webアプリ)」の2つです。
今回はWebアプリについてご説明していきます。
システム構成図は前回と同様、以下の通りです。
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
構成図の概要は前回の記事に記載しています。気になる方はあわせてご覧ください!
実際に使用するAWS環境ってどんな感じ?〜モバイルアプリ編〜
Webアプリの大まかな流れは以下のようになります。
- まず[2]WAFを通じて[5]CloudFrontと[6]S3を利用して公開したWebサイトへアクセスします
- バックエンドの処理はモバイルアプリと同様に、[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 CloudFront & S3


CloudFrontは静的および動的なコンテンツの配信を高速化してくれるCDN(Contents Delivery Network)サービスです。
CloudFrontではS3をオリジンサーバーとして使用できるため、EC2等のサーバーを利用してサイトを作成する必要がなく、SPAをS3にホスティングするだけで問題ありません。
S3以外にもオリジンサーバーとして利用できるサービスはありますが、スケーラビリティや可用性といった点で運用負荷を軽減できるため、今回はS3を使用しています。
ただし、S3の静的ウェブサイトホスティング機能ではHTTPSを直接サポートしていないため、CloudFrontを経由してSSL/TLS証明書を適用する必要があります。
AWS Certificate Manager

ACMとは、SSL/TLS証明書の発行、管理、自動化を行えるサービスです。
ACMはフルマネージドサービスなので、簡単にWebサイトやアプリケーションのセキュリティを向上できます。
先ほどお話しした「SSL/TLS証明書を適用する必要がある」という問題も、ACMで発行したSSL証明書をCloudFrontに設定することで解決可能です。
Amazon Route 53

Route 53とは、ドメイン登録やDNSルーティング、ヘルスチェックなどが行える、DNSウェブサービスです。
今回はCloudFrontやAPI Gatewayのドメイン登録やルーティングに使用しています。
AWS WAF

WAFとは、Webアプリケーションの通信を許可、監視、ブロックするためのWebアプリケーションファイアウォールです。
IPアドレス制限や、SQLインジェクション、クロスサイトスクリプティングといった攻撃の遮断ができます。
また、WAFには「マネージドルール」というAWSが管理しているプリセットされたルールが存在するため、1からルールを作成する必要がありません。
マネージドルールでセキュリティ要件を満たせない場合は、カスタムルールを作成して追加することも可能です。
Amazon Cognito

Cognitoとは、ユーザーの認証や管理を行うことができるサービスです。
今回はAPI Gatewayのオーソライザーとして用いることで、APIへのアクセスを制御し、セキュリティを高めています。
Amazon CloudWatch

CloudWatchとは、AWSリソースと、AWSで実行されているアプリケーションをリアルタイムでモニタリングできるサービスです。
リソースやログの監視を行えるため、顧客から要望があった、誰がいつどのような操作を行ったか、各サービスが正常に動いているか、といったことを確認できます。
AWS Systems Manager

Systems Managerとは、サーバーやアプリケーションなど、様々なノードを一元的に管理できるサービスです。
今回はその中でもParameter Storeという機能を利用しています。
パスワードをパラメータ値として保存することによって、データベース等に保存するよりも更にセキュアな機密管理を実現しています。
また、IAMロールをAWSリソースに与えることで、他のAWSリソースからParameter Storeに対してアクセスすることが可能になります。
実際にAPIなどで使用する際は、IAMロールを付与したECSからアクセスすることで保存したパラメータ値を取得しています。
AWS CloudFormation

CloudFormationとは、AWSリソースをコードとして管理することが可能になるIaC(Infrastructure as Code)サービスです。
これによって、新しいリージョンや環境に対して素早くリソースを複製することが可能となり、人為的なミスや作業時間の削減にも効果が期待できます。
まとめ
最後まで読んでいただき、ありがとうございました!
今回はWebアプリ作成時に使用するAWS環境について解説してきましたが、いかがでしたか?
Webアプリは静的ホスティングによるフロントのホスティングや、WAF、Cognitoを使ったセキュリティ対策が特徴的だったかと思います。
対するモバイルアプリはプッシュ通知やオフラインデータ同期、位置情報サービスが特徴的ですが、今回はネイティブアプリがAPIを呼び出すためのバックエンド等があれば基本的には問題ありませんでした。
前回のモバイルアプリ編を読んでいただくと更に理解が深まると思いますので、読んでいない方はご一読いただけますと幸いです!
AWS環境の構築でお困りの方はご相談ください!