Amplify SNS workshopやってみる
Amplify SNS Workshopを実施します。
目的
Amplifyの使い方の確認とDynamoDBを知るため
いざ
まず、言われた通りに
mkdir amplify-sns-workshop
cd amplify-sns-workshop
npx create-react-app boyaki
cd boyaki
amplify init
んで、
npm start
また言われた通りにAuth(ログイン機能)を追加する
amplify add auth
amplify status
Current Environment: dev
┌──────────┬────────────────┬───────────┬───────────────────┐
│ Category │ Resource name │ Operation │ Provider plugin │
├──────────┼────────────────┼───────────┼───────────────────┤
│ Auth │ boyaki00000000 │ Create │ awscloudformation │
└──────────┴────────────────┴───────────┴───────────────────┘
そして、
npm install
npm install --save aws-amplify@3.3.14 @aws-amplify/ui-react@0.2.34
import React from 'react';
import Amplify from 'aws-amplify';
import { AmplifyAuthenticator, AmplifySignUp, AmplifySignOut } from '@aws-amplify/ui-react';
import { AuthState, onAuthUIStateChange } from '@aws-amplify/ui-components';
import awsconfig from './aws-exports';
Amplify.configure(awsconfig);
const App = () => {
const [authState, setAuthState] = React.useState();
const [user, setUser] = React.useState();
React.useEffect(() => {
return onAuthUIStateChange((nextAuthState, authData) => {
setAuthState(nextAuthState);
setUser(authData)
});
}, []);
return authState === AuthState.SignedIn && user ? (
<div className="App">
<div>Hello, {user.username}</div>
<AmplifySignOut />
</div>
) : (
<AmplifyAuthenticator>
<AmplifySignUp
slot="sign-up"
formFields={[
{ type: "username" },
{ type: "password" },
{ type: "email" }
]}
/>
</AmplifyAuthenticator>
);
}
export default App;
これをApp.jsに書き換えた後に、npm startをすると、、、
errorになりますよね???
これで、詰まっている人が多くいる様子。私も詰まりました。
解決策
(https://zatoima.github.io/aws-cognito-setting-amplify/)
(https://zenn.dev/nasubita/scraps/a258099a7a6bb8)
npm list --depth=0
npm remove @aws-amplify/ui-react
npm install @aws-amplify/ui-react@1.2.25
npm list --depth=0
で、これでも解決しなかったんですが、
npm cache clean
npmのキャッシュを削除して、、、
そして、node_modulesとpackage-lock.jsonを丸々削除したあとに
npm install
npm start
これで解決しました。
実はこれを書きたくて、このスクラップを始めたと言っても過言ではありません。
とりあえず、次に進みます。
じゃ、さっそくアカウントを作ってみよう!
ということで、実行
1. ブラウザでhttp://localhost:3000にアクセスします
2. Create acccountをクリックします
3. Username、Password、Emailを入力し、CREATE ACCOUNTをクリックします
4. Passwordは8文字以上である必要があります
5. 入力したメールアドレスに送付されたConfirmation Codeを入力し、CONFIRMをクリックします
6. Username、Passwordを入力しログインしましょう
7. Hello, ${ユーザー名}と表示されればログイン完了です
あれ?できない!
amplify push
これをするのを忘れていたみたいです。
できました!
ここで、ついでに,Apmlify Consoleにいって、ブラウザ上で確認できるようにONにしておくといいかもしれません
いつアップデート(Amplify Push )したかすぐにわかりました。
ここで、へ???ってなったこと
GraphQLを選択すると、GraphQLのマネージドサービスであるAWS AppSyncがプロビジョニングされます
。AWS AppSyncはIAM認証、API KEY認証、Amazon Cognito User Pool認証、OIDC認証の四つの認証が用意されており、この中の一つ、あるいは複数を同時に使用することが可能です。 ちなみに、RESTを選択するとAWS API Gateway + AWS Lambda + Amazon DynamoDB がプロビジョニングされます[参考]。
https://amplify-sns.workshop.aws/ja/30_mock/20_post_back_end.html
え?GraphQL = NoSQL = DynamoDBかと思ってた!
REST API = API Gateway + AWS Lambda + Amazon aurora DBかと思っていた。。。
REST API と API Gateway + AWS Lambda + Amazon DynamoDBは、共存できるのね、、、
じゃあ、REST API は、NoSQL だろうが、なかろうが、関係ないってこと????
ここは勘違い、後程調べてみよう
次!
amplify mock api
Failed to start API Mock endpoint Error: Command failed with exit code 1: java -version
The operation couldn’t be completed. Unable to locate a Java Runtime.
Please visit http://www.java.com for information on installing Java.
Java入れるの忘れてました。
brew cask install corretto
brewの記法が変わってました。(結構前ですよね?)
brew install corretto --cask
installer: The install was successful.
🍺 corretto was successfully installed!
OK!
amplify mock api
Failed to start API Mock endpoint InvalidDirectiveError: @auth directive with 'userPools' provider found, but the project has no Cognito User Pools authentication provider configured.
え?だめらしい、、、
仕方ないので、時間がかかるけど、これをやってみる。
amplify push
Choose the code generation language target javascript
Enter the file name pattern of graphql queries, mutations and subscriptions src/graphql/**/*.js
Do you want to generate/update all possible GraphQL operations - queries, mutations and subscriptions Yes
Enter maximum statement depth [increase from default if your schema is deeply nested] 3
→ 最後は、default 2なので、そのまま勢いでEnterを押さず、3と入力するのを忘れずに
そして、待機。。。。
✔ Generated GraphQL operations successfully and saved at src/graphql
✔ All resources are updated in the cloud
GraphQL endpoint: ※※※※※※※※※※※※※※※※※※※※※※※※
GraphQL API KEY: ※※※※※※※※※※※※
GraphQL transformer version: 2
できました!
おはようございます。今日もやっていきましょう
amplify status
Current Environment: dev
┌──────────┬────────────────┬───────────┬───────────────────┐
│ Category │ Resource name │ Operation │ Provider plugin │
├──────────┼────────────────┼───────────┼───────────────────┤
│ Auth │ boyakid004686a │ No Change │ awscloudformation │
├──────────┼────────────────┼───────────┼───────────────────┤
│ Api │ boyaki │ No Change │ awscloudformation │
└──────────┴────────────────┴───────────┴───────────────────┘
GraphQL endpoint: https://xxx
GraphQL API KEY: xxx
GraphQL transformer version: 2
ここからやっていきます。
amplify mock api
MacBookPro:boyaki niheitomotaka$ amplify mock api
✅ GraphQL schema compiled successfully.
Edit your schema at ./amplify-sns-workshop/boyaki/amplify/backend/api/boyaki/schema.graphql or place .graphql files in a directory at ./amplify-sns-workshop/boyaki/amplify/backend/api/boyaki/schema
Creating new table PostTable
Running GraphQL codegen
✔ Generated GraphQL operations successfully and saved at src/graphql
AppSync Mock endpoint is running at http://xxx.xxx.xxx:20002
なんかGraphQLがうまくいかない。。。
これを試す。
ここには、
@auth(rules: [{ allow: owner, queries: null }])
こうしろと書いてある。
、、、、上記、解決してないけど、別の問題も発生したので貼っておく。
参考になりそうな記事