跨区域Redshift集群同步调用存储过程,是否有其他可行方案?
跨区域Redshift集群同步调用长时存储过程的替代方案
你当前用RDS Postgres做中间层的方案可行,但并不是唯一的同步调用方式,还有以下几种可选方案:
直接用Redshift自身的dblink扩展跨集群调用
Redshift支持dblink扩展,无需中间RDS,直接在Cluster A中连接Cluster B执行存储过程。前提是跨区域网络打通(比如VPC对等连接、公网访问,注意配置安全组和IAM权限),并且调整会话超时参数适配长时任务(Redshift默认statement_timeout是8小时,足够覆盖15分钟以上的执行时长)。操作步骤如下:-- 在Cluster A中启用dblink扩展 CREATE EXTENSION IF NOT EXISTS dblink; -- 直接执行Cluster B的存储过程 SELECT * FROM dblink( 'dbname=<ClusterB数据库名> port=5439 host=<ClusterB端点> user=<用户名> password=<密码>', 'call myproc()' ) AS t(a varchar);用EC2作为持久化执行载体
部署一台EC2实例,在上面运行脚本(比如Python、Shell),从Cluster A接收触发请求后,同步连接Cluster B执行存储过程,直到任务完成再返回结果。这种方式完全自定义,能支持任意时长的任务,只要EC2不被中断。示例用psql命令执行:psql -h <ClusterB端点> -U <用户名> -d <数据库名> -c "call myproc();"你可以在Cluster A中写个存储过程,通过调用EC2的API触发脚本执行,然后轮询脚本的执行状态,实现同步等待效果。
Redshift Serverless 模拟同步调用
Lambda时长不够,但Redshift Serverless的单任务执行上限是24小时。你可以在Serverless中创建一个任务,负责跨区域调用Cluster B的存储过程,然后在Cluster A中通过轮询Serverless的任务状态(用AWS CLI或SDK调用get-statement接口),直到任务完成,以此模拟同步调用的效果。
内容的提问来源于stack exchange,提问作者user433342
相关产品推荐
相关产品推荐

