Amazon S3 からのデータの統合
Amazon Web Services (AWS) の Simple Storage Service (S3) バケットに保存されているデータの使用
概要
はじめに
Jupyter ノートブックで作業する場合は、Amazon Web Services (AWS) Simple Storage Service (S3) バケットに保存されているデータを使用することが必要な場合があります。このセクションでは、Amazon S3 に保存されているデータを使用するコマンドおよび手順を説明します。
第1章 前提条件
- Red Hat OpenShift Data Science で実行する Jupyter サーバー。
- Amazon Web Services S3 バケットへのアクセス。
-
Amazon S3 アカウントの
AWS Access Key ID
およびAWS Secret Access Key
を特定する。 - Jupyter ノートブック。
第2章 ノートブックセルを使用した Amazon S3 クライアントの作成
Amazon S3 バケットでデータを操作するには、そのサービスに対する要求を処理するローカルクライアントを作成する必要があります。
前提条件
- Red Hat OpenShift Data Science で実行している Jupyter ノートブックサーバーへのアクセス。
-
My Security Credentials の Amazon Web Services アカウントの値を使用して、ノートブックサーバーの起動時に
AWS_ACCESS_KEY_ID
およびAWS_SECRET_ACCESS_KEY
環境変数の値を定義している。
手順
新しいノートブックセルで、以下を追加して必要なライブラリーをインポートします。
import os import boto3 from boto3 import session
別の新規ノートブックセルで、以下を定義してセッションとクライアントを作成します。
認証情報を定義します。
key_id = os.environ.get('AWS_ACCESS_KEY_ID') secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY')
クライアントセッションを定義します。
session = boto3.session.Session(aws_access_key_id=key_id, aws_secret_access_key=secret_key)
クライアント接続を定義します。
s3_client = boto3.client('s3', aws_access_key_id=key_id, aws_secret_access_key=secret_key)
検証
新しいセルを作成し、以下のような Amazon S3 コマンドを実行します。
s3_client.list_buckets()
正常な応答には、
HTTPStatusCode
200
と以下のようなBuckets
のリストが含まれます。'Buckets': [{'Name': 'my-app-asdf3-image-registry-us-east-1-wbmlcvbasdfasdgvtsmkpt', 'CreationDate': datetime.datetime(2021, 4, 21, 6, 8, 52, tzinfo=tzlocal())}, {'Name': 'cf-templates-18rxasdfggawsvb-us-east-1', 'CreationDate': datetime.datetime(2021, 2, 15, 18, 35, 34, tzinfo=tzlocal())}
第3章 ノートブックセルを使用して利用可能な Amazon S3 バケットを一覧表示
アカウントで利用可能なバケットをリスト表示して、アクセス可能なバケットを確認できます。
前提条件
- ノートブックの前のセルで Amazon S3 クライアントを設定する。詳細は、ノートブックセルを使用した Amazon S3 クライアントの作成 を参照してください。
手順
新しいノートブックセルを作成し、
s3_client
を使用して利用可能なバケットをリスト表示します。s3_client.list_buckets()
完全な応答ではなく、名前のみを出力することで、このバケット一覧の可読性を高めます。次に例を示します。
for bucket in s3_client.list_buckets()['Buckets']: print(bucket['Name'])
これにより、以下のような出力が返されます。
my-app-asdf3-image-registry-us-east-1-wbmlcvbasdgasdgtkpt cf-templates-18rxuasgasgvb-us-east-1
第4章 ノートブックセルを使用して利用可能な Amazon S3 バケットのファイルを一覧表示
バケットのオブジェクトを一覧表示し、アクセス可能なバケットにある利用可能なファイルを確認できます。バケットは通常のファイルシステムの代わりにオブジェクトストレージを使用するため、オブジェクトの命名は通常のファイル命名と異なります。バケットのオブジェクトはキーによって常に認識されます。これはバケットの完全パスとファイル自体の名前で設定されます。
前提条件
- ノートブックの前のセルで Amazon S3 クライアントを設定する。詳細は、ノートブックセルを使用した Amazon S3 クライアントの作成 を参照してください。
手順
新しいノートブックセルを作成し、バケットのオブジェクトをリスト表示します。以下に例を示します。
bucket_name = 'std-user-bucket1' s3_client.list_objects_v2(Bucket=bucket_name)
以下の形式で複数のオブジェクトが返されます。
{'Key': 'docker/registry/v2/blobs/sha256/00/0080913dd3f10aadb34asfgsgsdgasdga072049c93606b98bec84adb259b424f/data', 'LastModified': datetime.datetime(2021, 4, 22, 1, 26, 1, tzinfo=tzlocal()), 'ETag': '"6e02fad2deassadfsf900a4bd7344ffe"', 'Size': 4052, 'StorageClass': 'STANDARD'}
完全な応答ではなくキーのみを出力するなどして、この一覧の読み取りを容易化できます。
bucket_name = 'std-user-bucket1' for key in s3_client.list_objects_v2(Bucket=bucket_name)['Contents']: print(key['Key'])
これにより、以下のような出力が返されます。
docker/registry/v2/blobs/sha256/00/0080913dd3f10aadb34asfgsgsdgasdga072049c93606b98bec84adb259b424f/data
また、クエリーをフィルターして、特定の "パス" またはファイル名などを一覧表示できます。以下はその例です。
bucket_name = 'std-user-bucket1' for key in s3_client.list_objects_v2(Bucket=bucket_name,Prefix='<start_of_file_path>')['Contents']: print(key['Key'])
前の例で、
<start_of_file_path>
を独自の値に置き換えます。
第5章 ノートブックセルを使用して利用可能な Amazon S3 バケットからファイルをダウンロード
download_file
メソッドを使用して、ファイルをノートブックサーバーにダウンロードできます。
前提条件
- ノートブックの前のセルで Amazon S3 クライアントを設定する。詳細は、ノートブックセルを使用した Amazon S3 クライアントの作成 を参照してください。
手順
ノートブックセルに以下の詳細を定義します。
ファイルが置かれているバケット。
<name_of_the_bucket>
を独自の値に置き換えます。bucket_name = '<name_of_the_bucket>'
ダウンロードするファイルの名前。
<name_of_the_file_to_download>
を独自の値に置き換えます。file_name = '<name_of_the_file_to_download>' # Full path from the bucket
ダウンロード後にファイルに使用される名前。完全パス、相対パス、または新しいファイル名のみ指定できます。
<name_of_the_file_when_downloaded>
を独自の値に置き換えます。new_file_name = '<name_of_the_file_when_downloaded>'
以前の変数を引数として指定し、ファイルをダウンロードします。
s3_client.download_file(bucket_name, file_name, new_file_name)
注記ファイルをオブジェクトとして取得し、read() メソッドを使用して標準ファイルとしてストリーミングする場合は、Amazon Web Services get object command reference を参照してください。
第6章 ノートブックセルを使用した利用可能な Amazon S3 バケットへのファイルのアップロード
upload_file
メソッドを使用して、ノートブックサーバーから Amazon S3 バケットにファイルをアップロードできます。
前提条件
- ノートブックの前のセルで Amazon S3 クライアントを設定する。詳細は、ノートブックセルを使用した Amazon S3 クライアントの作成 を参照してください。
手順
ノートブックセルに以下の詳細を定義します。
アップロードするファイルの名前。ファイルへの完全なローカルパスを含める必要があります。
<name_of_the_file_to_upload>
を独自の値に置き換えます。file_name = '<name_of_the_file_to_upload>'
ファイルをアップロードするバケットの名前。
<name_of_the_bucket>
を独自の値に置き換えます。bucket_name = '<name_of_the_bucket>'
ファイルをバケットに保存するために使用する完全なキー。
<full_path_and_file_name>
を独自の値に置き換えます。key = '<full_path_and_file_name>'
以前の変数を引数として指定し、ファイルをアップロードします。
s3_client.upload_file(file_name, bucket_name, key)