0
1

More than 3 years have passed since last update.

RStudioサーバー(WSL2)からAWS上のDBに接続

Last updated at Posted at 2021-03-17

はじめに

Shiny を用いたウェブアプリを作成しており、AWS 上にある DB からデータを引っ張って可視化するため、DB との接続を試してみた。WSL2 (Ubuntu 20.04) 上の RStudioサーバー から AWS 上にある PostgreSQL に接続する。

ODBC ドライバのインストール

Setting up ODBC Drivers にしたがって、端末で以下コマンドを実行。今回は PostgreSQL であったが、その他 DB の場合はそれに合わせた DB ドライバをインストールする。(いつか使うかもと全ドライバを入れようとしたが、MySQL ドライバのみ入らなかった。2021年3月17日時点では、Ubuntu 20.04 に対応した MySQL ドライバはないらしい。)

# Install the unixODBC library
$ sudo apt-get install unixodbc unixodbc-dev --install-suggests

# PostgreSQL ODBC Drivers
$ sudo apt-get install odbc-postgresql

RStudioサーバーに必要なパッケージのインストール

Connect to a Database にしたがって、DBI と odbc を RStudio サーバーにインストールする。

install.packages("DBI")
install.packages("odbc")

上記パッケージインストール後、以下コマンドを実行することで先ほどインストールした ODBC ドライバの一覧が見られるので、必要なドライバが入っているか確認する。

library(odbc)
sort(unique(odbcListDrivers()[[1]]))

### 私の場合の出力
# [1] "ODBC Driver 17 for SQL Server" "PostgreSQL ANSI"              
# [3] "PostgreSQL Unicode"            "SQLite"                       
# [5] "SQLite3"

DB との接続

以下コードで接続できた。最後に実行している dbListTables(conn=con) はテーブルのリストを返す関数、dbDisconnect(conn=con) は接続を切る関数である。

library(DBI)
con <- DBI::dbConnect(odbc::odbc(),
                      Driver   = "/usr/lib/x86_64-linux-gnu/odbc/psqlodbca.so",
                      Server   = "*****.amazonaws.com",
                      Database = "[Database name]",
                      UID      = "[User name]",
                      PWD      = "[password]",
                      ### 以下は実行時に入力を求める場合
                      # UID    = rstudioapi::askForPassword("Database user"),
                      # PWD    = rstudioapi::askForPassword("Database password"),
                      Port     = 5432)
dbListTables(conn = con)
dbDisconnect(conn = con)

備考

RPostgresSQL パッケージを用いても接続できたので、書いておく。

端末で以下コマンドを実行。

$ sudo apt-get install libpq-dev

RStudio サーバーにて以下コマンドを実行。(上記 libq-dev がないと、RPostgreSQL がインストールできない。)

install.packages("RPostgreSQL")

以下コードで接続ができた。

library(RPostgreSQL)
con <- dbConnect(drv      = PostgreSQL(),
                 host     = "*****.amazonaws.com",
                 dbname   = "[Database name]",
                 user     = "[User name]",
                 password = "[Password]",
                 port     = 5432)
dbListTables(conn = con)
dbDisconnect(conn = con)
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1