Бесконечные AWS лямбда-запросы для чтения и записи из / в s3 в одно и то же ведро - PullRequest
0 голосов
/ 28 марта 2020

Я загрузил код в aws лямбду, который должен был прочитать json файлы из «папки» в корзине, обработать их и затем сохранить их обратно в ту же корзину в другой папке. Я не установил событие для запуска лямбды, я просто протестировал его, и это привело к сотням тысяч лямбда-запросов, которые я заметил на следующий день, когда проверял журналы CloudWatch. Сейчас я пытаюсь выяснить, что пошло не так, поэтому, что более логично, так это мысль о том, что я не могу читать и записывать в одну и ту же корзину, даже используя разные префиксы для различения guish «пути», как это точно? Заранее спасибо

это код python, который я использовал в лямбде:

 # load jsons from s3 bucket
def load_s3_jsons(platform):
    s3_path = 'unprocessed-jsons/' + platform + '/'
    keys = get_s3_object_keys(s3_path)

    all_jsons = []
    for key in keys:
        json_object = s3_client.get_object(Bucket=bucket, Key=key)
        json_reader = json_object['Body'].read()
        all_jsons.append(json.loads(json_reader))

    return all_jsons


def get_s3_object_keys(path):
    # get the list of objects in the bucket with the path prefix
    s3_list_objects = s3_client.list_objects(Bucket=bucket, Prefix=path)['Contents']

    # get the keys from files that end with .json
    keys = [item['Key'] for item in s3_list_objects if item['Key'].endswith('.json')]

    # sort keys putting the most recent version first
    keys.sort(key=lambda x: ((''.join(filter(str.isdigit, x))), len(x)), reverse=True)

    return keys


# upload comparison results to s3
def upload_to_s3(platform, version, data):
    s3_path = 'json-results/' + platform + '/'
    upload_byte_stream = bytes(json.dumps(data).encode('UTF-8'))
    filename = version + '.json'
    s3_resource.Object(bucket, s3_path + filename).put(Body=upload_byte_stream)
...