😺

[boto3] generate_presigned_urlの引数Paramsには何を指定できるのか?

2025/01/16に公開

はじめに

boto3のgenerate_presigned_urlの引数Paramsって何を指定できるねん。
って思ったことありませんか?

対象読者

generate_presigned_urlのAPIドキュメントを読んだが、引数Paramsに何を指定できるかわからんってなった方。
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/generate_presigned_url.html#S3.Client.generate_presigned_url

結論

ClientMethodで使える引数をParamsに入れることができる!

解説

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/generate_presigned_url.html#S3.Client.generate_presigned_url

ドキュメントには以下のように書いてあります。

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の引数ClientMethodupload_partを指定したなら、
Paramsに指定できるのはupload_partメソッドの引数ということになります。

対応するS3メソッドのAPIドキュメントを見ることで、何を指定すべきかが明確になります。

具体例: upload_partの場合

upload_partメソッドのAPIドキュメントを見に行くと、
https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3/client/upload_part.html
upload_partメソッドの引数を確認することができます。

upload_part.py
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を生成できます。

sample.py
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エンジニアブログ

Discussion