GitHubじゃ!Pythonじゃ!

GitHubからPython関係の優良リポジトリを探したかったのじゃー、でも英語は出来ないから日本語で読むのじゃー、英語社会世知辛いのじゃー

s3tools

s3cmd – 公式のs3cmd repo – Amazon S3およびCloudFrontサービスを管理するためのコマンドラインツール

投稿日:

公式のs3cmd repo – Amazon S3およびCloudFrontサービスを管理するためのコマンドラインツール http://s3tools.org/s3cmd

Amazon Simple Storage Service(S3)用のS3cmdツール

S3tools / S3cmdメーリングリスト:

S3cmdにはPython 2.6以降が必要です。 Python 3+は、S3cmdバージョン2からもサポートされています。

S3cmdとは

S3cmd( s3cmd )は、Amazon S3やGoogle Cloud StorageやDreamHost DreamObjectsなどのS3プロトコルを使用する他のクラウドストレージサービスプロバイダのデータをアップロード、取得、管理するための無料のコマンドラインツールとクライアントです。 コマンドラインプログラムに精通したパワーユーザーに最適です。 また、バッチスクリプトやS3への自動バックアップ、cronなどからトリガされるのにも最適です。

S3cmdはPythonで書かれています。 GNU Public License v2(GPLv2)の下で公開されているオープンソースプロジェクトで、商用と民間の両方で無料で利用できます。 あなたは自分のストレージを使用するためにAmazonに支払うだけで済みます。

S3cmdには、2008年の最初のリリース以来、多くの機能やオプションが追加されています….最近、マルチパートアップロード、暗号化、増分バックアップ、s3同期、ACLとメタデータ管理、S3バケットサイズ、バケットポリシー、その他

Amazon S3とは

Amazon S3は管理されたインターネットアクセス可能なストレージサービスを提供しています。誰でも任意の量のデータを保存して後で再度取得できます。

S3はAmazonが運営する有料サービスです。 S3に何かを保存する前に、「AWS」アカウント(AWS = Amazon Web Services)にサインアップして、アクセスキーとシークレットキーのペアを取得する必要があります。 S3cmdにこれらのキーを与える必要があります。 それらがあなたのS3アカウントのユーザー名とパスワードであるかのように考えてください。

Amazon S3の価格設定について

この記事を書いている時点では、S3を使用するコストは(米ドルで)

使用されるストレージ容量のGB /月あたり0.026ドル

プラス

GBあたり0.00ドル – アップロードされたすべてのデータ

プラス

GB当たり$ 0.000 – ダウンロードされた最初の1GB /月のデータ – GB当たり0.090ドル – ダウンロードされたデータは最大10TB /月 – GB当たり0.085ドル – 次の40TB /月のデータ – GB当たり0.070ドル – 150TB超/月

プラス

PUTまたはCOPYまたはLIST要求1,000件につき0.005ドル、10,000 GETあたり0.004ドル、その他すべてのリクエスト

たとえば、1月1日にニュージーランドの休日からJPEGで2GBの写真をアップロードすると、1月末に2GBのストレージスペースを1か月間で0.06ドル、2GBのデータをアップロードする場合は0.0ドル、リクエスト数が少ない それはあなたの貴重な休日の写真の完全なバックアップのために$ 0.06をわずかに上回ります。

2月にはあなたはそれに触れません。 あなたのデータはまだS3サーバ上にあるので、2ギガバイトで0.06ドルを支払うことになりますが、転送には1セントが課金されません。 これは、バックアップの継続的なコストとして$ 0.06になります。 悪くない。

3月にはあなたの写真の一部に匿名での閲覧アクセスを許可し、友人は1500MBのダウンロードを許可します。 ファイルはあなたが所有しているため、発生したコストはお客様が負うものとします。 つまり、3月末には、保存容量は0.06ドル、友人からダウンロードされたダウンロードトラフィックは0.045ドルとなります。

最低月額契約またはセットアップ料金はありません。 あなたが使うのは、あなたが支払うものです。 当初、私の法案は、US $ 0.03のようなものでした。

これがAmazon S3の価格モデルです。 詳細についてはAmazon S3ホームページをご覧ください。

言うまでもなく、これらのすべての金はAmazon自身によって課金されていますが、明らかにS3cmdを使った支払いはありません:-)

Amazon S3の基本

S3に格納されたファイルは「オブジェクト」と呼ばれ、その名前は正式に「キー」と呼ばれます。 これはユーザーにとって混乱させることがあるので、オブジェクトを「ファイル」または「リモートファイル」と呼ぶことがよくあります。 各オブジェクトは正確に1つの「バケット」に属します。

S3ストレージのオブジェクトを記述するために、我々は次のような形式のURIのようなスキーマを発明しました:

s3://BUCKET

または

s3://BUCKET/OBJECT

バケツ

バケツは、いくつかの制限があるようなディレクトリやフォルダのようなものです:

  1. 各ユーザーは最大で100個のバケットしか持てませんが、
  2. バケット名は、S3のすべてのユーザーの間で一意でなければなりません。
  3. バケットをより深い階層にネストすることはできません。
  4. バケットの名前は基本的な英数字とドット(。)とダッシュ( – )のみで構成できます。 スペースなし、アクセント記号なし、UTF-8文字など

DNSと互換性のあるバケット名を使用することをお勧めします。 つまり、大文字を使用しないでください。 DNSの準拠は厳密には要求されていませんが、以下で説明する一部の機能は、DNSと互換性のない名前付きバケットでは使用できません。 バケツに完全修飾ドメイン名(FQDN)を使用することにより、さらに多くの利点があります。

  • たとえば、 “s3:// – My-Bucket–“はDNSと互換性がありません。
  • 一方、 “s3:// my-bucket”はDNSと互換性がありますが、FQDNではありません。
  • 最後に、 “s3://my-bucket.s3tools.org”はDNS互換であり、FQDNはs3tools.orgドメインを所有しており、 “my-bucket.s3tools.org”のドメインレコードを作成できます。

バケツと呼ばれるFQDNの詳細については、このテキストの「仮想ホスト」を参照してください。

オブジェクト(Amazon S3に保存されているファイル)

バケットとは異なり、オブジェクト名にはほとんど制限がありません。 これらは最大1024バイトのUTF-8文字列です。 興味深いことに、オブジェクト名にスラッシュ文字(/)を入れることができますmy/funny/picture.jpgは有効なオブジェクト名です。 myfunnyという名前のディレクトリやバケットはありません。本当にmy/funny/picture.jpgという単一のオブジェクト名であり、S3はディレクトリ構造のように見えることはまったく気にしません。

そのようなイメージの完全なURIは、たとえば次のようなものです。

s3://my-bucket/my/funny/picture.jpg

公開ファイルとプライベートファイル

S3に格納されているファイルは、プライベートまたはパブリックのいずれかになります。 私的なものはアップロードしたユーザーだけが読むことができ、公開されたものは誰でも読むことができます。 さらに、 s3cmdまたは同様のツールを使用するだけでなく、HTTPプロトコルを使用してパブリックファイルにアクセスすることもできます。

ファイルのACL(アクセス制御リスト)は、アップロード時にs3cmd putコマンドまたはs3cmd syncコマンド(下記参照)で--acl-publicまたは--acl-privateオプションを使用して設定できます。

また、 s3cmd setacl --acl-public (または--acl-private )コマンドを使用して、既存のリモートファイルに対してACLを変更することもできます。

単純なs3cmdハウツー

  1. Amazon AWS / S3の登録

http://aws.amazon.com/s3にアクセスし、右側の列にある[Webサービスにサインアップ]ボタンをクリックし、登録作業を行います。 あなたはAmazonがS3使用を請求できるように、クレジットカードの詳細を提供する必要があります。 最後にあなたのアクセスと秘密鍵が必要です。

別のIAMユーザーを設定する場合、そのユーザーのアクセスキーには、少なくとも次のような権限が必要です。

  • s3:ListAllMyBuckets
  • s3:GetBucketLocation
  • s3:ListBucket

その他のポリシー例については、 https://docs.aws.amazon.com/AmazonS3/latest/dev/example-policies-s3.htmlを参照してください。

  1. s3cmd --configure実行s3cmd --configure

2つのキーの入力を求められます。確認メールまたはAmazonアカウントのページからコピーして貼り付けます。 コピーするときは注意してください! 大文字と小文字が区別され、正確に入力する必要があります。そうしないと、無効な署名などについて間違いが発生します。

キーにs3:ListAllMyBuckets権限を追加することを忘れないと、アクセスをテストする際にAccessDeniedエラーが発生します。

  1. s3cmd lsを実行してすべてのバケットを一覧表示します。

S3を使い始めたばかりなので、今のところ所有しているバケットはありません。 したがって、出力は空になります。

  1. s3cmd mb s3://my-new-bucket-name

上記のように、バケット名はS3のすべてのユーザーの中で一意でなければなりません。 これは、 “test”や “asdf”のような単純な名前が既に使われていることを意味しています。 できるだけ多くの機能をデモンストレーションするために、FQDNという名前のバケットs3://public.s3tools.org作成しましょう:

$ s3cmd mb s3://public.s3tools.org

Bucket 's3://public.s3tools.org' created
  1. s3cmd ls再度バケットを一覧表示する

今すぐ新しく作成されたバケットが表示されます。

$ s3cmd ls

2009-01-28 12:34  s3://public.s3tools.org
  1. バケットの内容を一覧表示する:
$ s3cmd ls s3://public.s3tools.org
$

それは確かに空です。

  1. バケットに1つのファイルをアップロードする:
$ s3cmd put some-file.xml s3://public.s3tools.org/somefile.xml

some-file.xml -> s3://public.s3tools.org/somefile.xml  [1 of 1]
 123456 of 123456   100% in    2s    51.75 kB/s  done

バケットの仮想 ‘ディレクトリ’に2つのディレクトリツリーをアップロードします。

$ s3cmd put --recursive dir1 dir2 s3://public.s3tools.org/somewhere/

File 'dir1/file1-1.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-1.txt' [1 of 5]
File 'dir1/file1-2.txt' stored as 's3://public.s3tools.org/somewhere/dir1/file1-2.txt' [2 of 5]
File 'dir1/file1-3.log' stored as 's3://public.s3tools.org/somewhere/dir1/file1-3.log' [3 of 5]
File 'dir2/file2-1.bin' stored as 's3://public.s3tools.org/somewhere/dir2/file2-1.bin' [4 of 5]
File 'dir2/file2-2.txt' stored as 's3://public.s3tools.org/somewhere/dir2/file2-2.txt' [5 of 5]

ご覧のとおり、 /somewhereディレクトリの/somewhereを作成する必要はありませんでした。 実際、それは実際のディレクトリではなく、ファイル名の接頭辞であり、あらかじめ作成する必要はありません。

--recursiveオプションでputを使う代わりに、 syncコマンドを使うこともできます:

$ s3cmd sync dir1 dir2 s3://public.s3tools.org/somewhere/
  1. バケットの内容をもう一度表示します:
$ s3cmd ls s3://public.s3tools.org

                       DIR   s3://public.s3tools.org/somewhere/
2009-02-10 05:10    123456   s3://public.s3tools.org/somefile.xml

すべてのリモートファイルを表示するには–recursive(または-r)を使用します。

$ s3cmd ls --recursive s3://public.s3tools.org

2009-02-10 05:10    123456   s3://public.s3tools.org/somefile.xml
2009-02-10 05:13        18   s3://public.s3tools.org/somewhere/dir1/file1-1.txt
2009-02-10 05:13         8   s3://public.s3tools.org/somewhere/dir1/file1-2.txt
2009-02-10 05:13        16   s3://public.s3tools.org/somewhere/dir1/file1-3.log
2009-02-10 05:13        11   s3://public.s3tools.org/somewhere/dir2/file2-1.bin
2009-02-10 05:13         8   s3://public.s3tools.org/somewhere/dir2/file2-2.txt
  1. ファイルの1つを取り戻し、破損していないことを確認します。
$ s3cmd get s3://public.s3tools.org/somefile.xml some-file-2.xml

s3://public.s3tools.org/somefile.xml -> some-file-2.xml  [1 of 1]
 123456 of 123456   100% in    3s    35.75 kB/s  done
$ md5sum some-file.xml some-file-2.xml

39bcb6992e461b269b95b3bda303addf  some-file.xml
39bcb6992e461b269b95b3bda303addf  some-file-2.xml

元のファイルのチェックサムは、取り出されたファイルのチェックサムと一致します。 それは働いたように見えます:-)

S3から全体のディレクトリツリーを取得するには、再帰get:

$ s3cmd get --recursive s3://public.s3tools.org/somewhere

File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as './somewhere/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as './somewhere/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as './somewhere/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as './somewhere/dir2/file2-1.bin'
File s3://public.s3tools.org/somewhere/dir2/file2-2.txt saved as './somewhere/dir2/file2-2.txt'

宛先ディレクトリが指定されていないため、 s3cmdは現在の作業ディレクトリ( ‘。’)にディレクトリ構造を保存しました。

次の点で重要な違いがあります。

get s3://public.s3tools.org/somewhere

そして

get s3://public.s3tools.org/somewhere/

(末尾のスラッシュに注意してください)

s3cmdは、最後のパス部分、つまり最後のスラッシュの後の単語をファイルの命名に使用します。

s3://.../somewhereどこかで、最後のパス部分はどこかにあります。したがって、再帰的getは、ローカルファイルをどこか/ dir1、somewhere / dir2などと名前を付けます。

一方、 s3://.../somewhere/の最後のパス部分は空で、s3cmdは ‘somewhere /’接頭辞なしで ‘dir1’と ‘dir2’のみを作成します:

$ s3cmd get --recursive s3://public.s3tools.org/somewhere/ ~/

File s3://public.s3tools.org/somewhere/dir1/file1-1.txt saved as '~/dir1/file1-1.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt saved as '~/dir1/file1-2.txt'
File s3://public.s3tools.org/somewhere/dir1/file1-3.log saved as '~/dir1/file1-3.log'
File s3://public.s3tools.org/somewhere/dir2/file2-1.bin saved as '~/dir2/file2-1.bin'

見る? これは~/dir1~/somewhere/dir1ではなく、前の例と同じです。

  1. クリーンアップ – リモートファイルを削除してバケットを削除する:

s3://public.s3tools.org/somewhere/の下のすべてを削除します。

$ s3cmd del --recursive s3://public.s3tools.org/somewhere/

File s3://public.s3tools.org/somewhere/dir1/file1-1.txt deleted
File s3://public.s3tools.org/somewhere/dir1/file1-2.txt deleted
...

今すぐバケットを削除してみてください:

$ s3cmd rb s3://public.s3tools.org

ERROR: S3 error: 409 (BucketNotEmpty): The bucket you tried to delete is not empty

s3://public.s3tools.org/somefile.xmls3://public.s3tools.org/somefile.xmlは忘れてしまった。 とにかくバケットを強制的に取り除くことができます:

$ s3cmd rb --force s3://public.s3tools.org/

WARNING: Bucket is not empty. Removing all the objects from it first. This may take some time...
File s3://public.s3tools.org/somefile.xml deleted
Bucket 's3://public.s3tools.org/' removed

ヒント

基本的な使い方は、前のセクションで説明したように簡単です。

-vオプションで冗長レベルを上げることができます。もしあなたが本当にボンネットの下で何をしているのか知りたいのであれば、 -dオプションを使って実行して、すべての ‘デバッグ’出力を見ることができます。

--configure設定した後は、利用可能なすべてのオプションが~/.s3cfgファイルに~/.s3cfgます。 それはあなたの好みのテキストエディタで修正される準備ができているテキストファイルです。

転送コマンド(put、get、cp、mv、およびsync)は、オブジェクトに障害が発生しても転送を継続します。 障害が発生した場合、障害はstderrに出力され、終了ステータスはEX_PARTIAL(2)になります。 --stop-on-errorオプションが指定されている場合、またはconfigオプションstop_on_errorがtrueの場合、転送が停止し、適切なエラーコードが返されます。

詳細は、 S3cmd / S3toolsのホームページを参照してください。

ライセンス

Copyright(C)2007-2017 TGRMN Software – http://www.tgrmn.com – および寄稿者

このプログラムはフリーソフトウェアです。 フリーソフトウェア財団が公表したGNU一般公衆利用許諾契約書の条件に基づいて、それを再配布および/または改変することができます。 ライセンスのバージョン2、または(オプションで)それ以降のバージョン。

このプログラムは有用であることを期待して配布されていますが、いかなる保証もありません。 商品性または特定目的への適合性の暗黙の保証さえも含みません。 詳細については、GNU General Public Licenseを参照してください。







-s3tools

執筆者: