AppSyncのキャッシュ機能について解説!AppSync開発エキスパートが設定方法を紹介します😎

AppSyncのキャッシュ機能について解説!AppSync開発エキスパートが設定方法を紹介します😎

こんにちは!

AppSync を利用されている方が年々増えてきたのではないでしょうか?

本記事では AppSync のキャッシュ機能について解説していきます。ご参考になれば幸いです!

想定する読者

  • AppSync を導入検討しているエンジニア
  • AppSync のキャッシュ機能について知りたいヒト

AppSyncのキャッシュ機能の仕組み

AppSync のキャッシュ機能は、Amazon ElastiCache Redis インスタンスを使用して実行されています。これによりデータソースに直接アクセスすることを減らし、パフォーマンスを向上させます。

また、暗号化にも対応しています。パフォーマンスに影響を及ぼす可能性はありますが、転送中と保管時の暗号化が可能です。

キャッシュ機能で実現できることは?

AppSync のキャッシュ機能には以下2つの種類があります。

  • Full request caching: すべてのリクエストはキャッシュから返されるため、データソースに直接アクセスすることはありません。
  • Per-resolver caching: 特定の操作またはフィールドのみがキャッシュから返されます。

上述の通り「Full request caching」はすべてキャッシュします。「Per-resolver caching」では、キャッシュ対象を選択できるので自由度が高いです。

キャッシュを有効にする際には、インスタンスタイプと TTL の設定が必要となります。「Per-resolver caching」を選択されている場合は、対象ごとに TTL の設定が可能です(設定はリゾルバーの編集画面から行います)。

キャッシュの要件が決まっている場合は、ぜひ活用しましょう。

キャッシュ機能の動作確認

AppSync のキャッシュ機能を有効にしたら、GUIG のコンソール画面から複数回クエリを実行してみましょう。

AWS AppSync > API名 > クエリ の画面
画像はListEventsを実行したもの、一番右の欄にレスポンスが表示されている

そのあとに Monitoring の画面上でキャッシュが動作していることを確認できます。

AWS AppSync > API名 > Monitoring の画面

AppSync のキャッシュ設定方法の紹介

GUI コンソール画面でキャッシュ設定する場合は、AppSync のコンソール画面から対象の API を選択し、Caching の画面に移動します。デフォルトではキャッシュ機能が無効になっておりますので、以下のような画面が表示されます。

AWS AppSync > API名 > Caching の画面

「Per-resolver caching」を選択した場合は、スキーマの特定のフィールドをアタッチすることで、リゾルバーごとにキャッシュの設定が可能となります。

どのResolverにアタッチするか選べます
選んだあとはリゾルバーの編集画面にて、キャッシュ設定を行い保存します

では、CloudFormation ではどう設定するのでしょうか?

以下に AppSync の API の作成とキャッシュ機能の設定を行うテンプレートを作成してみました(わかりやすくするため、API の作成箇所は最小限の設定にしております)。

Resources:
  AppSync:
    Type: AWS::AppSync::GraphQLApi
    Properties:
      AuthenticationType: API_KEY #required
      Name: AppSyncDemo #required
  AppSyncCache:
    Type: AWS::AppSync::ApiCache
    Properties:
      ApiCachingBehavior: PER_RESOLVER_CACHING #required
      ApiId: !GetAtt AppSync.ApiId #required
      AtRestEncryptionEnabled: false
      TransitEncryptionEnabled: false
      Ttl: 60 #required
      Type: SMALL #required

「AppSyncCache」とある場所がキャッシュ設定です。各パラメータを説明していきましょう。

  • ApiCachingBehavior - キャッシュの種類をここで指定します。「FULL_REQUEST_CACHING」 か「PER_RESOLVER_CACHING」のどちらかを指定します。
  • ApiId - AppSync の API の ID を指定します。
  • AtRestEncryptionEnabled - 保管時の暗号化の有無を設定します。
  • TransitEncryptionEnabled - 転送中の暗号化の有無を設定します。
  • Ttl - TTL の秒数を指定します。
  • Type - インスタンスタイプを指定します。

上記のパラメータを目的に応じて設定できたら、デプロイして完成です。設定項目が少なく、ほかのリソースとの依存関係も少ないので、AppSync のキャッシュ機能はとても実装しやすいですね。

なお「Per-resolver caching」を選んだ場合は、リゾルバーごとに設定を行ってください。

Resources:
  AppSyncResolver:
    Type: AWS::AppSync::Resolver
    Properties:
      ApiId: !GetAtt AppSync.ApiId #required
      CachingConfig:
        CachingKeys: 
          - String
        Ttl: 60
      DataSourceName: String
      FieldName: String #required
      TypeName: String #required

「CachingConfig」の部分がキャッシュ設定になります。TTL を記述し、必要であればキャッシュキーを記述しましょう。

関連記事

まとめ

AppSync のキャッシュ機能は、2種類あります。すべてキャッシュするのかカスタマイズして特定の操作またはフィールドをキャッシュするのか。要件に合わせてぜひ活用してみてください。

AppSync の開発はお気軽にご相談ください。