AWS Amplifyを使ってるんだけどよくわからんので復習
WEB+Androidアプリを作成するのに、サーバーレスにしたいということで、AWSが選定されました。なおわたしはAndroid担当。AWSもネイティブアプリも初めてなので手探りof手探り。
Amplifyで行きまーすと言われたのですが、チュートリアルに沿って手を動かしてみてもいまいちよくわからないので座学で復習。わかってそうなひとたちを探す。
なお手を動かしたのはこちらを参考に。
所用時間60分って書いてるから、ふーん爆速ねぇ、って思ったんだけど、最初は全然できませんでしたよ。何日かかかりましたよ。
結局3回くらいこなしたけれど、まだ腹落ちしてないよ。
閑話休題。
AWS Apmlifyは、モバイルアプリケーションとウェブアプリケーションを構築するためのAWSがOSSで公開する開発プラットフォームです。
簡単に言えば、AWSでもFirebaseみたいにバックエンドはお任せでフロントだけ開発できるようにしてくれるフレームワークみたいなやつです。
AWS Apmlifyとは
AWSのサービスを用いた、Web・モバイルアプリを最速でリリースするための開発プラットフォームです。
React, Vue, AngularなどでのSPAや、Gatsby, Hugoなどの静的サイトジェネレーターを用いたWebアプリケーションを最速で開発するためのプラットフォームと紹介されています。
アプリケーション開発者はフロントエンドの開発に集中でき、バックエンドとインフラはAWSにサーバーレスでお任せできます。
さらに、CI/CD環境の構築も自動で構築してくれます。このあたりはFirebaseとよく似ています。
AWSのサービスを駆使して同等な環境を構築できますが、175個もあるサービスから選定してアーキテクトするのはかなり時間がかかります。
そのコストをAmplifyが解決してくるということです。AWS Amplifyの以下のような特徴があります。
・最速でアプリを開発できる
・スケールするアプリを開発できる
・簡単にアプリを開発できる
サービスの立ち上げからグロースまでを行うことができることが特徴です。
なるほど。バックエンドを気にせずフロンドエンドに集中できて、爆速でリリースできるっていう代物か。で、いろんな機能を使えるプラットフォームがAmplify。
バックエンドを気にせずってのが気になるなぁ……素直にやるなら爆速なんだろうけど、凝ったことを要求されると詰むやつかな……
そしてAmplifyを使うには……まずAmplify CLIをインストール。CLIでバックエンドの設定をおこなうのだな。
そのあとの流れとしては、あらかじめつくっておいたKotlinのプロジェクトフォルダに $ cd して、 $ amplify init で初期設定。
Kotlinのモジュールレベルのgradleに認証モジュールを追加。
dependencies {
//たくさん書いてる//↓これを追加
implementation 'com.amplifyframework:core:1.4.0'
}
バージョンは、わかりません!最初のハンズオンチュートリアルから拾ってきただけ!
プロジェクトレベルのgradleにも何か追加しないといけないかも。チュートリアル見てみて。
そのあと各機能追加。Amazon Cognitoを使用した認証機能を追加するには、 $ amplify add auth
ごにょごにょ設定をしたら、 $ amplify push でクラウドに反映。
これ複数人でやってる場合は、$ amplify pull して設定を引っ張ってこないといけないんだろうけど、なんか不穏……
↓うーん、やっぱ?
遠隔でCLIでバックエンド構築のよしあしだなぁ……わたしはまだよしの境地にたどり着いていない……ぐぬぬ
あとはKotlinのモジュールレベルのgradleに認証モジュールを追加。
dependencies {
//たくさん書いてる//↓これを追加
implementation 'com.amplifyframework:aws-auth-cognito:1.4.0'
}
データベースはこれで追加。 $ amplify add api
最初に挙げたハンズオンより。
このモジュールでは、Amplify CLI とライブラリを使用してアプリケーションに API を追加します。作成する API は GraphQL API で、Amazon DynamoDB (NoSQL データベース) によってサポートされる AWS AppSync (マネージド GraphQL サービス) を利用します。GraphQL の概要については、このページにアクセスしてください。
API – 複数のソフトウェア仲介者間の通信および相互作用を可能にするプログラミングインターフェイスを提供します。
GraphQL – アプリケーションの型付き表現に基づくクエリ言語とサーバー側 API の実装。この API 表現は、GraphQL 型システムに基づくスキーマを使用して宣言されます。(GraphQL の詳細については、このページにアクセスしてください)。
また新しい単語がいろいろと……リンク先に行こうか。
AWS AppSync
スケーラブルな GraphQL API を使用してアプリケーション開発を加速するアプリケーション開発が加速できるという理由から、各組織では API の構築に GraphQL を選択しています。この API により、フロントエンドのデベロッパーは、複数のデータベースやマイクロサービス、そして API に対し、単一の GraphQL エンドポイントから迅速にクエリができるようになります。
AWS AppSync は、GraphQL API の開発を容易にする、完全マネージド型サービスです。このサービスは、AWS DynamoDB や Lambda、その他のデータソースとの安全な接続に必要な、面倒な作業を自動的に処理します。パフォーマンスを向上させるためのキャッシュや、リアルタイムの更新を可能にするためのサブスクリプション、そして、オフラインのクライアントを簡単に同期できるようにするクライアント側のデータストアなどが、簡単に利用できるようになります。デプロイが完了すると、API リクエストのボリュームに合わせた GraphQL API 実行エンジンの自動的なスケールアップとダウンが、AWS AppSync により行われます。
Amazon DynamoDB
1 桁ミリ秒単位で規模に応じたパフォーマンスを実現する高速で柔軟な NoSQL データベースサービスAmazon DynamoDB は、ハイパフォーマンスなアプリケーションをあらゆる規模で実行するために設計された、フルマネージド、サーバーレスの key-value NoSQL データベースです。
このkey-value NoSQLデータベースってのがね……正規化してきたRDBにごりごりSQL投げてきた身としては、えっ???並び替えやりたいんだがどうすれば???みたいなことがわんさか起こるという……まだ理解して使いこなせてないですね。
で、api を追加したら、サンプルスキーマが自動生成されると。それの中身を削除して、お好みのスキーマに置換。
$ amplify codegen models でKotlinプロジェクト内に、そのスキーマでのデータモデルが作成されます。
からの、 $ amplify push でクラウドに反映。
なお、$ amplify codegen models と $ amplify push は、Android Studioからもできるみたい。
で、Kotlinにもライブラリ追加。
dependencies {
//たくさん書いてる//↓これを追加
implementation 'com.amplifyframework:aws-api:1.4.0'
}
実際には、ほかの人がスキーマつくってたので、わたしはそれを取り込む形……こちらを参考にしました。
で、前述のハンズオンをこなしたあとにAWSコンソールにログインしてみると、使われていたのは、
・IAM(AWSのユーザーを作ったので)
・AWS Amplify(プラットフォーム。アプリが生成されている)
・Cognito(認証で使った。ユーザープールの中にユーザーがいる)
・AWS AppSync(データベース。APIが生成されている)
・Dynamo DB(実際のデータが格納されているのはここ)
・CloudFormation(Amplifyをごにょごにょしていたときの裏方さん)
こやつらがバックエンドの実態……でもいじり方はよくわからぬ。
うーーん、こんなとこ?
まだ微妙に腹落ちしてないので気持ち悪い……
記事を書くにあたってこちらも参考にしました。