0

写真共有アプリであるAndroidクラウドアプリにはAmazonAWSを使用することにしました。単純なリクエストを処理し、基本的なユーザー情報を保存するために、PHPとMySqlを使用してEC2にインスタンスをセットアップしました。また、すべての写真を保存するためにS3サービスを設定しました。

しかし、今、私はいくつかのアドバイスが欲しいです。3つを一緒に処理する方法がわかりません。EC2サーバーは、アプリを使用するエンドユーザーとS3サービスの間のメディエーターとして常に使用する必要がありますか?または、Androidのエンドユーザーは可能な場合はS3と直接通信する必要がありますか?

たとえば、ユーザーが私のアプリに登録し、写真をアップロードすることにしたとします。JPEGをEC2サーバーに送信してから、サーバーに写真をS3に送信させる必要がありますか?または、S3に直接送信し、デバイスでURLを取得してから、EC2サーバーに送信する必要がありますか?いずれにせよ、S3のURLアドレスをMySQLデータベースに保存して、他のユーザーに送信し、ユーザーが新しく公開されたイメージにアクセスできるようにする必要があります。

これをどのように行うべきかについてのアイデアはありますか?

4

1 に答える 1

2

あなたには本当に選択肢がないと思います。セキュリティのために EC2 を経由する必要があります。電話アプリが S3 に直接アップロードする場合、S3 バケットがパブリックに書き込み可能であるか、アクセス資格情報がユーザーの電話に保存されていることを意味し、どちらも危険です。つまり、EC2 を介してアップロードするか、少なくとも EC2 が S3 に対して時間制限付きの資格情報を発行する必要があります (後者が可能かどうか、または良いアイデアかどうかはわかりません)。

誰でも写真を閲覧できるようにする場合は、S3 インスタンスを公開して読み取り可能にし、電話アプリで EC2 インスタンスから URL を取得して、S3 から直接写真をダウンロードできます。これにより、EC2 の負荷がいくらか軽減されます。

EC2 の負荷を軽減するもう 1 つの方法は、データベースを実行しているインスタンスとは別にアップロードを処理するためだけに専用の EC2 インスタンスを用意することです。そうすれば、アップロード サーバーに問題が発生した場合でも、アプリはデータベースにアクセスし、S3 URL を取得して、写真をダウンロードできます。

アプリのスケーラビリティと稼働時間についても考慮する必要があります。Amazon は、単一の EC2 インスタンスまたは単一のアベイラビリティ ゾーンに対してさえアップタイムを保証していないため、サーバーを確実にそこに配置したい場合は、少なくとも 2 つのアベイラビリティ ゾーンにわたってスケーリングする必要があります。(2 つのリージョンも悪い考えではありませんが、ほとんどのアプリケーションではやり過ぎです。)

于 2013-01-10T22:02:30.730 に答える