S3 バケットを EC2 インスタンスにマウントし、PHP で書き込むにはどうすればよいでしょうか? 質問する

S3 バケットを EC2 インスタンスにマウントし、PHP で書き込むにはどうすればよいでしょうか? 質問する

私はAmazon Web Servicesでホストされているプロジェクトに取り組んでいます。サーバー設定は、2つのEC2インスタンス、1つのElastic Load Balancer、およびWebアプリケーションが存在する追加のElastic Block Storeで構成されています。プロジェクトは想定ユーザーがアップロードしたファイルの保存にS3を使用する。この質問ではS3バケットと呼ぶことにします。static.example.com

私はs3fshttps://code.google.com/p/s3fs/wiki/FuseOverAmazon)、RioFShttps://github.com/skoobe/riofs) そしてs3ql出典: google.com) はs3fsファイルシステムをマウントしますが、バケットに書き込むことはできません (SO でこの質問をしました: FUSE を使用して適切な権限で S3 ボリュームをマウントするにはどうすればよいですか)。 はRioFSファイルシステムをマウントし、シェルからバケットに書き込むことができますが、PHP を使用して保存されたファイルはバケットに表示されません (GitHub でプロジェクトの問題を開きました)。 はs3qlバケットをマウントしますが、バケット内に既にあるファイルはファイルシステムに表示されません。

私が使用したマウント コマンドは次のとおりです。

s3fs static.example.com -ouse_cache=/tmp,allow_other /mnt/static.example.com
riofs -o allow_other http://s3.amazonaws.com static.example.com /mnt/static.example.com
s3ql mount.s3ql s3://static.example.com /mnt/static.example.com

次の S3 クラスも使用してみました:https://github.com/tpyo/amazon-s3-php-class/そして、この FuelPHP 固有の S3 パッケージ:https://github.com/tomschlick/fuel-s3FuelPHP パッケージで利用可能なバケットとファイルを一覧表示することはできましたが、バケットへのファイルの保存は失敗しました (ただし、エラーは発生しませんでした)。

ローカル Linux ファイルシステムに S3 バケットをマウントし、PHP を使用してバケットにファイルを正常に書き込んだことがありますか? どのようなツールを使用しましたか? 上記のツールのいずれかを使用した場合、どのバージョンを使用しましたか?

編集GitHubで私が提起した問題はRioFS解決されたと連絡がありました。S3 API の概要バケットをボリュームとしてマウントしようとするのではなく、それがRioFS最近では実行可能なオプションであるように思われます。

ベストアンサー1

ローカル Linux ファイルシステムに S3 バケットをマウントしたことがありますか?

いいえ。テストには楽しいですが、本番システムには近づけないようにします。S3 と通信するにはライブラリを使用する方がはるかに優れています。理由は次のとおりです。

  1. エラーは隠されません。ファイルシステムには、問題を示すために送信できるエラー コードがいくつかしかありません。S3 ライブラリは Amazon からの正確なエラー メッセージを提供するので、何が起こっているかを理解し、ログに記録し、特殊なケースを処理するなどできます。
  2. ライブラリを使用すると、メモリ使用量が少なくなります。ファイルシステム レイヤーは、二度​​と使用されない可能性のあるランダムなデータを大量にキャッシュします。ライブラリを使用すると、何をキャッシュするか、何をキャッシュしないかを制御できます。
  3. 拡張。何か特別なこと (ファイルに ACL を設定する、署名付きリンクを生成する、バージョン管理、ライフサイクル、耐久性を変更するなど) を行う必要がある場合は、ファイルシステムの抽象化を破棄して、とにかくライブラリを使用する必要があります。
  4. タイミングと再試行。リクエストの一部はランダムにエラーになり、再試行できます。再試行を何度も行いたい場合もあれば、すぐにエラーを解消したい場合もあります。ファイルシステムではきめ細かな制御はできませんが、ライブラリでは可能です。

要するに、FUSEのS3は漏れやすい抽象化S3 にはディレクトリがありません (または必要ありません)。ファイルシステムは数十億のファイル用に構築されていません。権限モデルには互換性がありません。ファイルシステムに無理やり押し込もうとすると、S3 のパワーの多くを無駄にしてしまうことになります。

S3 と通信するための 2 つのランダム PHP ライブラリ:

https://github.com/KnpLabs/Gaufrette

詳しくはこちら- これは、S3 の使用を超えて拡張する場合、または上記の高度なリクエストのいずれかを実行する必要がある場合に役立ちます。

おすすめ記事