Каков общий шаблон, по которому резолверы AWS AppSync кэшируют свои выходные данные?
Я пишу API, который обрабатывает данные, которые со временем не изменятся. API возвращает содержимое книг (название, автора, главы и т. д.).
Моя первоначальная идея заключалась в том, чтобы преобразователь запрашивал некоторую полезную нагрузку JSON у CloudFront. Если запрошенный документ отсутствует в CloudFront, CloudFront вызовет функцию Lambda, которая будет знать, как получить документ JSON (из базы данных), а затем поместить полезную нагрузку в CloudFront. Концептуально это кажется странным, но решило бы проблему кеширования.
const query = `{
bookById(bookID: "468c95") {
bookID
title
author
chapters {
title
text
}
}
}`;
const book = query(query);
// book => {
// bookId: "468c95",
// title: "AppSync for Normal People",
// author: null,
// chapters: [
// {
// title: "Chapter 1: Dawn of Men",
// text: [
// "It was the best of times, it was the worst of times.",
// "..."
// ]
// },
// { ... }
// ]
// }
}
Другими словами, вызов фиктивного метода query запустит некоторый преобразователь в AppSync. Этот преобразователь всегда будет возвращать одни и те же данные. Таким образом, почему бы не кэшировать данные, с которыми работает распознаватель (я думаю, вы можете видеть это как Вход для распознавателя), в CloudFront, чтобы их можно было обслуживать из памяти, вместо того, чтобы использовать какое-то внутреннее хранилище (например, базу данных) или вызвать лямбду ?!
Да, именно это я имел в виду под «кешированием в CloudFront». Решатель попытается получить объект из заранее определенного места. Если это разрешится в 404, то CloudFront вызовет Lambda, которая будет извлекать данные откуда-то и возвращать этот объект с правильными заголовками кеша, так что при следующем запросе CloudFront будет иметь этот объект в своем хранилище.
Я не уверен, что понимаю ваш вопрос, не могли бы вы проиллюстрировать свой вариант использования на примере. Может быть, с примером схемы с резолверами и описанием того, что именно вы пытаетесь кэшировать и на каком уровне.
Добавил пример ...





Кажется, что распознаватели AppSync не совсем подходят для этой задачи, но у меня есть неполное представление о том, как вы используете AppSync. Обратите внимание, что описанное вами решение не является кешированием резольвера выход - это технически кеширование резольвера Вход. Кроме того, вы не можете хранить вещи «в» CloudFront - это сквозной кеш для контента с отдельного исходного сервера, такого как S3 или API-шлюз, или что-то, работающее в EC2 или где-либо еще в Интернете.