2017年3月9日木曜日

Python の boto というライブラリを使ってニフティクラウドストレージにファイルをアップロードしてみた

概要

Python の boto というライブラリを使ってニフティクラウドストレージにファイルをアップロードしてみました
boto は AWS 上のリソースにアクセスするための便利ライブラリで基本的には AWS を操作するために使いますが、AWS 互換の API があればエンドポイント変えて操作することも可能です

環境

  • Python 2.7.9
  • pip 7.1.2
  • boto 2.39.0

boto ライブラリのインストール

  • sudo pip install boto

サンプルスクリプトの作成

boto を使ってファイルをクラウドストレージにアップロードするサンプルスクリプトは以下の通りです

  • boto_ncss_sample.py
import sys
import boto
from boto.s3.key import Key
accesskey= 'Please input your accesskey'
secretkey = 'Please input your secretkey'
endpoint = 'ncss.nifty.com'

def main(argv):

  if len(argv) < 2:
    print("Usage: %s <bucket>" % (argv[0],))
    return 1
  # クラウドストレージに接続します
  conn = boto.connect_s3(
    aws_access_key_id=accesskey,
    aws_secret_access_key=secretkey,
    host=endpoint,)

  bucket_name = argv[1]
  # 引数に指定されたバケットを操作するためのオブジェクトを生成します
  bucket = conn.get_bucket(bucket_name, validate=False)
  # 引数に指定されたバケットにファイルをアップロードします
  f = Key(bucket)
  f.key = 'test'
  f.set_contents_from_filename('test')

  # 引数に指定されたバケットを作成します
  # conn.create_bucket(bucket_name)
  # バケットの一覧を表示します
  # cs = conn.get_all_buckets()
  # for b in cs:
  #   print b.name

if __name__ == '__main__':
  sys.exit(main(sys.argv))

実行は

  • python boto_ncss_sample.py bucket001

という感じに実行します
引数の 1 つ目にファイルをアップロードする対象のバケットを指定します

まずコントロールパネルで取得できるアクセスキーとシークレットキーを記載してください
endpoint にニフティクラウド用のエンドポイントを指定します

boto.connect_s3 で指定されたパラメータを元に接続を開始します

conn.get_bucket で操作するバケットのオブジェクトを生成します
引数の 2 つ目に validate=False を指定しています
これを指定しないと「boto.exception.S3ResponseError: S3ResponseError: 405 Method Not Allowed」というエラーが発生し先に進めません

あとはアップロードするファイル名を指定して Key オブジェクトを作成し f.set_contents_from_filename('test') でアップロードします

成功するとバケット配下にファイルが存在すると思うので確認してみてください

コメントアウトしている部分はおまけです

最後に

boto でニフティクラウドストレージにファイルをアップロードしてみました
他の操作 ( オブジェクト削除、取得、ACL 設定 等 ) もおそらく問題なくできるはずです
リージョンを変更したい場合は endpoint に指定した URL を変更してください

  • e.g) endpoint = west-1-ncss.nifty.com

参考サイト

0 件のコメント:

コメントを投稿