Amazon Web Servicesでホストされているプロジェクトに取り組んでいます。サーバーのセットアップは、2つのEC2インスタンス、1つのElastic Load Balancer、およびWebアプリケーションが存在する追加のElastic Block Storeで構成されています。プロジェクトは、ユーザーがアップロードするファイルの保存にS3を使用することを想定しています。この質問のために、S3バケットをstatic.example.com
と呼びます
s3fs
( https://code.google.com/p/s3fs/wiki/FuseOverAmazon )、RioFS
( https:/ /github.com/skoobe/riofs )およびs3ql
( https://code.google.com/p/s3ql/ )。 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-s 。 FuelPHPパッケージを取得して、使用可能なバケットとファイルをリストできましたが、ファイルをバケットに保存できませんでした(エラーは発生しませんでした)。
S3バケットをローカルLinuxファイルシステムにマウントし、PHPを使用してバケットにファイルを正常に書き込みましたか?どのツールを使用しましたか?上記のいずれかを使用した場合ツール、どのバージョンを使用しましたか?
[〜#〜] edit [〜#〜]GitHubでRioFS
で開いた問題が解決されたことが通知されました。バケットをボリュームとしてマウントするのではなく、 S3 REST API を使用することにしましたが、RioFS
は実行可能なオプションであるようです最近。
ローカルのLinuxファイルシステムにS3バケットをマウントしたことがありますか?
いいえ。テストするのは楽しいですが、実稼働システムの近くに置いてはいけません。ライブラリを使用してS3と通信することをお勧めします。その理由は次のとおりです。
一番下の行は、ヒューズの下のS3が 漏れやすい抽象化 であるということです。 S3にはディレクトリがありません(または必要ありません)。ファイルシステムは、数十億のファイル用に構築されていません。権限モデルには互換性がありません。 S3をファイルシステムにシューホーンすることで、S3の多くのパワーを無駄にしています。
2つのランダムなPHP S3と通信するためのライブラリ:
https://github.com/KnpLabs/Gaufrette
https://aws.Amazon.com/sdkforphp/ -これは、S3の使用を超えて拡張する場合、または上記の空想的な要求のいずれかを行う必要がある場合に役立ちます。
多くの場合、ファイルをEBSボリュームに書き込んでから、ファイルに対する後続のパブリックリクエストをCloudFront CDN経由でルーティングすることが有利です。
そのようにして、アプリがファイルに何らかの変換を行う必要がある場合、ローカルドライブとシステムで行うのがはるかに簡単になり、変換されたファイルのリクエストをCloudFront経由でOriginから強制的に取得します。
例えばユーザーがアバター用の画像をアップロードしており、サイズと切り抜きのためにアバター画像を数回繰り返す必要がある場合、アプリはローカルボリュームでこれらを作成できますが、ファイルに対するすべてのパブリックリクエストは、クラウドフロントのOrigin-pullリクエストによって行われます。そのようにして、元のファイル(または最適化されたバージョンのファイル)を保持する最大限の柔軟性があり、その後のユーザーリクエストはクラウドフロントエッジから既存のバージョンをプルするか、クラウドフロントがリクエストをアプリにルーティングします必要な反復を作成します。
上記の基本的な例としては、WordPressがあります。これは、アップロードされたグラフィックイメージの複数のサイズ/クロップバージョンを作成し、オリジナルを保持します(ファイルサイズの制限やプラグイン変換の対象)。 CDN対応WordPress W3 Total CacheのようなプラグインはCDNをプルするリクエストを書き換えるので、アプリは一意の最初のリクエストの繰り返しを作成するだけです。ブラウザキャッシュURLバージョン管理の追加( http:/ /domain.tld/file.php?x123 )は、CDN機能をさらに改良して活用します。
EBSボリュームのファイルサイズまたはiノードの急速な拡張が懸念される場合は、ほとんど要求されないファイルまたは古いファイルのプルーニングプロセスを自動化できます。