web-dev-qa-db-ja.com

Ubuntuサーバー上のフォルダーをAmazon S3バケットと自動的に同期する

Digital Oceanサーバーで実行しているアプリがあり、ユーザーがアップロードした画像で更新されている2つのフォルダーがあります。

新しいアップロードをサーバーフォルダーからs3バケットに自動的に転送することは可能ですか?.

UbuntuサーバーでAWS CLIをすでに設定しています。

ありがとう

3
brainHax

また、オープンソースでS3互換のAPIである Minio client aka mc を試すこともできます。 mc mirrorcommandを使用して同じものをアーカイブできます。

Minioクライアントのインストール

 $ wget https://dl.minio.io/client/mc/release/linux-AMD64/mc 
 $ chmod 755 mc
 $ ./mc --help

Amazon S3用にmcを構成する

$ ./mc config Host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY>

$ ./mc config Host add mys3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12

ローカルフォルダーをAWS S3にコピーする

$ ./mc mb mys3/mys3baucket
$ ./mc mirror mylocaldir/ mys3/mys3baucket

最初のコマンドでバケット名「mys3baucket」を作成しました2番目のコマンドでローカルディレクトリをS3バケット「mys3baucket」にミラーリングしました

これはcronで設定でき、定期的なミラーリングがすべて設定されています。

mcは次のコマンドを実装します

  ls        List files and folders.
  mb        Make a bucket or folder.
  cat       Display contents of a file.
  pipe      Write contents of stdin to one or more targets. When no target is specified, it writes to stdout.
  share     Generate URL for sharing.
  cp        Copy one or more objects to a target.
  mirror    Mirror folders recursively from a single source to many destinations.
  diff      Compute differences between two folders.
  rm        Remove file or bucket [WARNING: Use with care].
  access    Manage bucket access permissions.
  session   Manage saved sessions of cp and mirror operations.
  config    Manage configuration file.
  update    Check for a new software update.
  version   Print version.

それが役に立てば幸い。免責事項:私は Minio のために働きます

3
koolhead17

私の見解では、ここでは完璧な解決策はありませんが、次の2つの回避策を試すことができます。

これは一種のrsyncのように機能します。

Webアプリケーションのより良い実装は、直接S3バケットにアップロードして取得することです。 S3は、この使用のために特別に設計されており、フォームベースの検証のような素晴らしいトリックを提供します。

2