Skip to content

Make SSH tunnel to query a remote redshift database in R #55

@fissehab

Description

@fissehab

I am using the below Python code to get data from a remote Redshift database. I am using this function with the reticulate package in R. I want to convert the Python code to R so that I do not face the hassle of setting up an Anaconda environment in the cloud when I push my code (shiny app) to shipapps.io. I read about the SSH package and its capabilities but I could not successfully convert my code using it.

def get_redshift_data(query):
  import pandas as pd
  from sqlalchemy import create_engine
  from sqlalchemy import Table, MetaData
  import pymysql
  import paramiko
  from paramiko import SSHClient
  from sshtunnel import SSHTunnelForwarder
  from sqlalchemy.engine import url as u

  mypkey = paramiko.RSAKey.from_private_key_file('nfw-linux-key.pem')
  sql_username = 'my_sql_username'
  sql_hostname = 'sql_username@xxxx.us-east-1.redshift.amazonaws.com'
  sql_password = 'my_sql_password'
  sql_main_database = 'my_db'
  sql_port = 5439
  ssh_host = '127.0.0.1'
  ssh_user = 'ubuntu'
  ssh_port = 56714
  sql_ip = '1.1.1.1.1'
  with SSHTunnelForwarder(
          (ssh_host, ssh_port),
          ssh_username=ssh_user,
          ssh_pkey=mypkey,
          remote_bind_address=(sql_hostname, sql_port)) as tunnel:
      conn_url = u.URL(drivername='postgresql+psycopg2', username=sql_username, 
                   password=sql_password, host='127.0.0.1', 
                   port=tunnel.local_bind_port, database=sql_main_database)
      conn = create_engine(conn_url)
      result = pd.read_sql(query, conn)
  return result

Then I am sourcing the Python function above to get data from the database.

library(reticulate)
source_python("get_redshift_data.py")
df = get_redshift_data("select top 100 * from my_db.my_table")

But I want to avoid the Python part and use R only.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions