こんにちはかみむらです。GraphQLのAPIサーバーを作成できる「Hasura」にやっと入門しました。
HasuraはGraphQLエンジンで、PostgreSQLのデータベースを使用しています。そして、そのデータに対してGraphQLのクエリが発行できます。デプロイはHerokuにできるので、API開発に慣れてない人でもすぐに使うことができます。
今回はHasuraに入門したら必ず設定する必要がある、エンドポイントにアクセスコントロールをつけてみます。
Dockerの場合
HasuraはDockerで、簡単に開発環境を用意できます。Dockerを起動して、docker-compose.yamlに下記を記述してください。
docker-compose.yaml
version: '3.6' services: postgres: image: postgres:12 restart: always volumes: - db_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: postgrespassword graphql-engine: image: hasura/graphql-engine:v1.2.0-beta.2 ports: - "8080:8080" depends_on: - "postgres" restart: always environment: HASURA_GRAPHQL_DATABASE_URL: postgres://postgres:postgrespassword@postgres:5432/postgres HASURA_GRAPHQL_ENABLE_CONSOLE: "true" HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log HASURA_GRAPHQL_ADMIN_SECRET: myadminsecretkey volumes: db_data:
これをバックグランドで実行します。
$ docker-compose up -d
簡単に説明します。上記でも説明しましたが、HasuraはPostgreSQLを使う前提となっています。なので、HASURA_GRAPHQL_DATABASE_URLでPostgreSQLの設定をしています。
そして、HASURA_GRAPHQL_ADMIN_SECRETで認証キーを設定しています。もちろん今回はローカルで実行しているので問題ないですが、もし、本番で運用する場合はシークレットキーを外部に漏らさないように保護してください。
実行したHasuraのサーバーにアクセスしてみましょう。localhost:8080番にアクセスすると、シークレットキーで保護されてることがわかります。先ほど指定したHASURA_GRAPHQL_ADMIN_SECRETを入力するとログインできます。
Herokuの場合
次にHerokuにホストしたHasuraアプリケーションのエンドポイントに認証をつけます。公式ページのHerokuボタンをクリックすると、
github.com
そして、Herokuのダッシュボード上で、HASURA_GRAPHQL_ADMIN_SECRETを設定します。シークレットキーは推測しにくい文字列を入力してください。
同様にHerokuにデプロイしたHasuraにアクセスすると、認証を求められます。
最後に
今回はHasuraのエンドポイントにアクセスコントロールをつけてみました。もし、Hasuraでアプリケーションを作成する場合、必ず必要な設定となっています。なので、Hasuraに入門した方はぜひ参考にしてください。