Amazon Web Services ブログ

AWS Amplify は、より機能が豊富で、柔軟性と拡張性に優れた、新しい GraphQL Transformer v2 を発表しました

この記事は AWS Amplify announces the new GraphQL Transformer v2. More feature-rich, flexible, and extensible. を翻訳したものです。

2021 年 11 月 23 日、AWS Amplify は GraphQL Transformer v2 を発表しました。これにより、開発者は最小限のクラウド知識で、より豊富な機能、柔軟性、拡張性を備えた、GraphQL ベースのアプリのバックエンドを開発可能です。 AWS Amplify CLI は、フロントエンド開発者がクラウドでアプリのバックエンドを作成するのに役立つコマンドラインツールチェーンです。 Transformer を使用することで、開発者は GraphQL のスキーマ定義言語でバックエンドデータモデルを構成でき、Amplify CLI は基盤となるクラウドインフラストラクチャに基づいてスキーマが完全に機能する GraphQL API となるように自動的に変換します。

最新バージョンの Amplify CLI(npm i -g @aws-amplify/cli)をインストールし、GraphQL Transformer v2 で新たに加えられた、上位5つの GraphQL の機能を確認しましょう。

1. より明示的なデータモデリング

GraphQL Transformer v2 では、開発者にデータモデルの更なるコントロールと理解を与えられるよう、モデリングエクスペリエンスをより明示的にしました。DynamoDB テーブルの新規作成は、今まで通り@modelディレクティブで簡単に行うことができます。新しい Transformer では、@primaryKey@index等の新しいディレクティブで、プライマリおよびセカンダリインデックスを設定することができます。

また、データモデル間のリレーションの作成に、@hasOne@hasMany@belongsTo@manyToManyディレクティブを使用することができます。

GraphQL Transformer v2 のデータモデリングの詳細について、こちらをご覧ください。

2. Deny-by-default 認可

新しい認証ルールシステムでは、デフォルトが Deny になりました。全ての認証ルールでの共通にはなりますが、「グローバルルール」を設定するメカニズムは依然としてありますので、ご安心ください。新しい Transformer では、自身のスキーマで定義した認証ルールが、クライアント側のデータアクセスにおける唯一のソースになります。また、フィールドレベルのルールがモデルレベルのルールを上書きし、モデルレベルのルールがグローバルルールを上書きするという、明確なルール階層を持つようになりました。

amplify status api -acm <モデル名>で、誰が何にアクセスできるか示した表を出力できます。

GraphQL Transformer v2 の認証ルールの詳細について、こちらをご覧ください。

3. Amplify によって生成されたパイプラインリゾルバーの拡張

新しい Transformer は、AWS AppSync パイプラインリゾルバーを使用するよう、一から書き直されました。これは、よりモジュール化され、拡張可能なリゾルバーコードの提供を意味します。Amplify が生成したリゾルバーの間への独自ビジネスロジックの挿入や、Amplify が生成したリゾルバーの完全なオーバーライドができるようになりました。カスタム VTL リゾルバーを正しい命名規則でamplify/backend/api/<API名>/resolvers/フォルダに置くだけで、次の amplify push 時に Transformer がカスタムビジネスロジックをデプロイ済みの GraphQL API に組み込んでくれます。

Amplify が生成したリゾルバーの拡張の方法の詳細についてはこちら、オーバーライドについてはこちらをご覧ください。

4. Amplify によって生成された GraphQL API クラウドリソースのオーバーライド

以前、Amplify が生成した IAM、Cognito、S3 の設定リソースをオーバーライドする機能を発表しました。今回は、Amplify が生成した GraphQL API リソースと REST API リソースをオーバーライドする機能を発表します。GraphQL API によって生成された AppSync、DynamoDB、OpenSearch、IAM リソースに対して、amplify override apiを実行しするだけで、インフラレベルの編集が可能です。

amplify override api

例として、AppSync API で X-Ray トレーシングを有効にするには、以下のオーバーライドを適用します:

import { AmplifyApiGraphQlResourceStackTemplate } from '@aws-amplify/cli-extensibility-helper';

export function override(resources: AmplifyApiGraphQlResourceStackTemplate) {
  resources.api.GraphQLAPI.xrayEnabled = true
}

Amplify が生成した GraphQL API リソースのオーバーライドの方法の詳細について、こちらをご覧ください。

5. OpenSearch 連携強化

新しい GraphQL Transformer は、より強力な OpenSearch クエリを提供します。現在のユーザーのアクセス許可を対象とした OpenSearch クエリを実行できるようになりました。最小値(min)、最大値(max)、合計値(sum)、平均値(avg)等の集計クエリを実行できます。更に、新しい Transformer では、検索結果に対して複数のソート条件を指定することができます。

query MyQuery {
  searchStudents(
    aggregates: {
      type: min, # Specifies that you want the "min" value
      field: examsCompleted, # Specifies the field for the aggregate value
      name: "minimumExams" # provides a name to reference in the response field 
    } filter: { name: {wildcard: "Rene*"}}) {
    aggregateItems {
      name
      result {
        ... on SearchableAggregateScalarResult {
          value
        }
      }
    }
    total # Get total counts
  }
}

GraphQL Transformer v2 の検索と結果の集計の詳細について、こちらをご覧ください。

V1 から新しい GraphQL Transformer への移行

現在 Amplify の GraphQL Transformer v1 をお使いの方は、必ず GraphQL Transformer v1 から v2 移行ガイドをご確認ください。現在の GraphQL スキーマをスキャンし、v2 互換のスキーマへの移行を支援するヘルパーツールを提供しています。

カスタムリゾルバーの使用、リゾルバーの上書き、リレーショナルデータソースの使用等、v1 の一部機能は、ヘルパーツールで移行できません。こちらをご参照に、手動での移行を進めてください。

Amplify の GraphQL サポートは新たなステージへ

以上、GraphQL Transformer version 2 のトップ5の機能をご紹介しました。このブログ記事でカバーしきれなかった追加機能(Lambda authorizer のサポート等)や DX の強化(より短いamplify add apiワークフロー)等、まだまだ新しい部分がございます。新しい GraphQLドキュメントで、全ての新機能について確認できます。

いつでも気軽に GitHubDiscord コミュニティ経由で、Amplify チームとコンタクトできます!

翻訳は、Game Solutions Architect の Yunhe Wang が担当しました。