# AWS Amplifyの使いどころ ## 自分が触っている構成ざっくり 自分が触っているのはAmplify + React.jsの構成 また別チームでAmplify + ReactNativeでやっていてAmplifyのバックエンドは共有している ただしCognito User Poolはそれぞれで分ける構成なので、結構しんどめのカスタマイズをせざるを得なかった というか2020/06/12現在も辛い思いをしている ## Amplifyを使うかどうかの判断基準ざっくり カスタマイズが必要 ≒ Amplify CLIで質問に答えるだけで構築できるインフラ・機能で十分ではない - カスタマイズなしに使えるユースケース => 使うと良さそう - カスタマイズすれば使えるユースケース => 開発は苦労するが運用は楽になるかも - カスタマイズしても使えないユースケース => もちろん使えない [追記] Cognitoを2つ用意する必要があるならAmplifyの利用は慎重に検討したほうが良い。 - Amplifyがauthカテゴリーの利用しか想定していないハードコーディングされているような個所がある。 - 「通常通りAmplifyを使うチーム + DBなどのリソースはAmplifyで作成されたものを使うがそれ以外は自前のサーバーチーム」みたいな構成の方が平和かもしれない。 ## 感想 - ユースケースが合っているのであれば使うことでインフラ管理なども含め大幅に労力が削減できる - 以下から自分の関係しそうな内容を眺めて使い方の例の範囲でできそうならユースケースに合ってると思って良い - https://docs.amplify.aws/start/q/integration/js - https://docs.amplify.aws/lib/q/platform/js - https://docs.amplify.aws/cli - また `amplify` コマンドを実際に叩いてみると意外といろいろ作成できることがわかるのでそれも余裕があれば確かめると良い - ただし `amplify` コマンドの使い方の心構えは今までのGitHubワークフローとちょっと違うところもあるので注意 1. Gitでファイルは復元できるからといって油断してはいけない。あくまで中心はAmplifyの `env` である - 例えば `amplify delete` とかやるとGitでファイルを復元してもクラウド側のAmplifyのリソースは元に戻せない 2. https://docs.amplify.aws/cli/teams/overview はよく読んでおくこと 3. さらに `amplify` コマンドと `git` コマンドを使っていろいろ実践しておくこと - 自分の場合はドキュメント読んだだけではこのことが理解できていなかった - カスタマイズが必要な案件の場合はまず本当に実現できるのか慎重に判断すると良い - ドキュメントや使ってみている人たちの記事などできる限り見たほうが良い - 安易に予想してアーキテクチャの設計を進めてしまうと「実はできない」とか「バグでできないっぽい」が起こりうる - カスタマイズする場合はCloudFormationやIAMの知識がそれなりにないとキビシイことになるかも - ドキュメントが不十分なものが多々 - issueや記事を探さないとわからないことが結構ある - それでもわからないとソースを読むことになるが、packageが多すぎて探すのもそれなりに苦労する - https://github.com/aws-amplify/amplify-js/tree/master/packages - カスタマイズが必要な場合は特に注意 - 学習コストがそこそこ高いようには思う - カスタマイズする場合だけかもしれない - 関わるサービスの内容自体もそれなりに理解しないと使いこなすのはキビシイ - 自分はCognitoやAppSync(GraphQL)など初めて触るものも多かったため結構時間を費やした - ローカル環境での開発(mock)はそこそこできる - AppSync + DynamoDBなどはmockが使えるのでローカルでも開発できる - ただしElasticsearchやAurora Serverlessを使ったりなどローカルでテストできないものもある - 判断するには https://docs.amplify.aws/cli/usage/mock を読むのが早いと思う - `amplify pull` によるバックエンドの共有機能は意外と貧弱 - 単に `aws-exports.js` を作成するだけ - pullしただけのリポジトリでは `amplify status` のような基本的なコマンドとかも使えない - 一番困ったのは `amplify codegen` はフロントエンドでそれぞれ実施したいはずだけどそれができなかった - カスタマイズが必要だが実現できそうならAmplifyを使うときのメリット - CloudFormationをなんとか維持しようという考えがAmplifyのおかげで高められる? - 最初の段階では辛いことも多いがこれは運用に入ったときにとんでもなくメリットになると個人的に思う