en mi código python lambda que escanea dynamodb en función de la clave principal como 'deviceId' y sortkey timestamp (que está en formato AAAA-MM-DD HH:MN:SS), necesito escanear cada uno de los últimos 15 minutos de datos (a partir de ahora) . Estoy en la región de Mumbai (ap-sur-1), ¿cómo configuro la zona horaria local en mi siguiente código lambda? ya que está eligiendo la fecha y hora utc predeterminada. Idealmente, la lambda tiene que escanear y si el recuento de retorno es> = 10, entonces el termostato + 5.
import boto3 import math import json import time from datetime import datetime,timedelta from dateutil.tz import tzlocal from boto3.dynamodb.conditions import Key, Attr client = boto3.client('dynamodb') dynamodb = boto3.resource('dynamodb') def lambda_handler(event, context): #table_name= "thermostat_dynamo" table_name= "newsensor" Primary_Column_Name = 'deviceId' table = dynamodb.Table(table_name) #key_param = "thermostat" #thermostatVal = table.get_item(Key={key_param:event[key_param]}) ## get record from dynamodb for this sensor thermostatVal= 77 #now = datetime.now() now = datetime.now(tzlocal()) fifteen_min_ago = now - timedelta(seconds=900) now = now.strftime('%F %T') fifteen_min_ago = fifteen_min_ago.strftime('%F %T') fe = Key('timeStamp').between(fifteen_min_ago,now); response = table.scan(FilterExpression=fe & Attr('temperature').lt(thermostatVal)) if response['Count'] == 10: #return thermostatVal+5 thermonew = thermostatVal + 5 tosensor = '{"thermostat":'+'"%s"}' %thermonew print(tosensor) #response = client.publish(topic="updatehomesensor", qos=1, payload=tosensor) return elif response['Count'] < 10: #tosensor = '{"thermostat":'+'"%s"}' %thermostatVal print('{"thermostat":'+'"%s"}' %thermostatVal) #response = client.publish(topic="updatehomesensor", qos=1, payload=tosensor) returnTodas las instancias de Lambda están configuradas en la zona horaria UTC. En caso de que desee cambiar ese comportamiento, debe actualizar la variable de entorno.
A continuación, se incluye un documento detallado que menciona TZ como variable de entorno reservada https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html .
Entonces, en su caso, por ejemplo, desea configurar lambda para usar IST [zona horaria estándar india]. Debe seguir los siguientes pasos.
Debería verse como a continuación
Después de guardar la variable de entorno, su entorno utilizará la zona horaria mencionada en la variable TZ.
En primer lugar, no hay un comando CLI nativo para obtener la zona horaria de una región, por lo que la zona horaria de la región debe provenir de usted.
Puede crear una variable de entorno de AWS_TIMEZONE y establecer el valor en 'Asia/Kolkata' . Luego, deberá agregar import os and from pytz import timezone y llamar a timezone = timezone(os.environ['AWS_TIMEZONE']) seguido de actualizar now = datetime.now(timezone) . Cada región que implementó podría establecer un valor de variable diferente para AWS_TIMEZONE .
Sin embargo, recomendaría si pudiera almacenar cualquier fecha y hora en UTC , ya que genera menos confusión en torno a los problemas de la zona horaria y, en general, se considera una mejor práctica.