AWS Amplifyを少し試して見た

AWS AmplifyはAWSのリソースを組み合わせてモバイルバックエンドを構築・管理するツールと、そのバックエンドと連携するためのライブラリを提供するプロダクト。
iOS、Android、ウェブホスティング、ReactNativeなどをサポートしており、ウェブではAngular、React、Vueなどと容易に繋ぎこめるようになっている。

以下のような点でアプリ開発をサポートしてくれる。

  • 必要なAWSのリソース構築を自動で行ってくれる
  • コードからAWSのリソースにアクセス/操作するためのライブラリ群やUIコンポーネントを提供
  • APIに対応するコードジェネレーション

試しに認証とAppSyncのAPIで簡単なサンプルアプリを作って見たが、特に引っかかる点もなく使いやすかった(リソース色々と作ったり削除したりして裏側色々と見てみたりしたので時間はかかった)
公式ドキュメントもよく整備されてて良い。

ちなみに同様のAWSのリソースを組み合わせたバックエンドの構築支援としてはMobileHubがあるが、しばらく前にMobileHub使ってみようかなと思って公式の案内に従っていたらいつの間にかAmplifyの方に案内されていて、MobileHubに戻る必要がない状態になっていた。基本はAmplifyを使えば大丈夫そう。

向いているもの

認証を伴うマルチユーザーアプリケーションの開発。もしくはプロトタイピング。

APIをGraphQL(AppSync)かREST(API Gateway+Lambda)か選べるが、いずれの場合もCogniteとの連携で認証ユーザーのデータアクセスを制御できる。
具体的にはユーザーが自分の所有するデータにしかアクセスできない、という当たり前の流れをサクッと作れる。

APIはコードジェネレーションによって自動で組み上がるので、バックエンドはとりあえずノンコーディングで使えるようになる。GraphQLを使うならスキーマ定義が必要になるくらいか。
サインアップとサインイン、パスワード変更、パスワード再発行といった部分もUI含めて提供されており、簡単にアプリに組み込むことができる。

機能と連携するサービス

  • ユーザー認証
    • Cognite
  • ホスティング
    • S3
    • CloudFront
  • API
    • AppSync(GraphQL)
    • API Gateway+Lambda(REST)
  • ストレージ
    • S3
    • DynamoDB
  • アナリティクス
    • Pinpoint
    • Kinesis
  • インタラクション(Chatbot)
    • Lex
  • Push Notifications
    • Pinpoint
  • サーバーレス関数
    • Lambda

ほかライブラリの機能として国際化のサポート機能などが付いている。

これらのリソースはCloudFormationで作成される。

自前で構築するのと何が違うの?

かかる手間。初動のスピード。

バックエンドの構築もそうだが、それらを操作するライブラリも提供されるのでAmplifyを使ったコードの書き方だけ覚えればいいというコーディング面での楽さもある。

初学者的にはとりあえず動かせると言うのは大きいかな。
制限事項やベストプラクティスなど、実際に動かしながら各サービスの仕組みを学んでいける。

一方で自前で構築した方がもちろん柔軟性はある。
インフラ管理にかける時間とコストがあり、担当できる人間がいるなら自前で構築するにこしたことはない(まあそう言う状況にないので利用を検討するのだが)

マルチステージ

開発環境とステージング、本番などのマルチステージは個人的に要件として必須なので調べたのだがMultiple environments and team workflows (beta)というのがそれっぽい。
今のところベータということでAmplify CLIを以下のコマンドで入れ直す必要がある。

npm install -g @aws-amplify/cli@multienv

軽く試したところ一応動いて環境ごとに対応したバックエンドも作れるが、amplify env listがエラーを吐いて死んだりするので安定はしてない模様。

開発者ごとに環境を作ることも簡単にできるようになるのでベータが取れたらAmplifyの売りになるフィーチャーなのでは。
逆にない現状はFirebase(プロジェクトIDを切り替えれば別環境となる)などに劣るとも言える。

AWS Amplify Console

新サービス「AWS Amplify Console」登場!簡単3ステップでWebアプリのCI/CD環境を構築! #reinvent

開発環境と本番デプロイだけで良ければAmplify Consoleでもいいっぽい?
東京リージョンにまだ来てないようだが。

参考

AWSの次世代JavaScriptライブラリ「AWS Amplify」の概要とReactアプリに導入する手順 #serverless #adventcalendar