AWS Startup ブログ

スタートアップが AWS Amplify を使うべき3つの理由

こんにちは、スタートアップ ソリューションアーキテクトの水馬です。

今回のテーマは AWS Amplify です。

みなさん Amplify はご存知でしょうか? Amplify は AWS を使用したスケーラブルな Web およびモバイルアプリ開発のためのフレームワークです。近年の複雑化するアプリケーションでは多くの場合、複数の AWS サービスを組み合わせてサービスを構築する必要があります。開発者はバックエンドの構築に加え、これらと連携する多くのソースコードをアプリケーションに実装する必要がりました。 Amplify を用いれば、複雑なバックエンドの構築、アプリケーションとの統合を簡略化し、開発者は本質的な機能の開発に集中することができるようになります。

今回は、スタートアップ において、 Amplify を導入すべき3つの理由をご紹介したいと思います。

目次:

 

AWS Amplifyについて

まずはじめに改めて AWS Amplify についておさらいしましょう。

Amplify とはサーバーレスなバックエンドをセットアップするための CLI、フロントエンドで利用できる UI コンポーネント、CI/CD やホスティングのためのコンソールを含む Web およびモバイルアプリ開発のためのフレームワークです。

Amplify には以下 3 つの構成要素が存在します。

  • Amplify CLI
  • Amplify Framework
  • Amplify Console

Amplify CLI

Amplify CLI はコマンドラインから AWS のバックエンドを構築できるインターフェースです。AWS のバックエンドを構築するにはマネジメントコンソールから開発を行う方法や、AWS CloudFormation など Infrastructure as Code の仕組みを用いる必要がありました。 Amplify CLI を用いれば コマンドラインから対話形式にバックエンドを構築できます。Amplify CLI はバックエンドの構築だけでなく、バックエンドとの連携に必要な設定ファイルやソースコードを自動で 生成 してくれます。 開発者はわずかな工数で認証機能や API 、リアルタイム通信、ホスティングといったアプリケーションの基盤を構築することができます。

 

Amplify Framework

Amplify Framework は、AWS のバックエンドと連携する処理をわずかな行数で記述できる クライアントフレームワーク です。 iOS、Android、Web(React/Vue/Angular)、React Native にそれぞれ最適化されたインターフェースを提供します。先ほど紹介した Amplify CLI と合わせて利用することで、バックエンドの開発、アプリケーションとの統合を極めて少ない工数で実装することができます。

 

Amplify Console

Amplify Console は SPA (シングルページアプリケーション)や静的サイトのホスティング、CI/CD の運用を自動化するマネージドサービスです。 Github や AWS CodeCommit のようなソースリポジトリと連携ることができます。また、ブランチごとにテスト環境を自動で構築したり、特定の環境のみ Basic 認証を付与するといった、柔軟な開発フローの設計が可能です。静的サイトであれば Amplify を用いなくても使用できるサービスです。

 

スタートアップが AWS Amplify を使うべき3つの理由

では、ここから本題である「スタートアップが AWS Amplify を使うべき理由」について考えていきましょう。

 

理由1: 本質的な作業に集中し、サービスを早くリリースができる

モダンなサービスでは、以下のような実装が必要な場合も多いでしょう。

  • 認証機能
  • アクセス権限制御ロジックの実装
  • WebSocket サーバーの構築、運用、監視
  • ネイティブアプリの Push 通知基盤の構築
  • データ分析のためのダッシュボードの開発

これらはサービスにとって非常に重要な要素ではありますが、いずれもユーザメリットに直結するものではありません。最速でユーザに価値を届けるには、サービスの本質的な開発に注力すべきでしょう。 Amplify はこれらの「差別化に繋がらない重労働 (Undifferentiated Heavy Lifting) 」を簡単に実装する仕組みが備わっています。

Amplify が提供する機能一覧 https://aws-amplify.github.io/

 

Amplify CLI, Amplify Framework を用いることで、これらの機能をシンプルに実装することができます。いくつか具体的なユースケースを見てみましょう。

 

ユースケース1: 認証が必要な画面を作成したい

Amplify は簡単に実装できる認証コンポーネントを提供しています。認証コンポーネントは、サインイン、サインアップ、パスワード再発行フロー、 MFA (多要素認証)といった認証の仕組みを提供してくれます。amplify add auth コマンドを実行し、対話的に必要なことを選択していけば、バックエンドで Amazon Cognito が自動的にプロビジョニングされる仕組みになっています。また、 Cognito から発行される JWT (JSON Web Tokens) を用いたユーザセッションの管理や AWS リソースへのアクセス管理を Amplify に委譲することができ、開発者はわずかなコードでセキュアなシステムを構築することができます。

 

ユースケース2: Websocket を用いたリアルタイム通信の基盤を構築したい

Amplify は REST API や GraphQL の API エンドポイントを構築することができます。amplify add api コマンドを実行し、対話的に API の仕様を選択していくことで API のエンドポイントを構築することができます。 API エンドポイント構築のオプションで GraphQL を選択すると、 AppSync をプロビジョニングすることができます。 AppSync は、 GraphQL を使用してアプリケーションが必要なデータを正確に取得できるようにするマネージド型サービスです。 AppSync は Subscription と呼ばれる Websocket 通信の仕組みが存在し、認証の仕組みと組み合わせることでセキュアな Websocket の仕組みを構築することができます。

 

ユースケース3: データ分析のためのダッシュボードからユーザの動向を確認したい

Amplify ではデータ分析のダッシュボードを構築するための仕組みを構築することができます。amplify add analytics コマンドを実行することで Amazon Pinpoint がプロビジョニングされ、アクティブデバイス数やユーザが使用している OS やプラットフォームの情報などを自動的に可視化することができます。また、アプリケーション独自の属性(性別や年齢、好きな食べ物 等)を集計することもでき、サービスの特性に応じて柔軟にエンゲージメントの可視化を行うことができます。

Pinpoint によるユーザエンゲージメントの可視化の例

これらはいずれもサービスにとって重要な機能たり得ますが、ゼロから構築、実装するのは大変です。 Amplify を使えばこれらの機能を自分で実装することなく、本質的に価値のある機能の実装に集中することができます。

 

理由2: スケールしやすい

スタートアップにとって、自社のサービスが成長するのは喜ばしいことです。サービスによってはわずかな期間でトラフィックが数百倍に拡大するといったケースもあるでしょう。当然のことながら、サービスの成長に合わせてシステムもスケールしなければいけません。初期リリースの段階から将来的なスケールを考慮できていれば問題ないですが、サービスを世に出すことが最優先で、将来のスケーラビリティについては二の次になってしまっているスタートアップも多いのではないでしょうか。「事業の成長にシステムのスケールが追い付かず、あるタイミングでシステムのフルリプレースが必要になった・・」というのはよく聞く話です。

Amplify が使用するバックエンドは Amazon DynamoDBAWS Lambda 、 AppSync のようなスケールすることを前提としたコンポーネントで構築されます。サービスの成長に伴い、実装の方式やバックエンドを再構築する必要はありません。

例えば、データストアとして利用される DynamoDB は事実上無限のストレージ容量とパフォーマンスニーズに応じたプロビジョニングを提供することが可能です。サービスのユーザが数百倍、数千倍になったとしても耐えうる強力なスケーラビリティをリリースの初期段階から構築することができます。

サービスの成長が予想しにくいスタートアップにとって、初期段階からスケーラビリティの心配をしなくても良いというのは大きなメリットです。

 

理由3: ビジネス成長に伴う環境の変更に強い

システムのスケーラビリティと同時に将来の事業ニーズや開発スタイルの変化に如何に柔軟に対応できるかということも考慮しておく必要があります。 Amplify はビジネスの成長に伴う様々な変化に対し柔軟に対応することができます。「開発環境の変化」「ビジネスニーズの変化」という観点から Amplify の柔軟さについて見ていきましょう。

 

開発環境の変化

エンジニア組織が拡大すると、一つの環境で開発を進めることが難しくなります。多くの企業が本番環境、ステージング環境、テスト環境といった複数の環境で開発フローを運用しているでしょう。開発環境が増えるに伴い、各環境ごとのバックエンドの構築が必要になります。

Amplify には multi environment という機能が存在します。ユーザはいくつかのコマンドを発行することで、本番環境と全く同じバックエンドを構築することができます。

 

また、SPA のような静的ホスティングが必要なアプリケーションの場合は、 Amplify Console を用いることで環境を容易に構築することができます。 AWS CodeCommit や Github のようなコードリポジトリと連携するだけで、CDN、ホスティング、CI/CD 環境が自動で構築されます。また、ブランチ毎にテスト環境を構築するといったことも可能です。

 

ソースコードのリポジト連携するだけでホスティング、CI/CD 環境が自動で構築される

Amplify は開発組織がスケールしても容易に環境を複製したり、品質を担保する仕組みが存在します。開発者は組織の規模に応じて柔軟に開発環境をスケールさせることが可能です。

 

ビジネスニーズの変化

Amplify を用いれば開発者は非常に少ない工数でバックエンドを構築できるとお伝えしてきました。しかし、サービスが大規模になると、CloudFormation や AWS Cloud Development Kit (AWS CDK) を用いたバックエンドの構築が必要になるケースがあるかもしれません。こういった場合でも Amplify は CloudFormation や AWS CDK を併用した柔軟なバックエンドの開発が可能です。

Amplify CLI は内部的に CloudFormation の json ファイルを中間成果物として作成し、それをバックエンドに反映しています。

Amplify Consoleのバックエンド構築イメージ

AWS のバックエンドは、それが Amplify から作成されたものなのか、 AWS CDK から作成されたのか、人が手で書いた CloudFormation テンプレートなのかを意識しません。Amplify CLI は CloudFormation のテンプレートファイルを境界に AWS のバックエンドと疎結合になっているため、スタンダードな構成は Amplify CLI で構築し、Amplify CLI で対応できない要件に対しては AWS CDK や手書きの CloudFormation を使用するといった柔軟な構築が可能になります。

例えば、以下の画像の例では AppSync から DynamoDB を呼び出す構成は Amplify CLI を用いて構築し、DynamoDB ストリームを用いた Amazon Elasticsearch Service 、S3 への書き込みは AWS CDK 、手書きのテンプレートで構築しています。

Amplify Console, CloudFormation, CDKとの併用が可能

不確実性の高いスタートアップにとって、ビジネス要件に応じて開発スタイルを柔軟に変更できるというのは大きなメリットでは無いでしょうか?

 

AWS Amplify に関するよくある質問

 Amplify はインフラや AWS の知識がなくても利用できますか?

「スタートアップが Amplify を使うべき理由1: 本質的な作業に集中し、サービスを早くリリースができる」で紹介したように、 Amplify は非常にシンプルな実装が可能なクライアントライブラリと対話式にバックエンドを構築できる仕組みを有しています。シンプルな構成であれば AWS の知識がなくてもサービスをリリースすることが可能です。同時に、 Amplify はスケーラブルなフレームワークです。サービスが大規模になるに連れて、個別のサービスの設定が重要になってきます。(例: DynamoDB のキー設計 等) また、複雑な業務要件に応じてサービスを設計する場合、各 AWS サービスの仕様や OSS のエコシステムについて理解していることで開発をより効率的に進めることもできるでしょう(例: Cognito の OAuth 設定や AppSync における GraphQL の仕様 等)。大規模なサービスや、複雑な要件下では、 AWS やインフラの知識があればよりバックエンドの特性を活かすことができます。

 

既存のプロジェクトにも Amplify を導入することはできますか?

はい。既存のプロジェクトにAmplifyを導入することが可能です。Amplify Framework は、他のクライアントライブラリ同様、いつでもあなたのプロジェクトに追加していただくことが可能です。(JavaScript であれば npm install @aws-amplify )

また、Amplify Framework から既存のバックエンドのリソースを呼び出すには、JavaScript の場合 Amplify.configure() メソッドに aws-exports.js の内容でなく、任意のリソース情報を渡していただくこととで可能になります。

aws-exports.js を使った自動セットアップの例:

import Amplify, { Auth } from 'aws-amplify';
import awsconfig from './aws-exports';
Amplify.configure(awsconfig);

Authカテゴリをカスタムセットアップする例:

import Amplify, { Auth } from 'aws-amplify';

Amplify.configure({
    Auth: {

        // REQUIRED only for Federated Authentication - Amazon Cognito Identity Pool ID
        identityPoolId: 'XX-XXXX-X:XXXXXXXX-XXXX-1234-abcd-1234567890ab',
        
        // REQUIRED - Amazon Cognito Region
        region: 'XX-XXXX-X',

        // OPTIONAL - Amazon Cognito Federated Identity Pool Region 
        // Required only if it's different from Amazon Cognito Region
        identityPoolRegion: 'XX-XXXX-X',

        // OPTIONAL - Amazon Cognito User Pool ID
        userPoolId: 'XX-XXXX-X_abcd1234',

        // OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)
        userPoolWebClientId: 'a1b2c3d4e5f6g7h8i9j0k1l2m3',

        // OPTIONAL - Enforce user authentication prior to accessing AWS resources or not
        mandatorySignIn: false,

        // OPTIONAL - Configuration for cookie storage
        // Note: if the secure flag is set to true, then the cookie transmission requires a secure protocol
        cookieStorage: {
        // REQUIRED - Cookie domain (only required if cookieStorage is provided)
            domain: '.yourdomain.com',
        // OPTIONAL - Cookie path
            path: '/',
        // OPTIONAL - Cookie expiration in days
            expires: 365,
        // OPTIONAL - Cookie secure flag
        // Either true or false, indicating if the cookie transmission requires a secure protocol (https).
            secure: true
        },

        // OPTIONAL - customized storage object
        storage: new MyStorage(),
        
        // OPTIONAL - Manually set the authentication flow type. Default is 'USER_SRP_AUTH'
        authenticationFlowType: 'USER_PASSWORD_AUTH'
    }
});

Amplify を学ぶために何から始めれば良いですか?

こちらの公式ドキュメントから詳細を知ることができます。また、こちら のブログにて、ステップバイステップの Amplify ハンズオンイベントレポートを読むことができます。AWS Loft Tokyo では、約二ヶ月に一度こういった AWS Amplify のハンズオンワークショップイベントを開催しています。ぜひイベント開催予定をチェックしていてください。

もし Amplify を触ってみてわからないことがあれば、AWS Loft Tokyo の Ask An Expert カウンターに聞きに来てください! AWS のエキスパートが歓迎します。

参考:週刊Ask An Expertシリーズ

 

さいごに

いかがでしょう。Amplify のメリットについて少しでもイメージが湧きましたでしょうか。

Amplify をうまく活用し、お客様のサービス成長の一助になれればと思います。

AWS Startup ブログではこれからも Amplify に関する情報を紹介していきますので楽しみにしていてください!