Как автоматически обновлять URL-адрес ресурса при репликации CKAN в другую среду AWS через CloudFront?

Фон

Мы реализуем CKAN на AWS с расширением DataStore и взаимодействуем с ним через python CKAN API. AWS по существу разделен на две среды:

  • PRIV: для внутренних целей и целей контроля качества/постановки, размещен на https://private.company.com.

  • PUB: для внешних конечных пользователей, размещенных на https://private.company.com

PUB создается через CloudFront и использует реплику чтения базы данных PRIV. Это в основном то же самое, что и PRIV, за исключением того, что он доступен только для чтения.

Вызов

URL-адреса ресурсов в PUB указывают на среду PRIV. Например, запуск вызова API PUB_ckan.resource_show(id='123') в общедоступной среде возвращает следующее:

{ ...

'datastore_active': Ложь,

'id': '123',

'имя': 'Ресурс 1',

'package_id': 'abc',

«состояние»: «активно»,

'url': 'https://private.company.com/dataset/f688/resource/e3c785/download/file.zip',

'url_type': 'загрузить'

... }

То же самое для файлов, загруженных через CKAN API или расширение DataStore (в этом случае они помечены как «url_type»: «хранилище данных»).

Ожидание

Все метаданные пакета/ресурса должны быть одинаковыми в разных средах, за исключением URL-адреса ресурса, который должен отражать URL-адрес PUB, чтобы конечные пользователи могли выполнять вызовы API для высокодоступной и безопасной среды. то есть:

'url': 'https://public.company.com/dataset/f688/resource/e3c785/download/file.zip'

До сих пор я изучал, содержит ли файл конфигурации настройку для использования относительных URL-адресов, а также пытался обновить URL-адреса вручную с помощью скрипта Python, но оба безуспешно. Любая помощь в этом будет принята с благодарностью.


person Careduz    schedule 28.03.2018    source источник


Ответы (1)


Если вы хотите продолжать использовать ту же базовую базу данных, то, вероятно, самый простой способ — это небольшой плагин на общедоступном экземпляре, который реализует IResourceController интерфейс и использует before_show метод этого интерфейса для изменения URL-адреса ресурса.

Однако обратите внимание на следующее предупреждение из документации before_show:

Имейте в виду, что этот метод вызывается не только для отображения пользовательского интерфейса, но и в других методах, например, при удалении ресурса, поскольку отображение пакета используется для получения доступа к ресурсам в пакете.

Поэтому вам обязательно нужно проверить, не влияют ли изменения вашего URL на другие части CKAN.

person Florian Brucker    schedule 07.08.2018