Edited at

AWSのPaaS, SaaSを利用して開発を効率化する

More than 1 year has passed since last update.


はじめに


  • AWSにはサーバやネットワークを提供するIaaSだけでなく、様々なPaaSやSaaSが提供されている

  • これらを利用することで開発効率を上げることが出来る

  • 今後の指針とするためにも、まずはどんなものがあるのか、どんな使い方が出来るのかを列挙してみる


対象


  • AWSって名前を聞いたことはあるけど実際よくわかってない人

  • クラウドっていうのはネット上にサーバがあるだけだと思ってる人


そもそもIaaS, PaaS, SaaSとは


IaaS


  • Infrastructure as a Service

  • サーバやストレージ、ネットワークといったインフラを提供するサービス

  • レンタルサーバなどのホスティングサービスと違い、サーバのスペックやOS等をユーザが選択することが出来る

  • AWSのEC2やGCPのComputeEngineなどが該当


PaaS


  • Platform as a Service

  • OSやミドルウェアを含めたプラットフォームを提供するサービス

  • インフラを管理する必要がなくなり、アプリケーションの構築に集中できるという特徴がある

  • AWSのLambdaやElastic Beanstalk、GCPのAppEngineなどが該当


SaaS


  • Software as a Service

  • アプリケーションまで含めたソフトウェア全体を提供するサービス

  • 利用者はインターネット上で利用するだけでいい

  • AWSのS3やCloudWatch, GoogleAppsのGmailやGoogleDriveが該当


分類方法


  • TomcatやNginxなどのミドルウェアを用意する必要があるのはIaaS

  • ソースコードなどのアプリケーションだけ用意すればいいのはPaaS

  • 設定するだけですぐ使えるようになるのがSaaS

  • 割と使い方によって変わる


    • 例えばS3を直接クラウドストレージとして使えばSaaSといえる

    • が、アプリケーションのバックエンドとして使うとPaaSっぽい

    • なので、あまり分類に意味はない気がする




AWSの代表的なPaaS, SaaS


Lambda


  • サーバの設定などなく、コードをデプロイするだけで実行可能になる

  • ElasticBeanstalkは構築をしてくれるサービスだが、こっちはサーバを意識する必要は全くない

  • PaaSではなくFaaS(Function as a Service)とも呼ばれる


S3


  • 主に画像や動画などの静的ファイルを置いておくクラウドストレージ

  • 一般的にはアプリのバックエンドなどで利用するためPaaSと言えるが、別に単体でも使えるのでSaaSとも言える


Cognito


  • ユーザーの認証や管理、デバイス間の情報同期を行える

  • TwitterやGoogleなどのOpenID Connectプロバイダーとの連携も可能


API Gateway


  • 簡単にRESTfulAPIを作成、公開、管理できる

  • モニタリングやアクセス権の管理まで可能


CloudFront


  • ContentsDeliveryNetwork(CDN)サービス

  • キャッシュサーバーを利用したレイテンシの高速化やSSL通信、DDos対策などのセキュリティ設定が可能


DynamoDB


  • フルマネージドのKVS

  • テーブルを作成するだけですぐにスケーラブルなDBが利用できる


STS


  • AWSのリソースに対する一時的なアクセス権を管理できる

  • OAuth2.0でいう認可サーバの役割


ユースケース


バックエンドなしでSPAを作る


  • バックエンドのコーディングをすることなくユーザ認証を備えたSPAを作成出来る

  • 一部の仕様がAWSに縛られるので普通よりSPAのコード量は増えるかもしれない

  • が、自分でユーザ管理やアクセス管理を作るよりだいぶ楽かつ安全

    SPA.PNG



  • やっていることは


    1. Route53で独自ドメインを設定

    2. CloudFrontで高速化&SSL化

    3. S3で作成したSPAを配信

    4. Cognitoでユーザの認証を実施

    5. STSでユーザの認可を実施

    6. アクセス権にしたがってDynamoDBへアクセス




サーバを立てずにユーザ統合をする


  • 別々にユーザ管理を行っていたサービスのユーザ統合を行うような場合を想定

  • 普通にやると、各サービスとは別にユーザ管理用のサーバを立てる必要がある

  • AWSを利用すると、簡単にサーバレスな認証APIを作ることができる
    serverless.PNG

  • やっていることは


    • Cognitoを利用してユーザの管理、認証を行う


      • 外部からのユーザ取り込みにも対応している



    • Cognitoを利用するための処理をLambdaを利用して共通化する

    • API Gatewayを利用してRESTfulAPIとして公開



  • これによって、各サービスからRESTfulAPIを呼び出すだけで認証を行うことが出来るようになる


    • Cognitoの仕様上の制約は諸々あるので、サービス側の修正は多少必要




まとめ


  • とりあえずざっと書き出してみました

  • この辺を手がかりに何を勉強すればいいのか考えると良いと思います