CP4DaaSでwatsonx.ai StudioのJupyter Notebookで環境変数を読み込む方法を考えます。
APIKEYなどをプログラムにハードコーティングするのは再利用やセキュリティの観点から望ましくありません。そのため環境変数を別途定義して、Notebookから読み込んで使うことが多いと思います。
watsonx.ai Studioでは環境テンプレートの中に環境変数を記述する方法はこの記事で紹介したのですが、複数の環境テンプレートがある場合には、一つのファイルに記述した環境変数を読みたいということもあると思います。
この記事では環境変数を書いたファイルをプロジェクトの資産として配置してそのファイルから環境変数を読み込んでみます。
環境変数を書いたファイルのアップロード
以下のように環境変数を書いたファイル(ここではconfig.env)をローカルに用意します。
APIKEY=xxxxx
プロジェクトの資産タブの「アップロード」アイコンをクリックし、ファイルをドラッグアンドドロップしてアップロードします。
プロジェクト・アクセス・トークンの発行
次に、プロジェクト内のファイルにアクセスするために必要なプロジェクト・アクセス・トークンを準備します。
プロジェクトの管理タブの「アクセス制御」の「アクセス・トークン」から「新規アクセス・トークン」をクリックします。
適当な名前を付けます。(ここでは250326wstoken)。使いたいロールをEditor
かViewer
かを選択します。環境変数の書かれたファイルを読み取るだけならViewer
で構いません。「作成」をクリックします。
以下のように^
ボタンを開くとトークンが作られています。
これをコピーしておいてもよいのですが、watsonx.ai StudioのJuypter Notebookにはこのトークンを自動挿入する機能がありますのでそれを使ってみます。
Notebookでの環境変数取得
新規のNotebookを作成します。
適当な名前をつけ、「作成」をクリックします。
アクション・バーの「...」のメニューから「プロジェクト・トークンの挿入」をクリックします。
以下のようにaccess_project_or_space
にアクセス・トークンが記載され、wslibというオブジェクトができます(ちなみにここではprojectというオブジェクトもできていますが、現在は非推奨であるため、wslibを使います)。
これでwslib.download_file
でプロジェクトからNotebookの動く仮想環境にファイルがダウンロードできます。
wslib.download_file("config.env")
後はdotenv
で環境変数を書いたファイルを読み込み、os.environ.get
で環境変数を読むことができます。
from dotenv import load_dotenv
load_dotenv('config.env')
import os
os.environ.get("APIKEY")
環境テンプレートとのあわせ技
ちなみにこの方法だとアクセス・トークンがハード・コーディングされてしまうのが、嫌かもしれません。
その場合、アクセス・トークンだけでも環境テンプレートの環境変数に書いておくという方法もあると思います。
import os
TOKEN = os.environ.get("TOKEN")
from ibm_watson_studio_lib import access_project_or_space
wslib = access_project_or_space({'token':TOKEN})
wslib.download_file("config.env")
from dotenv import load_dotenv
load_dotenv('config.env')
os.environ.get("APIKEY")
TOKENを環境テンプレートから取り出して、APIKEYはconfig.envから取り出しています。
参考
watsonx.ai StudioのJupyter Notebookで環境変数を読み込む #Watson-Studio - Qiita
ibm-watson-studio-lib ( Python 用) - Docs | IBM Cloud Pak for Data as a Service