如何在通过CloudFront将CKAN复制到另一个AWS环境时自动更新资源URL?

时间:2018-03-28 23:22:52

标签: amazon-web-services datastore ckan

背景

我们正在AWS上使用DataStore扩展实现CKAN,并通过python CKAN API与它进行交互。 AWS基本上分为两个环境:

PUB是通过CloudFront创建的,并使用PRIV数据库的只读副本。它与PRIV基本相同,只是它是只读的。

挑战

PUB中的资源URL指向PRIV环境。例如,在公共环境中运行PUB_ckan.resource_show(id='123') api调用将返回以下内容:

  

{...

     

' datastore_active':False,

     

' 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除外,它必须反映PUB URL,以便最终用户针对高可用性的安全环境进行api调用。即:

  

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

到目前为止,我已经研究过配置文件是否包含使用相对URL的设置,还尝试通过Python脚本手动更新URL,但都没有成功。对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您想继续使用相同的基础数据库,那么最简单的方法可能是在公共实例上安装一个小型插件,该插件实现IResourceController interface并使用该接口的before_show method来更改资源URL

但是请注意before_show文档中的以下警告:

  

请注意,此方法不仅会用于UI显示,还会在其他方法(例如删除资源)中调用,因为显示包用于访问包中的资源。

因此,您绝对应该测试您的URL修改不会影响CKAN的其他部分。