Japan
サイト内の現在位置
【事例で学ぶAWS活用のコツ】
AWSでセキュアかつ柔軟性の高いSaaSを実現するには?
SaaSを開発したい!という声は多く頂きますが、具体的に何に気をつけるべきか?は多種多様に存在します。
NECの総合売買審査サービスではセキュリティと柔軟性の高さに注目してアーキテクチャ設計をしています。
まずは『セキュリティと柔軟性って両立できるの?』について解説していきます。
1.セキュアかつ高い柔軟性を両立させるコツ
責任共有モデルを理解し、マネージドサービスを中心に構成を考える
クラウドサービスは、クラウドサービス事業者が責任を持って管理する範囲と、クラウドサービスの利用者(以降、利用者)が責任を持って管理する範囲を明確に区別しています。この考え方をAWSでは責任共有モデルと言います。詳しくは下記サイトを参照してください。
https://aws.amazon.com/jp/compliance/shared-responsibility-model/
AWSが提供するクラウドサービスには多種多様なマネージドサービスがあり、利用者が管理すべき範囲はマネージドサービスによって異なります。利用者は管理の範囲が少ないマネージドサービスを選択することで、インフラストラクチャの運用や管理のコストを下げることができます。
一方で、利用者として扱える範囲が少ないということは、利用者が自由に使用できる範囲が限られるということでもあります。クラウドサービスを活用してシステムを構築する際は、システム要件を考慮しつつ管理しなければならない範囲をよく理解し、適切なマネージドサービスを選択する必要があります。
SaaSに求められる柔軟性とは何かを考える
利用者自身がサービスを提供する事業者としてAWSを使ってSaaSを実現しようとする際、開発や導入の手軽さやビジネス規模に応じたスケーラビリティだけでなく、効率的な保守性やコストパフォーマンスなど、様々なニーズをSaaSの要件として詰め込んでしまいがちです。
しかし、多くのSaaSにとって重要視すべき要件はセキュリティと柔軟性ではないかと考えます。多くのユーザーが安心してSaaSを利用するためにはセキュリティが最も重要視すべき項目であることは想像に難くありません。
次に重要視すべきはSaaSとして継続的にサービスを提供しつつ市場の変化やSaaSのユーザーニーズに追従できる柔軟性ではないかと考えます。利用しているマネージドサービスのアップデート追従だけでなく、ニーズのタイムリーな取り込みなど状況に応じた迅速な対応力こそがSaaSとして求められる柔軟性ではないでしょうか。
最終的な構成は実際に検証を行った上で決める
利用するサービスの選定や構成を机上で考えることも重要ですが、それと同様に実際に環境を構築して検証することも重要です。クラウドサービスの多くは時間単位や使用量をベースとした課金体系になっているため、短時間の利用であれば本番と同じ構成であっても安価に試してみることが可能です。
実際の環境で試すことで、机上では発見できなかった問題が発見できるようになります。また、組み合わせて動かすことで初めて見つかる問題もあります。問題を発見したら構成に改善を反映し、再度検証を行ってください。この検証プロセスを繰り返すことで、最適な構成を作り上げていくことができます。
2.シンプルなサーバーレスアーキテクチャで検証する
SaaSをWebアプリケーションとして提供する際の定番構成
シンプルなサーバーレスアーキテクチャの例として、Amazon API Gateway、AWS Lambda、Amazon S3、Amazon DynamoDB、Amazon Aurora、Amazon Cognitoなどを活用したWebアプリケーションの構成が挙げられます。マネージドサービスを十分に活用することで、セキュアで柔軟性が高く、保守性の高いSaaSを実現することができます。
コンピュート系リソースは用途やコストパフォーマンスの観点で検討(トレードオフ)
マネージドサービスは便利ですが無条件に使えば良いというわけではありません。例えば、AWS Lambdaは実行時間による課金のため、安価で障害耐性も高くスケーリングも自動で行われます。しかし、メモリ容量や実行時間に制限があるため、長時間のバッチ処理など大きなコンピューティングリソースが必要な用途には向きません。
長時間実行が必要な場合や大規模なリソースが必要な場合は、Amazon SQSを活用することで分散処理を実現するか、Amazon EC2やAmazon ECS等での実行することを検討する必要があります。
アプリケーションの特性に合わせたデータベースの選定
データベース選定においては、アプリケーションの特性や要件に応じて、リレーショナルデータベース(Amazon RDS、Amazon Aurora)やNoSQLデータベース(Amazon DynamoDB) を検討することが重要です。一般的に、正規化され、スキーマが厳格で、ACID特性を求める場合はリレーショナルデータベースを採用しますが、スキーマが厳格でなく、書き込みに対して結果整合性だけが必要であれば、NoSQLデータベースの採用を検討します。
一方で、リレーショナルデータベースは同時接続数に限りがあったり、スケーリング時は垂直スケール(スケールアップ)する必要があったりするため、非常に高いスケーラビリティを持つAWS Lambdaなどと組み合わせる際は、事前に同時接続数に問題が無いことを検証するか、Amazon RDS Proxyの採用を検討するなど注意が必要です。コンピューティングリソースやデータベースの使い分けやマネージドサービスの組み合わせ方はアプリケーションの特性を念頭に実際に検証することが重要です。
3.NEC 総合売買審査サービスでの実装例
Amazon API GatewayとAWS Lambdaを組み合わせたシンプルな構成が基本
NEC 総合売買審査サービスは証券会社の審査業務をAIでサポートするサービスです。証券会社からサービスにアクセスする際は認証をAmazon Cognitoで行い、静的コンテンツはAmazon S3に格納し、各クライアントからのアクセスはAmazon API Gatewayで受け付け、Webアプリケーションとしてのメイン処理はAWS Lambdaが担うというお手本のようなシンプル構成です。シンプルなサーバーレスアーキテクチャですが用途に応じて適切にマネージドサービスを選定しているため、柔軟にスケールすることが可能です。以下の図は、証券会社からサービスにアクセスする箇所を抜粋したアーキテクチャです。
アプリケーションの要件と開発効率を加味した上でAmazon Auroraを採用
本サービスは、データベースとしてAmazon AuroraとAmazon DynamoDBを採用しています。データの特性で使い分けをしています。リレーションやスキーマが求められ、ACID特性を求められるデータはAmazon Aurora、柔軟なスケールが求められ、書き込みは結果整合性だけが求められるデータに関してはAmazon DynamoDBと使い分けています。
リレーショナルデータベースのうちAmazon Auroraを採用した理由としては、Amazon Auroraが高い可用性と耐久性を実現でき、スケーリングも比較的柔軟であるためです。また、他のデータベースエンジンに比べ高いパフォーマンスを実現できるのもAmazon Auroraを採用した理由の一つです。
一般的にAmazon RDSやAmazon Auroraなどのリレーショナルデータベースは、多数のコネクションを同時に開いたり、頻繁にコネクションを繋ぎなおしたりすることを想定して設計されておらず、急激なアクセスの増加によってコネクションプールの枯渇が問題になる場合があります。そうならないようにAWS LambdaからAmazon AuroraへはAmazon RDS Proxyを経由してアクセスしています。
これらデータベースサービスの組み合わせにより、可用性や耐久性が高く、柔軟に拡張可能なサービスを実現しています。
セキュリティに配慮しつつAmazon EC2のコンピューティングパワーを活用
本サービスでは、バッチ処理やAIによる推論処理にAmazon EC2を利用しています。Amazon EC2を採用することで、プログラムの長時間実行や実行環境を細かいカスタマイズ、強力なコンピューティングリソースのニーズに対応しています。
Amazon EC2の処理対象となるデータはAmazon S3に格納し、処理結果をAmazon AuroraやAmazon DynamoDBに格納しています。こうすることでAmazon EC2と各コンポーネントとの連携はデータストアを軸とした疎な連携を実現しています。
一方でAmazon EC2を利用するということは、セキュリティに配慮したネットワーク構成を利用者自身でしっかりと検討し構築する必要があります。アーキテクチャ図では省略していますが、プライベートサブネットにEC2インスタンスを配置し、NATゲートウェイやbastionホストを利用して外部からのアクセスをコントロールしています。また、EC2インスタンスに与える権限を必要最小限に絞ることでセキュリティリスクを極小化しています。
このように、AWSのマネージドサービスをうまく活用することでセキュアかつ高い柔軟性を持つサービス(SaaS)を実現することが可能です。AWSのマネージドサービスを中心に構成を考えることで、インフラストラクチャの管理・運用・保守コストを下げることができ、柔軟性やスケーラビリティも向上させることができます。また、実際に検証を行いながら最適な構成を見つけることで、システムの効果的な運用が可能となります。
総合売買審査サービス