こんにちは!
AppSync を利用されている方が年々増えてきたのではないでしょうか?
本記事では AppSync のキャッシュ機能について解説していきます。ご参考になれば幸いです!
AppSync のキャッシュ機能は、Amazon ElastiCache Redis インスタンスを使用して実行されています。これによりデータソースに直接アクセスすることを減らし、パフォーマンスを向上させます。
また、暗号化にも対応しています。パフォーマンスに影響を及ぼす可能性はありますが、転送中と保管時の暗号化が可能です。
AppSync のキャッシュ機能には以下2つの種類があります。
上述の通り「Full request caching」はすべてキャッシュします。「Per-resolver caching」では、キャッシュ対象を選択できるので自由度が高いです。
キャッシュを有効にする際には、インスタンスタイプと TTL の設定が必要となります。「Per-resolver caching」を選択されている場合は、対象ごとに TTL の設定が可能です(設定はリゾルバーの編集画面から行います)。
キャッシュの要件が決まっている場合は、ぜひ活用しましょう。
AppSync のキャッシュ機能を有効にしたら、GUIG のコンソール画面から複数回クエリを実行してみましょう。
そのあとに Monitoring の画面上でキャッシュが動作していることを確認できます。
GUI コンソール画面でキャッシュ設定する場合は、AppSync のコンソール画面から対象の API を選択し、Caching の画面に移動します。デフォルトではキャッシュ機能が無効になっておりますので、以下のような画面が表示されます。
「Per-resolver caching」を選択した場合は、スキーマの特定のフィールドをアタッチすることで、リゾルバーごとにキャッシュの設定が可能となります。
では、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」とある場所がキャッシュ設定です。各パラメータを説明していきましょう。
上記のパラメータを目的に応じて設定できたら、デプロイして完成です。設定項目が少なく、ほかのリソースとの依存関係も少ないので、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 の開発はお気軽にご相談ください。
スモールスタート開発支援、サーバーレス・NoSQLのことなら
ラーゲイトまでご相談ください
低コスト、サーバーレスの
モダナイズ開発をご検討なら
下請け対応可能
Sler企業様からの依頼も歓迎