はじめに
AmplifyでSNSが作れるワークショップ、「Amplify SNS Workshop」を試してみたので、所感やハマりどころなどを共有します。
実装イメージ
利用するリソース
-
- Webおよびモバイルアプリ開発の為のフレームワーク。
- Amplify CLI
- バックエンドをコマンドラインからセットアップできるツール。
- Amplify CLI
- Webおよびモバイルアプリ開発の為のフレームワーク。
-
- Webおよびモバイルアプリの認証、許可、ユーザ管理を行えるサービス。
-
- 複数のデバイス、ユーザが使用するWebおよびモバイルアプリのデータをリアルタイムで管理及び同期できるサービス。
-
- NoSQLのDBサービス。耐久性があり、低レイテンシ―。
-
- 完全マネージド型の全文検索エンジン。
作成できる機能
-
新規会員登録、ログイン、ログアウト機能 (Amazon Cognito)
-
メッセージのList,Post機能 (AWS AppSync,GraphQL,DynamoDB)
-
ユーザのフォロー機能 (GraphQL,DynamoDB)
-
Homeのタイムラインに自分とフォローしたユーザのコメントが表示される
-
メッセージ検索機能(GraphQL,ElasticSearch,DynamoDB)
はまったところ
- GraphQLのエラー
- 全文検索機能実装を行っている際にエラーが出ました。
- 掲載されているファイルをダウンロードしてコピペするとエラーになります。
-
@searchable
ディレクティブを適切な箇所に挿入することで解消できます。
-
当該コード
type Post
@model (
mutations: {create: "createPost", delete: "deletePost", update: null}
timestamps: null
subscriptions: { level: public}
)
@auth(rules: [
{allow: owner, ownerField:"owner", provider: userPools, operations:[read, create, delete]}
{allow: private, provider: userPools, operations:[read]}
{allow: private, provider: iam ,operations:[create]}
])
@key(name: "SortByTimestamp", fields:["type", "timestamp"], queryField: "listPostsSortedByTimestamp")
@key(name: "BySpecificOwner", fields:["owner", "timestamp"], queryField: "listPostsBySpecificOwner")
{
type: String! # always set to 'post'. used in the SortByTimestamp GSI
id: ID
content: String!
owner: String
timestamp: Int!
}
修正後
type Post
@model (
mutations: {create: "createPost", delete: "deletePost", update: null}
timestamps: null
subscriptions: { level: public}
)
@auth(rules: [
{allow: owner, ownerField:"owner", provider: userPools, operations:[read, create, delete]}
{allow: private, provider: userPools, operations:[read]}
{allow: private, provider: iam ,operations:[create]}
])
@key(name: "SortByTimestamp", fields:["type", "timestamp"], queryField: "listPostsSortedByTimestamp")
@key(name: "BySpecificOwner", fields:["owner", "timestamp"], queryField: "listPostsBySpecificOwner")
+ @searchable
{
type: String! # always set to 'post'. used in the SortByTimestamp GSI
id: ID
content: String!
owner: String
timestamp: Int!
}
-
amplify publish
でエラーが発生することがあった-
特定の箇所ではないのですが、
amplify publish
を実行し、デプロイする際にエラーが発生することがありました。- 少し時間を空けて再度publishを行うことで問題なくデプロイできました。
-
おそらく、スタックの変更を行う際にどこかしらに問題が発生したようなのですが、原因を見つけることができませんでした。
-
所感
Amplifyでのバックエンドの実装がめちゃめちゃ簡単でちょっと面白かったです。
対話式で質問に答えていくだけで構築が行えるので、サクサク作れて楽しい。
ただ、使えるリソースが絞られているので、作ろうとしているサービスがAmplifyだけで実装できるのかどうかを検討してから取り組む必要があると思います。
また、基本はベストプラクティスに沿って作成を行っているようですが、結局サービスをある程度は知らないとチューニングや作りこみはできないのかなと思ったりしました。