redshift-connectorでRedshift Serverlessに繋いでみる

2022.12.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部のkobayashiです。

PythonでRedshiftのデータを扱う際に使用するモジュールとしてはAmazon Redshift Pythonコネクタが最初の選択肢になるかと思います。Amazon Redshift Python コネクタを使うとboto3やpandasとの連携が簡単に可能になりますが、このAmazon Redshift Python コネクタでRedshift Serverlessに接続してみたのでまとめます。

redshift-connector · PyPI

Amazon Redshift Python コネクタを使って接続してみる

Redshift ServerlessにAmazon Redshift Python コネクタを使って接続してみますが、接続方法に関しては今回はIAMなど使わずにシンプルにホスト名とユーザー名、パスワードで接続してみます。

環境

  • Python 3.9.14
  • redshift-connector 2.0.909

Redshift Serverlessに接続してみる

まずは redshift-connectorのインストールを行います。

インストールはpipで簡単にインストールできます。

$ pip install redshift-connector

次にRedshift Serverlessに接続するPythonコードを記述します。

import redshift_connector

# 接続情報
params = {
    "host": "{ワークグループ名}.{アカウントID}.ap-northeast-1.redshift-serverless.amazonaws.com",
    "database": "{DB名}",
    "user": "{ユーザー名}",
    "password": "{パスワード}",
}

with redshift_connector.connect(**params) as con:
    # カーソルの作成
    with con.cursor() as cur:
        cur.execute("create Temp table book(bookname varchar,author varchar)")
        cur.executemany(
            "insert into book (bookname, author) values (%s, %s)",
            [
                ("One Hundred Years of Solitude", "Gabriel García Márquez"),
                ("A Brief History of Time", "Stephen Hawking"),
            ],
        )
        cur.execute("select * from book")
        result = cur.fetchall()
        print("クエリ結果:\n", result)

今回はシンプルにホスト名、ユーザー名、パスワードで接続を行いますのでredshift-connectorに渡す項目も上記のようになっています。

スクリプト中では公式ドキュメント で行われているのと同様に、一時テーブルbookを作成し、そのテーブルへデータをInsertした後にSelectを行い結果をprintで表示しています。

実行してみるとRedshift Serverlessでも問題なくredshift-connectorを使って接続が行えることがわかります。

$ python rs-conn_serverless.py
クエリ結果:
 (['One Hundred Years of Solitude', 'Gabriel García Márquez'], ['A Brief History of Time', 'Stephen Hawking'])

まとめ

Amazon Redshift Pythonコネクタのredshift-connectorでRedshift Serverlessへ接続してみました。特に問題なくServerlessでない通常のRedshiftと変わりなく接続は行えました。 今回はシンプルはホスト名とユーザー名・パスワードを使った接続だったのでIAM認証やIdPを使った認証も試してみたいと思います。

最後まで読んで頂いてありがとうございました。