在我的python lambda代码中,它基于主键“deviceId”扫描dynamodb&;sortkey时间戳(YYYY-MM-DD HH:MN:SS格式),我需要扫描最近15分钟的数据(从现在开始)。我在孟买地区(ap-south-1),如何在我下面的lambda代码中设置本地时区。因为它选择默认utc日期时间。理想情况下,lambda必须扫描&;如果返回计数>;=10然后是恒温器+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)
return
首先,没有用于获取区域时区的本地CLI命令,因此该区域的时区需要来自您
您可以创建一个环境变量
AWS_TIMEZONE
,并将该值设置为'Asia/Kolkata'
。然后需要添加import os and from pytz import timezone
并调用timezone = timezone(os.environ['AWS_TIMEZONE'])
,然后更新now = datetime.now(timezone)
。部署到的每个区域都可以为AWS_TIMEZONE
设置不同的变量值但是,我建议您尽可能将任何日期时间实际存储在
UTC
中,因为这会减少对时区问题的混淆,并且通常被认为是最佳实践所有Lambda实例都设置为UTC时区。若要更改该行为,则需要更新环境变量
下面是详细的文档,其中提到TZ是保留的环境变量 https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html
因此,在您的例子中,您希望将lambda设置为使用IST[印度标准时区]。您需要完成以下步骤
它应该如下所示
保存环境变量后,您的环境将使用TZ变量中提到的时区
相关问题 更多 >
编程相关推荐