У меня следующий сценарий:
- У меня есть лямбда-функция, запускаемая из корзины AWS S3 при создании нового объекта (например, для изображения в этом случае).
- Я загружаю изображение с локального компьютера и регистрирую метку времени UT C ( T1 ) начала загрузки локально, т.е. на локальной машине, синхронизированной с сервером времени gps.
- Внутри лямбда-функции я записываю eventTime из заголовка, переданного в лямбда-функцию из события S3.
- С прошлой недели я наблюдаю, что ( eventTime - T1 ) в основном отрицательный, т. е. отметка времени UT C для eventTime уже в прошлом по сравнению с тем, когда я отправлял изображение! Это не соответствует шаблону, т. Е. Разница составляет от нескольких сотен миллисекунд до 7-8 секунд !!
- Раньше эта разница всегда была положительной. Это означает, что, учитывая, что у моего локального компьютера достаточно точный источник времени, разница между тем, когда AWS S3 заканчивает обработку элемента изображения, и тем, когда я начал загружать изображение, всегда должна быть положительной независимо от теплого или холодного пуска.
Сначала я думал, что источник времени моего локального компьютера ошибочен. Однако я попытался синхронизировать источник времени с другими серверами, но обнаружил, что проблема сохраняется. Я также пробовал с других машин, но получил то же поведение.
Наконец, я проделал тот же эксперимент с экземпляром EC2, но я все еще наблюдаю, что eventTime в прошлом по сравнению с T1 . И экземпляр EC2, и функция Lambda находятся в us-east-1, я полагаю, можно с уверенностью предположить, что они используют один и тот же источник синхронизации или, по крайней мере, очень близки.
Я прикрепил картинку, куда я загружаю файлы S3 из экземпляра EC2 в том же регионе. Для удобства на прилагаемом рисунке я прикрепил метку времени T1 локального компьютера к самому имени файла, чтобы его было легко сравнивать в журналах CloudWatch. Красные прямоугольники показывают 'eventTime', а зеленые прямоугольники показывают часть имени файла изображения, содержащую прикрепленную локальную метку времени.
Имя файла изображения содержит «%» для кодировки URL, заранее извиняюсь за нехорошие выводы. Например, в этом случае на 1-м изображении: eventTime = 2020-01-24 T15: 54: 34.934 Z , тогда как отметка времени в «ключе» является «ключом»: 'DDDDDD2020-01-24 T15: 54: 41.227086 _2042097567_c7748620f1_2385_49903173_N00.jpg' , что похоже на разницу ~ 7 секунд !! Метки времени самих журналов близки к T1 , чем eventTime .
Я использую следующий простой код для загрузки изображений:
import boto3
import time
import datetime
import os
current_session = boto3.session.Session(
aws_access_key_id = "<ACCESS ID>",
aws_secret_access_key = "<ACCESS SECRET>",
region_name="us-east-1")
s3_client = current_session.client('s3')
folder_path = "/home/ubuntu/Pictures/random1000/"
s = 0
for i in os.listdir(folder_path):
filepath = os.path.join(folder_path, i)
filename = "DDDDDD{}_{}".format(str(datetime.datetime.utcnow().isoformat()), i)
print(filename)
s3_client.upload_file(filepath, "<bucket name>", filename)
s +=1
time.sleep(1)
if s==3: # just upload 3 images and stop
break
Возможно ли, что из-за этого https://aws.amazon.com/blogs/compute/coming-soon-updated-lambda-states-lifecycle-for-vpc-networking/ что-то не так с отметками времени на этой неделе? Или я что-то не так делаю? Пожалуйста, дайте мне знать.
Спасибо !!