1

URLからec2インスタンス(wget)に画像をダウンロードし、imagemagick(convert -actions $ savedfilename)で処理してから、s3(php api)に保存します。

  1. ec2でイメージを処理し、s3ボリュームに書き込まずにs3に直接保存することは可能ですか?
  2. これが可能であれば、それは理にかなっていますか?それはより速く/より安くなりますか?
  3. プロセスの効率を改善するためにできることは他にありますか?
  4. シェルから直接s3に保存するAPIはありますか?
4

2 に答える 2

2

「... EBSボリュームに書き込まずに」という意味だったと思いますよね?Wgetsの出力をImageMagicksの変換に直接パイプすることができます。これは次のようになります。

wget -O - 'http://d24w6bsrhbeh9d.cloudfront.net/photo/4498158_700b_v1.jpg' | convert - test.png

s3cmdを見てください。これにより、コマンドラインから直接S3と対話できるようになります。ワークフローの例は次のようになります。

wget -O - 'http://d24w6bsrhbeh9d.cloudfront.net/photo/4498158_700b_v1.jpg' | convert - test.png && s3cmd put --acl-public --guess-mime-type test.png s3://example.com/images/test.png

これにより、この結果が得られます。これは、正規表現を使用してフィルタリングし、パブリックURLを取得できます。

File 'test.png' stored as s3://example.com/images/test.png (xxxx bytes)
Public URL of the object is: http://example.com.s3.amazonaws.com/images/test.png

テキストからURLを取得します。

<?php
  $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
  $cmd_output = "File 'test.png' stored as s3://example.com/images/test.png (xxxx bytes) Public URL of the object is: http://example.com.s3.amazonaws.com/images/test.png";
  if(preg_match($reg_exUrl, $cmd_output, $url)) {
    $image_url = $url[0];
  }
  else {
    // no url found …
  }
?>

それがあなたのプロセスを行うためのエレガントな方法だと思います:)それがもっと速くなるか安くなるかはわかりません…多分EBSの悪いディスクI/Oのために少しかもしれません。

于 2012-06-16T11:23:34.433 に答える
0

aws s3 cli cpドキュメントから:

ローカルファイルストリームをS3にアップロードする

警告::PowerShellは、パイプ入力のエンコーディングを変更したり、CRLFを追加したりする場合があります。

次のcpコマンドは、ローカルファイルストリームを標準入力から指定されたバケットとキーにアップロードします。

aws s3 cp - s3://mybucket/stream.txt

@domの答えと同じようにあなたはできる

wget -O - 'http://d24w6bsrhbeh9d.cloudfront.net/photo/4498158_700b_v1.jpg' | convert - test.png | aws s3 cp - s3://example.com/images/test.png --acl public
于 2017-08-11T15:36:21.963 に答える