Closed8

Amplify SNS workshopやってみる

niheinihei

Amplify SNS Workshopを実施します。

目的

Amplifyの使い方の確認とDynamoDBを知るため

いざ

まず、言われた通りに

mkdir amplify-sns-workshop
cd amplify-sns-workshop

npx create-react-app boyaki
cd boyaki

amplify init

んで、

npm start

niheinihei

また言われた通りに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

これで解決しました。

実はこれを書きたくて、このスクラップを始めたと言っても過言ではありません。
とりあえず、次に進みます。

niheinihei

じゃ、さっそくアカウントを作ってみよう!
ということで、実行

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 )したかすぐにわかりました。

niheinihei

ここで、へ???ってなったこと

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 だろうが、なかろうが、関係ないってこと????

ここは勘違い、後程調べてみよう

niheinihei

次!

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

できました!

niheinihei

おはようございます。今日もやっていきましょう

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

ここからやっていきます。
https://amplify-sns.workshop.aws/ja/30_mock/20_post_back_end.html

niheinihei
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

niheinihei

なんかGraphQLがうまくいかない。。。

これを試す。
https://dev.classmethod.jp/articles/how-to-solve-mutation-error-of-crud-at-owner-strict-on-aws-amplify-cognito-react/

https://github.com/aws-amplify/amplify-cli/issues/6170
ここには、

@auth(rules: [{ allow: owner, queries: null }])

こうしろと書いてある。

、、、、上記、解決してないけど、別の問題も発生したので貼っておく。
https://qiita.com/uwattotaitai/items/c83f200658eed8721e17

参考になりそうな記事
https://dev.classmethod.jp/articles/how-to-solve-mutation-error-of-crud-at-owner-strict-on-aws-amplify-cognito-react/
https://note.com/sumi1228/n/ne0cb04dc3dbb#lXpkr
https://aws.amazon.com/jp/blogs/startup/event-report-amplify-week-202004/

このスクラップは2022/07/31にクローズされました