0
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 1 year has passed since last update.

【AWS】13章 boto3道場「S3道場」(前編)

Last updated at Posted at 2022-05-20

13章「boto3道場」「S3道場」(前編)

こんにちは、k_ukiです。現在「AWSではじめるクラウド開発入門」という書籍の13章を進めています。
この章では、PythonからAWS APIを操作するためのライブラリ「boto3」の理解を「S3,DynamoDB」のハンズオンで深めていくということを行いました。その中でも今回は「S3」のハンズオンで学んだことをまとめていきます。

概要

  • 空のバケットをデプロイ
  • LEVEL1】Jupyter notebookを使用し、ローカルのディスクに保存されているデータを操作する。
    前編はここまで

  • LEVEL2】ディスク上ではなくメモリ上に保存されているデータを操作する。
  • LEVEL3】署名付きURLを触ってみる。
    後編の記事はこちら

空のバケットをデプロイ

まずはプロジェクトのディレクトリに移動し依存ライブラリのインストールを行います。
以下のコマンドを入力します。また、インストール完了後デプロイも同時に実行します。

$ cd handson/dojo/s3
$ python3 -m venv .env
$ source .env/bin/activate
$ pip install -r requirements.txt
$ cdk deploy

実行後、以下のような文字列が表示されたら成功です。
以下の画像の青文字の部分の"simples3~~"の部分は後ほど使用するためコピーしておきます。
13-8.png

LEVEL1 ディスクに保存されているデータを操作する。

デプロイが完了したら、実際にコードを入力していきます。ここではJupyter Notebookを使用していきます。
※Jupyter Notebookはブラウザ上でコードの記述と実行ができる統合開発環境です。

以下のコマンドで起動します。

$jupyter notebook

表示されたURLでJupyter notebookにアクセスし、新しいノートブックを作成します。

作成後、実際にコードを入力していきます。
初めに、boto3ライブラリをインポートし、Session()オブジェクトを経由してs3のリソースを呼び出します。

import boto3
session = boto3.Session(profile_name="default")
s3 = session.resource("s3")

boto3とは、pythonでAWS APIを操作するためのライブラリのことです。

また、今回初めて出てきた Session()オブジェクトについても解説します。
Session()オブジェクトは、s3などのサービスに接続するために必要な認証情報を格納するためのオブジェクトとなります。今回はデフォルトのプロファイルを使用するため、profile_nameに "default"を格納しています。

次に、バケット名を変数に定義します。
定義した後に、Bucket()オブジェクトを作成します。

bucket_name = "デプロイ時にコピーしたバケット名"
bucket = s3.Bucket(bucket_name)

これで、バケットの操作が可能になりました。
さっそくテキストファイルをアップロードしてみます。

ダミーのテキストファイル(tmp.txt)を生成して、バケットにアップロードします。
ここでは、同じファイルをmyfile1.txt,myfile2.txtという2つのファイル名でアップロードします。

with open("tmp.txt","w") as f:
    f.write("Hello world!")
bucket.upload_file("tmp.txt","myfile1.txt")
bucket.upload_file("tmp.txt","myfile2.txt")

アップロードが完了したので、バケットの中のファイルの一覧を取得します。

objects = bucket.objects.all()
for o in objects:
    print(o.key)

ここでは、bucketの中身をallメソッドで全て取得し、取得したオブジェクトを順番に出力しています。
実行後以下の結果が得られました。アップロードしたファイルが正しく出力されたことが分かります。
13-10.png

次に、myfile01.txt のファイルサイズと最終更新日時を読みだしてみます。

obj = bucket.Object("myfile1.txt")
print(obj.content_length)
print(obj.last_modified)

bucket.Object() メソッドでmyfile1.txt を指定し、変数に格納してしています。
content_lengthで指定したオブジェクトのファイルサイズを読み取ることができます。
また、last_modifiedでオブジェクトの最終更新日時を取得することができます。

以下が実行結果です。
13-11.png

次に、バケット内のオブジェクトをローカルにダウンロードしてみます。コマンドは以下の通りです。

obj.download_file("downloaded.txt")

download_file()メソッドを使用することでバケット内のオブジェクトをダウンロードできます。
ローカル内を確認するとdownloaded.txt というファイルが作成されたことがわかります。
13-12.png

LEVEL1の最後として、バケット内のオブジェクトを削除します。

obj.delete()

再度、オブジェクト一覧を取得するコマンドを入力したところ以下の結果が得られました。
myfile1.txt が削除したことが分かります。
13-14.png

以上でLEVEL1は完了です。
 文章量が長くなるので後編に続きます。

0
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
0
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?