Amazon S3 からのデータの統合

Red Hat OpenShift Data Science 1

Amazon Web Services (AWS) の Simple Storage Service (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 で実行する JupyterHub サーバー。
  • 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 で実行している JupyterHub ノートブックサーバーへのアクセス。
  • My Security Credentials の Amazon Web Services アカウントの値を使用して、ノートブックサーバーの起動時に AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY 環境変数の値を定義しておく。

手順

  1. 新しいノートブックセルで、以下を追加して必要なライブラリーをインポートします。

    import os
    import boto3
    from boto3 import session
  2. 別の新規ノートブックセルで、以下を定義してセッションとクライアントを作成します。

    1. 認証情報を定義します。

      key_id = os.environ.get(AWS_ACCESS_KEY_ID)
      secret_key = os.environ.get(AWS_SECRET_ACCESS_KEY)
    2. クライアントセッションを定義します。

      session = boto3.session.Session(aws_access_key_id=key_id, aws_secret_access_key=secret_key)
    3. クライアント接続を定義します。

      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 バケットの一覧表示

アカウントで利用可能なバケットを一覧表示して、アクセス可能なバケットを確認できます。

前提条件

手順

  1. 新しいノートブックセルを作成し、s3_client を使用して利用可能なバケットを一覧表示します。

    s3_client.list_buckets()
  2. 完全な応答ではなく名前のみを出力するなどして、バケットの一覧の読み取りをより簡単にすることができます。

    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 バケットのファイルの一覧表示

バケットのオブジェクトを一覧表示して、アクセス可能なバケットで利用可能なファイルを確認できます。バケットは通常のファイルシステムの代わりにオブジェクトストレージを使用するため、オブジェクトの命名は通常のファイル命名とは異なります。バケットのオブジェクトはキーによって常に認識されます。これはバケットの完全パスとファイル自体の名前で構成されます。

前提条件

手順

  1. 新しいノートブックセルを作成し、バケットのオブジェクトを一覧表示します。例:

    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}
  2. 完全な応答ではなくキーのみを出力するなどして、この一覧の読み取りをより簡単にすることができます。

    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
  3. また、クエリーをフィルターして、特定の「パス」またはファイル名について一覧表示できます。以下に例を示します。

    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])

第5章 ノートブックセルでの利用可能な Amazon S3 バケットからのファイルのダウンロード

download_file メソッドを使用して、ファイルをノートブックサーバーにダウンロードできます。

前提条件

手順

  1. ノートブックセルに以下を定義します。

    1. ファイルが置かれているバケット。

      bucket_name = name_of_the_bucket
    2. ダウンロードするファイルの名前。

      file_name = name_of_the_file_to_download # Full path from the bucket
    3. ダウンロード後にファイルに使用される名前。完全パス、相対パス、または新しいファイル名のみを指定できます。

      new_file_name = name_of_the_file_once_downloaded
  2. 以前の変数を引数として指定してファイルをダウンロードします。

    s3_client.download_file(bucket_name, file_name, new_file_name)
    注記

    ファイルをオブジェクトとして取得し、read() メソッドを使用して標準ファイルとしてストリーミングする場合は、Amazon Sev Services get object コマンドリファレンスを参照してください。

第6章 ノートブックセルをでの利用可能な Amazon S3 バケットへのファイルのアップロード

upload_file メソッドを使用して、ノートブックサーバーから Amazon S3 バケットにファイルをアップロードできます。

前提条件

手順

  1. ノートブックセルに以下を定義します。

    1. アップロードするファイルの名前。これには、ファイルへの完全なローカルパスを含める必要があります。

      file_name = name_of_the_file_to_upload
    2. ファイルをアップロードするバケットの名前。

      bucket_name = name_of_the_bucket
    3. ファイルをバケットに保存するために使用するフルキー。

      key = full_path_and_file_name
  2. 以前の変数を引数として指定してファイルをアップロードします。

    s3_client.upload_file(file_name, bucket_name, key)

第7章 関連情報