kakakakakku blog

Weekly Tech Blog: Keep on Learning!

Amazon S3 署名付き URL 経由のアップロードでオブジェクトメタデータを設定する

Amazon S3 署名付き URL を発行してオブジェクトをアップロードするときに「オブジェクトメタデータ」も設定できる👌できるのかな〜と気になって試してみたらできた.署名付き URL 経由でアップロードされたオブジェクトに対して付加情報を設定しておくという活用ができそう \( 'ω')/

👾 main.py

今回は Python (boto3) で試した.generate_presigned_url() を実行するときに ParamsMetadata を設定すれば 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"
}