はじめに
最近になって、さくらのクラウドを触り始めた初心者(筆者)が四苦八苦しながら
オブジェクトストレージにファイルをアップロードしてみたのが前回の内容。
上記のアップロードができるようになったら
「なんかPythonから操作できる気がしてきたわ...」
と思い立ったので、Pythonから操作してみるのが今回の内容。
あと、先に言っておきますが、AWS公式ライブラリboto3を使った方法になるので
さくらインターネットの公式サポート対象外のやり方です。(多分)
だから、1年後には使えなくなっているかもしれない。(バナージ...悲しいね)
予想される検索ワード
以下、この記事を求めているであろう方が入力しそうな
(というか実際に私が必死で検索した)検索ワードです。
さくらのクラウド, オブジェクトストレージ, アップロード方法, Python, boto3
実行環境
- ubuntu 18.04(Dockerで構築)
- Python 3.7
- boto3 1.22.0
手順
オブジェクトストレージにてバケットを作成する
前回記事同様、以下のマニュアル通りなので多分ハマらないです。
(サイト作成時のアクセスキーIDとシークレットアクセスキーのメモは忘れずに!)
boto3をインストール
pipでboto3をインストールします。
$ pip install boto3
オブジェクトストレージへのアクセス確認
boto3からさくらのオブジェクトストレージ内のバケット一覧が取得できるか確認します。
-
test_boto3.pyを作成します。(場所は多分どこでもOK)
$ vi test_boto3.py
test_boto3.pyの中身はこんな感じ。
test_boto3.pyimport boto3 s3 = boto3.resource('s3', endpoint_url = "https://s3.isk01.sakurastorage.jp", aws_access_key_id = [サイト作成時のアクセスキー], aws_secret_access_key = [サイト作成時のシークレットアクセスキー], region_name = 'jp-north-1' ) for bucket in s3.buckets.all(): print(bucket)
-
test_boto3.pyを実行して、作成したテストバケットが表示されるか確認します。
$ python test_boto3.py
オブジェクトストレージにファイルをアップする
ubuntu上にあるtest_file_py.txtをオブジェクトストレージにアップしてみます。
-
/tmpフォルダ直下にtest_file_py.txtを用意しておきます。
$ vi /tmp/test_file_py.txt (中身は適当に記述して保存しておきます)
-
test_boto3.pyに以下の記述を追加します。
test_boto3.py# アップロード先のバケット名 bucket_name = "test-bucketxxxx" # アップロードするファイル upload_file = "/tmp/test_file_py.txt" # オブジェクトストレージ上で表示されるファイル名 obj_name = "test_file_py.txt" # ファイルのアップロード s3.Bucket(bucket_name).upload_file(upload_file, obj_name)
-
test_boto3.pyを実行します。
$ python test_boto3.py
補足というか余談
boto3を使用する際、boto3.client()とboto3.resource()があって混乱しました。
どうやらboto3.client()は低レイヤーサービスへのアクセス(辞書型データが返ってくる)
boto3.resource()は高レイヤーサービスへのアクセス(s3オブジェクトが返ってくる)
という感じのようです。
boto3.resource()の方がコードの可読性が高くなるので
基本的にboto3.resource()を使っておくのが正解のようです。
おわりに
AWS様の力をお借りしつつ、Pythonを使って
さくらのオブジェクトストレージにファイルをアップすることができました。
いつ使用できなくなるのか若干の不安はありますが、
Python上から操作できるのは、やっぱり便利ですね。
今後も「Python × さくらのクラウド」な小技を見つけたら
記事に残したいなと(現時点では)思っています。