2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Watson StudioのJupyter NotebookからICOSのファイルを使う

Posted at

以前の記事
Watson StudioのJupyter NotebookからICOSへファイル出力をする
では、以下の1から4のようなファイル操作について記載しました。

WS000000.JPG

Watson Studioでプロジェクトを作成すれば、自動的にICOSに一つバケット(上図の「バケットA」)が作成され、前回の記事はそのバケットのファイル操作を記載しました。
今回の記事は、Watson Studioのプロジェクトとは関係のないバケットへアクセスする方法を記載します。
(以下の絵の「バケットB」からのデータ取り込み)

WS000001.JPG

0. 準備

IBM Cloudコンソールから、バケットを1つ作ります。
image.png

名前は、「qiita-bucket-b」としました。
image.png

csvファイルを1つアップロードしました。
このファイルをWatson StudioのJupyter notebookに取り込むことができれば、この記事は完成です。
image.png

1. APIキー作成

「qiita-bucket-b」へのアクセス権限を持ったAPIキーを作成し、Jupyter notebookからはそのキーを用いることで、「qiita-bucket-b」にアクセスできる、というのが基本的な動きです。

1.1 サービスID作成

このあたりちょっと分かりづらいのですが、アクセス権限は直接APIキーに付与されるのではなく、サービスIDに紐付くものです。そのため、以下のような手順となります。

  1. サービスIDを作成
  2. サービスIDに権限を付与
  3. サービスIDに対応するAPIキーを作成

IBM Cloudコンソールで、管理→アクセス(IAM)を開きます。
image.png

サービスIDを作成します。
image.png

名前や説明は任意です。
image.png

ここまででサービスIDが作成されました。

1.2 権限の付与

作成したサービスIDに対して、「qiita-bucket-b」へのアクセス権限を付与します。
IBM CloudコンソールのICOSの管理画面から、「qiita-bucket-b」を探し、下のようにアクセス・ポリシーをクリックしてください。
image.png

サービスIDとして、1.1で作成したサービスIDを選択し、「アクセス・ポリシーの作成」をクリックします。
image.png

1.3 APIキー作成

再度、管理→アクセス(IAM)のサービスIDを開きます。
1.1で作成したサービスIDを探し、「アクセス・ポリシー」を見てみると、1.2で付与した権限が正しく設定されていることを確認できます。

image.png
(なお、1.2の手順ではなく、ここから「アクセス権限の割り当て」を行うことも可能ですが、1.2の手順のほうが簡単です)

以下のようにAPIキーを作成します。
image.png
image.png

一応ダウンロードしておきます。
image.png

ダウンロードされたJSONを開くと、APIキーを確認できます。
このAPIキーがあれば、バケット「qiita-bucket-b」へアクセスできます!

"apiKey": "xxxyyyzzz"

2. Jupyter Notebookからアクセス

どこにどう上記のAPIキーを指定すればいいか、悩ましいところですが、最も簡単な方法は、以下のように、Assetに登録されている適当なファイルを「Insert to code」して下さい。
これを雛形として、書き換えるのが楽なためです。

image.png

そして、insertされたコードの以下の4箇所を書き換えてください。

image.png

2.1 ibm_api_key_id

1.3で作成したAPIキーに変更してください。

ibm_api_key_id='xxxyyyzzz'

2.2 endpoint_url

エンドポイントは、バケットごとに異なるため、IBM CloudコンソールのICOSの管理画面から確認するのが無難です。以下のように「構成」のところから確認できます。
image.png

これをコピーして貼り付けます。
image.png

endpoint_url='https://s3.jp-tok.cloud-object-storage.appdomain.cloud')

2.3 Bucket

以下の通りです。

Bucket='qiita-bucket-b'

2.4 Key

バケットにある、アクセスしたいファイルを指定します。

Key='new_potato_list.csv'

これで実行すると、ファイルの内容を確認できます。
image.png

本文は以上です。

補足1

このようなことを実現する方法は、他にもたくさんあると思います。
例えば、本来はWatson StudioのAssetでバケットへのconnectionを作るのがいいのかも知れません。
しかし、設定項目が多く何を入れればいいのか分かりづらいです。
image.png

そして、Jupyter notebookで上記のconnectionを「insert to code」しても、なぜかURLしか入ってくれません。(バグでしょうか。。)
image.png

補足2

2.2 endpoint_url では、わざわざバケットのエンドポイントを確認しました。
エンドポイントはさまざまありますが、これを間違えたときのエラーが分かりづらく、最初から正確に指定したいためです。

存在しないエンドポイントを指定すると以下のエラーが出力されますが、これは分かりやすい例です。

EndpointConnectionError: Could not connect to the endpoint URL: "https://s3.jp-tok.cloud-object-storage.appdomain.clou/qiita-bucket-b/new_potato_list.csv"

しかし、存在するが間違ったエンドポイントを指定すると以下のようなエラーが出力されます。
バケット名やファイル名が違うときも同じエラーが出力されるため、何が間違ってるのかが分かりません。

NoSuchKey: An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.
2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?