s3cmd を使って、Jenkinsのジョブをs3に週次でバックアップしてるのですが、 ある時から、
$ s3cmd -f put /tmp/jenkins_bk.tar.gz s3://hogehoge/ /tmp/jenkins_bk.tar.gz -> s3://hogehoge/jenkins_bk.tar.gz [1 of 1] 7725056 of 5660650889 0% in 1s 7.02 MB/s failed WARNING: Upload failed: /jenkins_bk.tar.gz ([Errno 32] Broken pipe) WARNING: Retrying on lower speed (throttle=0.00) WARNING: Waiting 3 sec...
とか出て、アップロード出来なくなりました。その際の対処法のメモです。
S3のアップロードファイルサイズ制限が原因
色々調べてみたところ、どうもS3にはアップロードファイルサイズ制限(5GB)があるとのこと。
(公式のソースはちょっと見つけられませんでしたが…。)
確認すると、確かにバックアップファイルの容量が、5GB を超えてました。
$ ls -l -rw-rw-r-- 1 jenkins jenkins 5660650889 4月 23 09:40 jenkins_bk.tar.gz
5GB超えのファイルをどうやってS3にアップロードするには
じゃあどうすればいいのってことになるのですが、かなり前の記事に記載がありました。
【AWS発表】 Amazon S3において大容量ファイルを分割アップロード可能にするマルチパートアップロード機能(Multipart Upload)の発表
ということらしいです。
小さいファイルに分割すればいいよ、と。
Multipart Upload を s3cmd で使う
それなら Multipart Upload オプションみたいなのを s3cmd で使用すればいいのか、
となるのですが、どうもパッケージでリリースされているものはそれに未対応とのこと。
ですが、beta版で対応しているらしいので、そちらを入れます。
公式ページにアクセスして、Download here をクリック。
α版のダウンロードページに行きますが、ちょっと不安なので Parent folder をクリックして、
1.1.0-beta2 をダウンロード
Problem: KeyError: 'elapsed' S3cmd: 1.1.0-beta3とかなって、この問題に当たるので、1.5.0-alpha3 を使用しました。
あとは下記のようにインストール。
~$ tar zxvf s3cmd-1.1.0-beta3.tar.gz ~$ cd s3cmd-1.1.0-beta3/ ~/s3cmd-1.1.0-beta3$ ls -l 合計 144 -rw-r--r-- 1 hoge hoge 2707 8月 2 2011 INSTALL -rw-r--r-- 1 hoge hoge 7651 1月 12 2012 NEWS -rw-r--r-- 1 hoge hoge 661 1月 12 2012 PKG-INFO -rw-r--r-- 1 hoge hoge 13130 8月 2 2011 README drwxr-xr-x 2 hoge hoge 4096 1月 12 2012 S3 -rwxr-xr-x 1 hoge hoge 83178 1月 12 2012 s3cmd -rw-r--r-- 1 hoge hoge 13655 1月 12 2012 s3cmd.1 -rw-r--r-- 1 hoge hoge 28 8月 2 2011 setup.cfg -rw-r--r-- 1 hoge hoge 2399 1月 2 2012 setup.py ~/s3cmd-1.1.0-beta3$ sudo python setup.py install ~/s3cmd-1.1.0-beta3$ s3cmd --version s3cmd version 1.1.0-beta3
で、設定ファイル作成。
~$ s3cmd --configure Enter new values or accept defaults in brackets with Enter. Refer to user manual for detailed description of all options. Access key and Secret key are your identifiers for Amazon S3 Access Key: YOUR_ACCESS_KEY Secret Key: YOUR_SECRET_KEY Encryption password is used to protect your files from reading by unauthorized persons while in transfer to S3 Encryption password: YOUR_PASSWORD Path to GPG program [/usr/bin/gpg]: When using secure HTTPS protocol all communication with Amazon S3 servers is protected from 3rd party eavesdropping. This method is slower than plain HTTP and can't be used if you're behind a proxy Use HTTPS protocol [No]: Yes New settings: Access Key: YOUR_ACCESS_KEY Secret Key: YOUR_SECRET_KEY Encryption password: YOUR_PASSWORD Path to GPG program: /usr/bin/gpg Use HTTPS protocol: True HTTP Proxy server name: HTTP Proxy server port: 0 Test access with supplied credentials? [Y/n] n Save settings? [y/N] y Configuration saved to '/var/lib/jenkins/.s3cfg'
出来たファイルはこちら
~/.s3cfg
[default] access_key = YOUR_ACCESS_KEY bucket_location = US cloudfront_host = cloudfront.amazonaws.com default_mime_type = binary/octet-stream delete_removed = False dry_run = False enable_multipart = True encoding = UTF-8 encrypt = False follow_symlinks = False force = False get_continue = False gpg_command = /usr/bin/gpg gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s gpg_passphrase = YOUR_PASSPHRASE guess_mime_type = True host_base = s3.amazonaws.com host_bucket = %(bucket)s.s3.amazonaws.com human_readable_sizes = False invalidate_on_cf = False list_md5 = False log_target_prefix = mime_type = multipart_chunk_size_mb = 1024 preserve_attrs = True progress_meter = True proxy_host = proxy_port = 0 recursive = False recv_chunk = 4096 reduced_redundancy = False secret_key = YOUR_SECRET_KEY send_chunk = 4096 simpledb_host = sdb.amazonaws.com skip_existing = False socket_timeout = 300 urlencoding_mode = normal use_https = True verbosity = WARNING website_endpoint = http://%(bucket)s.s3-website-%(location)s.amazonaws.com/ website_error = website_index = index.html
enable_multipart = True の項目を確認しました。
これでOKなのですが、デフォルトだと、
multipart_chunk_size_mb = 15
となっていて、15MBずつファイルをアップロードすることになるので、
ケチケチせず 1024 とかに変えておきます。
ようやくアップロード
これでようやく当初アップロードしたかったファイルをアップロード出来ます。
よーし…
~$ s3cmd -f put /tmp/jenkins_bk.tar.gz s3://hogehoge/ WARNING: Module python-magic is not available. Guessing MIME types based on file extensions. /tmp/jenkins_bk.tar.gz -> s3://hogehoge/jenkins_bk.tar.gz [part 1 of 6, 1024MB] 1073741824 of 1073741824 100% in 116s 8.78 MB/s done /tmp/jenkins_bk.tar.gz -> s3://hogehoge/jenkins_bk.tar.gz [part 2 of 6, 1024MB] 1073741824 of 1073741824 100% in 133s 7.67 MB/s done /tmp/jenkins_bk.tar.gz -> s3://hogehoge/jenkins_bk.tar.gz [part 3 of 6, 1024MB] 1073741824 of 1073741824 100% in 240s 4.26 MB/s done /tmp/jenkins_bk.tar.gz -> s3://hogehoge/jenkins_bk.tar.gz [part 4 of 6, 1024MB] 1073741824 of 1073741824 100% in 123s 8.29 MB/s done /tmp/jenkins_bk.tar.gz -> s3://hogehoge/jenkins_bk.tar.gz [part 5 of 6, 1024MB] 1073741824 of 1073741824 100% in 239s 4.28 MB/s done /tmp/jenkins_bk.tar.gz -> s3://hogehoge/jenkins_bk.tar.gz [part 6 of 6, 316MB] 331925477 of 331925477 100% in 38s 8.18 MB/s done
おー出来ました。良かった良かった。
おしまい。
0 件のコメント:
コメントを投稿