AWS Lambda в Python для копирования новых файлов в другую корзину S3 - PullRequest
0 голосов
/ 15 мая 2019

Я создал лямбду, которая срабатывает каждый раз, когда я добавляю файл в s3: // test-bucket-01 /, он копирует все файлы в s3: // test-bucket-01 / в s3: // тест-ковшового 02 /

Я бы хотел добавить только что добавленный файл?

Текущий код:

import boto3
s3 = boto3.resource('s3')


def lambda_handler(event, context):
    bucket = s3.Bucket('test-bucket-01')
    dest_bucket = s3.Bucket('tb-bucket-02')
    print(bucket)
    print(dest_bucket)

    for obj in bucket.objects.all():
        dest_key = obj.key
        print(dest_key)
        s3.Object(dest_bucket.name, dest_key).copy_from(CopySource = {'Bucket': obj.bucket_name, 'Key': obj.key})

Результаты:

Function Logs:
START RequestId: XXXXXXX-XXXXXXX-XXXXXXX Version: $LATEST
s3.Bucket(name='test-bucket-01')
s3.Bucket(name='test-bucket-02')
test-data-01.json
test-data-02.json
test-data-03.json

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Вам не нужно перечислять корзину, чтобы скопировать все файлы, потому что переменная события - это json, который содержит файл, который вы скопировали в test-bucket-01.

Пример:

{
  "Records": [
    {
      "eventVersion": "2.0",
      "eventSource": "aws:s3",
      "awsRegion": "us-east-1",
      "eventTime": "1970-01-01T00:00:00.000Z",
      "eventName": "ObjectCreated:Put",
      "userIdentity": {
        "principalId": "EXAMPLE"
      },
      "requestParameters": {
        "sourceIPAddress": "127.0.0.1"
      },
      "responseElements": {
        "x-amz-request-id": "C3D13FE58DE4C810",
        "x-amz-id-2": "FMyUVURIY8/IgAtTv8xRjskZQpcIZ9KG4V5Wp6S7S/JRWeUWerMUE5JgHvANOjpD"
      },
      "s3": {
        "s3SchemaVersion": "1.0",
        "configurationId": "testConfigRule",
        "bucket": {
          "name": "sourcebucket",
          "ownerIdentity": {
            "principalId": "EXAMPLE"
          },
          "arn": "arn:aws:s3:::mybucket"
        },
        "object": {
          "key": "key/to/HappyFace.jpg",
          "size": 1024,
          "eTag": "d41d8cd98f00b204e9800998ecf8427e"
        }
      }
    }
  ]
}

В этом случае об этом событии уведомляют ObjectCreated: Put событие. Новый файл был скопирован в корзину «sourcebucket» с ключом «ключ / to / HappyFace.jpg».

1 голос
/ 16 мая 2019

Почему вы не хотите использовать собственный функционал AWS S3 для репликации новых файлов из одного сегмента в другой?

Это проще и надежнее. И вы можете реплицировать файлы по префиксам, изменять планы хранения и многое другое с помощью этой встроенной функции.

...