AWS S3 署名付きURL にアップロード
AWS S3 の署名付き URLとは
AWS S3 の署名付き URL(Presigned URL)は、Amazon S3(Simple Storage Service)内のファイルにアクセス権限を一時的に付与するための URL です。署名付き URL を使用すると、パブリックアクセスができないバケット内のファイルにセキュアにアクセスすることができます。
署名付き URL には、次の機能があります
- 有効期限を設定して、特定の URL からのみアクセスできるようにする
- アップロード用 (POST) の署名付き URL を使用すると、クライアントが直接 S3 バケットにファイルをアップロードできる
アップロード
署名付きURLを使用してファイルをアップロードするには、通常のHTTPリクエストを使用します。このリクエストは、生成された署名付きURLに対してPUTまたはPOSTリクエストを送信することで行います。具体的な手順は以下の通りです。
署名付きURLの取得: 署名付きURLを生成します。このURLには、AWSの認証情報とアップロードするファイルの情報が含まれています。
HTTPリクエストの送信: 署名付きURLに対して、適切なHTTPメソッド(通常はPUTまたはPOST)でリクエストを送信します。このリクエストには、アップロードするファイルのデータも含める必要があります。
例えば、Rubyを使用して署名付きURLにファイルをアップロードするコードは次のようになります。
require 'net/http' file_to_upload = 'PATH_TO_YOUR_FILE' # アップロードするローカルファイルのパス upload_url = 'YOUR_PRESIGNED_URL' # 署名付きURL file = File.open(file_to_upload, 'rb') uri = URI.parse(upload_url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true # SSLを使用する場合はtrueに設定 request = Net::HTTP::Put.new(uri.request_uri) request.body = file.read request.content_type = 'MIME_TYPE' # アップロードするファイルのMIMEタイプを指定 response = http.request(request) file.close puts "Upload response code: #{response.code}"
上記のコードでは、
PATH_TO_YOUR_FILE
にアップロードしたいローカルファイルのパス、YOUR_PRESIGNED_URL
に署名付きURLを指定します。また、MIME_TYPE
にはアップロードするファイルのMIMEタイプを指定します。このコードはPUTリクエストを使ってファイルをアップロードしています。実際のアップロード手順では、必要なエラーハンドリングやセキュリティを考慮し、適切なエラー処理を追加することが重要です。