[boto3] generate_presigned_urlの引数Paramsには何を指定できるのか?
はじめに
boto3のgenerate_presigned_url
の引数Params
って何を指定できるねん。
って思ったことありませんか?
対象読者
generate_presigned_url
のAPIドキュメントを読んだが、引数Params
に何を指定できるかわからんってなった方。
結論
ClientMethod
で使える引数をParams
に入れることができる!
解説
ドキュメントには以下のように書いてあります。
Params (dict) – The parameters normally passed to ClientMethod.
和訳すると以下です。
「通常 ClientMethod
に渡されるパラメータ」
つまり、Params
にはClientMethod
で指定したS3メソッドに必要な引数をそのまま辞書形式で指定します。
ClientMethodとは?
ClientMethod
には、事前署名URLを生成可能なS3クライアントのメソッドを文字列で指定します。
代表的なものとして以下が挙げられます。
-
get_object
S3のオブジェクトをダウンロードする場合に使用 -
put_object
S3に1つのオブジェクトをアップロードする場合に使用 -
upload_part
マルチパートアップロード時に各パートをアップロードする場合に使用
なので、generate_presigned_url
の引数ClientMethod
にupload_part
を指定したなら、
Params
に指定できるのはupload_part
メソッドの引数ということになります。
対応するS3メソッドのAPIドキュメントを見ることで、何を指定すべきかが明確になります。
具体例: upload_partの場合
upload_part
メソッドのAPIドキュメントを見に行くと、
upload_part
メソッドの引数を確認することができます。
response = client.upload_part(
Body=b'bytes'|file,
Bucket='string',
ContentLength=123,
ContentMD5='string',
ChecksumAlgorithm='CRC32'|'CRC32C'|'SHA1'|'SHA256'|'CRC64NVME',
ChecksumCRC32='string',
ChecksumCRC32C='string',
ChecksumCRC64NVME='string',
ChecksumSHA1='string',
ChecksumSHA256='string',
Key='string',
PartNumber=123,
UploadId='string',
SSECustomerAlgorithm='string',
SSECustomerKey='string',
RequestPayer='requester',
ExpectedBucketOwner='string'
)
例えば、以下のように署名付きURLを生成できます。
import boto3
# boto3クライアントの生成
s3_client = boto3.client("s3")
# 必要なパラメータ
bucket_name = "your-bucket-name"
key = "path/to/your-object"
part_number = 1
upload_id = "example-upload-id"
expiration = 3600 # 有効期限 (秒)
# 署名付きURLの生成
presigned_url = s3_client.generate_presigned_url(
ClientMethod="upload_part",
Params={
"Bucket": bucket_name,
"Key": key,
"PartNumber": part_number,
"UploadId": upload_id,
},
ExpiresIn=expiration,
)
print(presigned_url)
まとめ
generate_presigned_url
の引数Params
に何を指定できるかを知りたければ、ClientMethod
のAPIドキュメントを確認する必要があります。

NCDC株式会社( ncdc.co.jp/ )のエンジニアチームです。 募集中のエンジニアのポジションや、採用している技術スタックの紹介などはこちら( github.com/ncdcdev/recruitment )をご覧ください! ※エンジニア以外も記事を投稿することがあります
Discussion