Chapter13 boto3(前半)

今回は、boto3ライブラリを用いたAWS APIの操作を行った。前半と後半の二つに分け、前半では、S3のオペレーションを行う。

jupyterの起動

まずは、/dojo/s3ディレクトリでデプロイの手順を行い、デプロイを完了させる。

完了後、出力されるBucketName(本記事では※1とする)を記録し、jupyter notebookを起動する。

起動後、Ctrl+Cで終了の確認表示からjupyterのトークン(※2か※3)を確認できる。

そこで、※2か※3にブラウザでアクセスすると、以下のようなページが表示される。

これで、jupyterの準備は完了だ。

Basic IO

早速、NewからPython3のノートブックを開いた。

すると、jupyterのノートブックが開くため、以下のようなコードを打つ。boto3をインポートし、session、s3、bucket_name、bucketにそれぞれ、boto3のセッション、sessionのs3のリソース、バケット名(※1)、s3のバケットを格納し、tmp.txtファイルを書き込み形式で開き、Hello world!と書き込んでmyfile1.txtとmyfile2.txtファイルとしてアップロードしている。そして、最後にバケットのファイル一覧を取得している。

すると、アップロードしたファイル名が二つ帰ってきている。アップロードが成功したことが確認できた。

次に、obj変数にmyfile1.txtのオブジェクトを取得し、ファイルのサイズと更新日時をそれぞれ表示してみる。すると、このような出力結果が得られた。

次は、ファイルをダウンロードしてみる。download_file("ファイル名")で、ファイル名を付けてダウンロードすることができた。

最後に、オブジェクトを削除する。delete()関数を呼び出すことで、削除できた。また、オブジェクトが削除されたかどうかを確認するため、オブジェクトの一覧を取得してみると、myfile1.txtが削除され、myfile2.txtだけが残っていることが確認できた。

In-memory data transfer

続いては、s3のオブジェクトをローカルマシンのメモリに直接ロードしてみる。まずは、pandasとioを新たにインポートし、DataFrameテーブルを作成し、df変数に格納。そして、格納したテーブルの中身を確認してみた。すると、以下のような表が表示された。

次は、csv形式で保存してみる。なお、この書き方には三通りほどあるのだが、今回は以下の方法で行う。

続いて、ローカルマシンのメモリーにロードしてみる。この書き方にも三通りやり方があるのだが、今回はこの書き方を用いる。

次は、画像データの読み書きを行う。まずは、PIL、numpy、matplotlibをそれぞれインポートする。その後、clownfish.jpgを開くimg変数を用意し、pyplotライブラリのimshow関数で画像を表示してみる。すると、このようなクマノミの画像が表示された。

続いては、その画像をバケットにアップロードしてみる。In[26]の書き方は、二通りあるのだが、今回はこの書き方を用いてアップロードする。そして、最後はclose関数でImageオブジェクトを閉じておく。

早速バケットにアップロードした画像をロードしてみる。これも二通りあるのだが、今回はこの書き方を用いて行った。すると、アップロードした画像と同じものが表示された。これで、直接ロードすることに成功し、なおかつ画像がアップロードされたことも確認できた。

PresignedURL

最後に、Presigned URLを利用してみた。まずは、PresignedURLを用いるのに必要なrequestsライブラリをインポートし、s3のクライアントを格納したclientオブジェクトを作成する。これで準備は整ったので、PresignedURLの発行を行う。resp変数に、generate_presigned_post関数で作成したPresignedURLを格納している。そして、Bucket変数で使用バケットを指定し、Key変数でオブジェクトのキーをupload.txtに指定し、ExpiresIn変数に失効時間を格納しており、今回は600秒後に失効することになっている。これを表示させると、以上のように出力された。

続いて、取得したPresignedURLを用いたアップロードを行ってみる。resp2オブジェクトにてアップロードを行う。すると、以下のように出力された。

Trueと返されたため、アップロードは成功したようだ。

さて、続いては、そのオブジェクトをresp3変数にてダウンロードしてみる。すると、以下のPresignedURLが発行された。ここにアクセスすると、ダウンロードが始まる。

ダウンロードされた、upload.txtを確認してみると、dummy.textの内容が格納されたupload.txtファイルを見ることができた。

直接開く以外にも、resp4でresp3を取得し、そのデータを参照することでダウンロードを確認した。すると、このように、Trueとファイルの中身が見ることができた。

さて、これでやることは終わったため、jupyterをCtrl+Cで終了し、スタックを終了した。

後半では、DynamoDBをboto3で動かそうと思う。