km_output

お勉強と趣味のアウトプット

【AWS】boto3でS3操作するときclientとresourceの使い分けでハマった話

実現したいこと

  • boto3を使って Lambda からS3操作したい。

Lambda関数(ランタイムはPython3.8)で、AアカウントのS3バケットからBアカウントのS3バケットへデータをコピーしたい。

その時にオブジェクトACL付与が必要となり、単純にオブジェクトACL付与する場合とオブジェクトコピー時に権限付与する場合とで違いがあるのか検証していた。

コード

boto3.client('s3')boto3.resource('s3') で混乱したものの、以下のような違いがあると分かった。

明確に意識していなかったのでφ(._.)メモメモ

# S3バケット内のオブジェクトに対しオブジェクトACLを付与

s3resource = boto3.resource('s3')

object_acl = s3resource.ObjectAcl(s3bucket,s3key)

response = object_acl.put(ACL='bucket-owner-full-control')

~~~
# S3バケット内のオブジェクトをコピー

s3 = boto3.client('s3')

r = s3.copy_object(ACL='bucket-owner-full-control',Bucket=s3bucket_processing, Key=copy_s3key, CopySource={'Bucket': s3bucket, 'Key': s3key})