Amazon S3 署名付き URL を発行してオブジェクトをアップロードするときに「オブジェクトメタデータ」も設定できる👌できるのかな〜と気になって試してみたらできた.署名付き URL 経由でアップロードされたオブジェクトに対して付加情報を設定しておくという活用ができそう \( 'ω')/
👾 main.py
今回は Python (boto3) で試した.generate_presigned_url() を実行するときに Params
に Metadata
を設定すれば OK👌ようするに署名付き URL を "発行するときに" オブジェクトメタデータを指定しておくことになる.
以下の main.py
を実行して署名付き URL を発行すると,署名付き URL 自体に x-amz-meta-key1=value1&x-amz-meta-key2=value2&x-amz-meta-key3=value3
というクエリパラメータが追加された.
import os import boto3 s3 = boto3.client('s3') url = s3.generate_presigned_url( 'put_object', Params={ 'Bucket': os.environ['BUCKET'], 'Key': 'sample.png', 'Metadata': { 'key1': 'value1', 'key2': 'value2', 'key3': 'value3', }, }, ExpiresIn=600, ) print(url)
動作確認
次に適当なファイルとして sample.png
を署名付き URL 経由でアップロードする👌
$ PRESIGNED_URL=xxx $ curl -X PUT --upload-file sample.png ${PRESIGNED_URL}
AWS CLI でオブジェクトメタデータを確認すると,期待通りに設定できていた❗️
$ aws s3api head-object --bucket ${BUCKET} --key sample.png --query 'Metadata' | jq . { "key1": "value1", "key2": "value2", "key3": "value3" }