【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})