6

Amazon EC2 インスタンスに REST サーバーをデプロイしました。また、API の操作中にユーザーが生成したすべてのデータを保存するように Amazon S3 バケットを構成しました。保存される主な情報は画像です。ユーザーは、特定の URL と資格情報を介して PUT HTTP 要求を実行することにより、画像をアップロードできます。アップロードは承認される必要があり、ユーザーは S3 インスタンスに直接アクセスできないため、PUT リクエストは EC2 インスタンスを介して実行される場合があります。EC2 が有効な PUT 請願を受け取ったら、AWS PHP SDK を使用してオブジェクトを S3 バケットにアップロードします。私が使用するメソッドは putObject です。この最初の部分については、これ以上の選択肢はないと思います。ただし、ユーザーが以前のアップロードをダウンロードできるようにするために、2 つの異なる方法があります。

  • 1 つ目は、ファイルがパブリックな方法でアップロードされるため、S3 バケット キーを指すファイルの URL をユーザーに提供することです。そのため、ユーザーは EC2 を操作することなく、S3 サーバーから直接イメージをダウンロードできます。

  • 2 つ目は、EC2 インスタンスで実行されている REST API を使用して、HTTP GET 要求を実行しながら画像コンテンツを提供することです。この場合、AWS PHP SDK を使用して S3 サーバーからイメージを「ダウンロード」し、それをユーザーに返す必要があります。使用されるメソッドは getObject です。

  • 私には汚いと思われる別の可能な解決策は、EC2 インスタンスから S3 バケット URL への HTTP リダイレクトを提供することですが、その後、ユーザークライアントは単純な画像を取得するために 2 つの接続を確立する必要があります (ユーザーがモバイルデバイスで作業している場合は悪いことです) )。

2 番目のオプションを実装しましたが、問題なく動作しているようです。

私の質問は次のとおりです。S3 インスタンスからコンテンツをダウンロードする REST API を介して EC2 インスタンスからファイルにアクセスすると、S3 サーバーへの URL を使用してファイルに直接アクセスするよりも大きなオーバーヘッドが発生すると考えられます。両方のインスタンスが同じ地域 (アイルランド) で実行されています。S3 から EC2 (またはその逆) への転送が帯域幅に関してどのように計算されるかわかりません。S3-EC2 ユーザーからの転送は、S3 ユーザーよりも 2 倍計算されますか? この転送は、ある種のローカル エリア ネットワークを介して行われますか?

コンテンツへのアクセスを制御したり、各ファイルにアクセスしているユーザーをログに記録したり、バケットの変更をユーザーに対して透過的にしたりできるので、私は 2 番目の方法を好みます。

ありがとう!

4

1 に答える 1