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で動かそうと思う。