AWS Amplify のビルドで『The input value type 'AuthRule' is not present when resolving type 'AMPLIFY'』が発生した際の対応
AWSの発表しているAmplify + Reactで簡単なアプリケーションをデプロイするというチュートリアルをやっていたところ、表題の問題に遭遇。
https://aws.amazon.com/jp/getting-started/hands-on/build-react-app-amplify-graphql/module-four/
ローカルでの動作は問題なくGraphQLを使ったデータ登録ができたものの、その変更をpushし、amplifyにデプロイしようとしたところで以下のようなエラーが出てビルドに失敗した。
CloudFormation上では以下のようなログ
The input value type 'AuthRule' is not present when resolving type 'AMPLIFY'
AuthRule
に問題があるとのことなので、ソースコード内を検索して引っかかったのが以下の箇所。
amplify add api
で自動作成されるGraphQLのスキーマ定義ファイルですね。
コードの意味はよくわからないけど FOR TESTING ONLY! と付いているのが怪しい感じ。
amplify/backend/api/amplifyreact/schema.graphql
# This "input" configures a global authorization rule to enable public access to # all models in this schema. Learn more about authorization rules here: https://docs.amplify.aws/cli/graphql/authorization-rules input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY! type Note @model { id: ID! name: String! description: String }
冒頭のコメントにあるURLに詳しい説明があるとのことなので見てみると。
To help you get started, there's a global authorization rule defined when you create a new GraphQL schema. For production environments, remove the global authorization rule and apply rules on each model instead.
開発用にcreate, update, delete権限を全スキーマに付与してくれる設定みたい。 まずはこの設定で開発を初めて後から権限を絞ってね的な話なのかな。
ともあれ、本番環境ではこの設定は消すようにとのことなので以下のように変更。
(このチュートリアルでは認証機能が既に実装されているので、認証されたユーザーのみ許可する、という設定のほうが正しいのだけど、まずはビルドエラーを解決したかったので { allow: public }
にしてます。。)
# input AMPLIFY { globalAuthRule: AuthRule = { allow: public } } # FOR TESTING ONLY! type Note @model @auth(rules: [{ allow: public }]) { id: ID! name: String! description: String }
変更をGithubにpushして再度ビルドを走らせると無事ビルドが成功しました。