🦔

Amazon SageMaker Studio LabにPostgreSQLの動作環境を構築する

2024/01/29に公開

はじめに

前回の記事で、Windows上の仮想マシンにAlmaLinuxをインストールし、PostgreSQLが動作する環境を構築する方法を紹介しました。今回は無料のクラウドサービス上に環境を構築したい人向けに、Amazon SageMaker Studio Labを使用する方法を紹介します。

Amazon SageMaker Studio Labとは

https://aws.amazon.com/jp/sagemaker/studio-lab/

Amazon SageMaker Studio Lab(Studio Lab)は、機械学習のための無料開発環境として提供されているサービスです。AWSのリソースを利用しますが、AWSのアカウントやクレジットカードの登録は必要なく、E-mailアドレスと電話番号があればStudio Lab専用のアカウントを取得して利用できます。類似のサービスにGoogle Colaboratoryがありますが、Studio Labでは15GBの永続ストレージに環境を保存できるため、データベースの学習やアプリケーションの開発に便利です。ただし、sudo等のLinux管理者用のコマンドを使用できないため、利用できるソフトウェアはPythonのpipまたはcondaコマンドでインストールできるものに限られます。PostgreSQLは、condaでインストールしてStudio Lab内で利用できます。

Studio Labのアカウント取得

Studio Labを利用するためのアカウントは、公式ページRequest free accountから申請してください。申請内容に問題がなければ、数日中にアカウントを取得できると思います。

これ以降は、アカウントが取得した後の手順について説明します。

Studio Labの起動

まず、以下のページからStudio Labにサインインします。E-mailアドレスとパスワードを入力してSign inボタンを押すと、ユーザーが人間であることを確認するパズルが表示されるので、これを解いてください。
https://studiolab.sagemaker.aws/login

サインインが成功すると、マイプロジェクト(My project)のページが表示されます。なお、プロジェクトは1つしか持てません。
My project

PostgreSQLはCPUしか使用しないので、ラジオボタンでCPUが選択されていることを確認して、Strat runtimeボタンを押します。このタイミングでプロジェクトが開始され、1日に使用できる8時間のカウントダウンが始まります。なお、開始されたプロジェクトはStop runtimeボタンを押すと停止します。
Start runtime

しばらく待っていると、プロジェクトを開始できるようになります。Open projectボタンを押すとJupyter Labが起動し、Notebook、Console、Terminalなどを起動できるランチャの画面が表示されます。
Open project

次に、OtherグループにあるTerminalボタンを押すとLinuxの端末が起動します。プロンプトで示されているように、ユーザstudio-lab-userで、仮想環境studiolabで動作しています。プロジェクト内には複数の仮想環境を作ることができます。
Terminal

PostgreSQLのインストール

端末が起動したら、以下のコマンドでcondaを最新の状態にしておきます。仮想環境baseはすべての仮想環境の元になる環境です。

conda update -n base conda

次に、新しい仮想環境を作成します。その目的は、既存の環境に与える影響を極力小さくすることと、不要になった時に環境単位で簡単に削除できるようにするためです。ここではmyenvという名前で環境を作ります。

conda create -n myenv

以下のコマンドで新しい環境に入ります。

conda activate myenv

次に、PostgreSQLをインストールします。本記事執筆の時点では、バージョン16.1がインストールされました。

conda install postgresql

次に、データベースを初期化します。ここではmytestdbというディレクトリにデータベースを作成します。なお、ロケールはシステムに日本語が登録されていないため、C.UTF-8を指定してください。

initdb --locale=C.UTF-8 -D mytestdb

次に、データベースサーバを起動します。ログはlogfileというディレクトリに記録します。

pg_ctl -D mytestdb -l logfile start

ここまで来れば、psqlコマンドでデータベースpostgresに接続できます。なお、ユーザstudio-lab-userはデータベース所有者で、パスワードなしのTrust認証で接続しています。

psql postgres

データベース初期化からデータベース接続までの端末のスクリーンショットを添付しておきます。
PostgreSQL

次回以降、端末による処理を再開するときには、以下のコマンドを最初に入力してください。

conda activate myenv
pg_ctl -D mytestdb -l logfile restart

また、新しく作成した環境全体を消去する場合は、以下のコマンドを使用してください。

# 環境から退出する
conda deactivate

# 環境を削除する
conda env remove -n myenv

# データベース関連ファイルを削除する
rm -r logfile
rm -r mytestdb

Postgresqlクライアントの利用

データベースサーバが起動した状態で、Postgresql標準の以下のコマンドが利用できます。

  • psql --> SQL文とpsqlメタコマンドの実行
  • createuser / dropuser --> ユーザの作成 / 削除
  • createdb / dropdb --> データベースの作成 / 削除

いずれの場合もデータベース所有者はpostgresではなくstudio-lab-userであることに注意してください。また、日本語の入出力には問題ありませんが、ロケールがC.UTF-8のため日時がUTCで表示されます。psqlで日本のタイムゾーンを使用する場合は、以下のSQL文を実行してください。

SET TIME ZONE 'Asia/Tokyo';

続いて以下のSQL文を実行したときのスクリーンショットを添付しておきます。

CREATE TABLE 商品
(品番 INT UNIQUE, 品名 TEXT, 分類 TEXT, 価格 INT);

INSERT INTO 商品
VALUES(1,'トマト','野菜',290), (2,'タマネギ','野菜',240), (3,'キャベツ','野菜',190),
(4,'レタス','野菜',140), (5,'いちご','果物',490),(6,'みかん','果物',390),
(7,'りんご','果物',190);

SELECT * FROM 商品;

フォントが等幅でないため、SELECT文の実行結果の表示が多少ずれていますが、データベースの学習には支障がないと思います。
psql

おわりに

以上、Amazon SageMaker Studio LabにPostgreSQLをインストールして、データベースを端末から操作する方法を紹介しました。sudoコマンドが使えないため、PgAdmin4などのGUIクライアントをインストールすることは難しいと思います。しかし、Jupyter Labがを使用して、Pythonでデータベースのアプリケーションを書くことができます。PostgreSQLに格納したデータは永続的に保存されているため、Pythonによる機械学習も効率よく行うことが可能です。

Discussion