1. ホーム
  2. python

[解決済み] boto3 を使って 2 つの Bucket を同期させる

2022-01-31 03:20:18

質問

boto3を使って、2つの異なるバケット(ソースとターゲット)のバケット内容をループし、ソースにターゲットと一致しないキーが見つかった場合、それをターゲットバケットにアップロードする方法はありますか。私は現在、この仕事をするために次のコードを使用しています。

import boto3

s3 = boto3.resource('s3')
src = s3.Bucket('sourcenabcap')
dst = s3.Bucket('destinationnabcap')
objs = list(dst.objects.all())
for k in src.objects.all():
 if (k.key !=objs[0].key):
  # copy the k.key to target

解決方法は?

Keyで比較したいだけなら(オブジェクト内の差分は無視)、以下のような使い方ができます。

s3 = boto3.resource('s3')
source_bucket = s3.Bucket('source')
destination_bucket = s3.Bucket('destination')
destination_keys = [object.key for object in destination_bucket.objects.all()]
for object in source_bucket.objects.all():
  if (object.key not in destination_keys):
    # copy object.key to destination