如何为aws lambda python代码将时间戳设置为aws区域时区

2024-05-13 14:42:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的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

Tags: lambdafromimportclientdatetimeresponsetablemin
2条回答

首先,没有用于获取区域时区的本地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[印度标准时区]。您需要完成以下步骤

  1. 在函数的配置选项卡中,向下滚动到环境变量部分
  2. 单击编辑并添加值为Asia/Calcutta[对于IST]的变量TZ

它应该如下所示

enter image description here

保存环境变量后,您的环境将使用TZ变量中提到的时区

相关问题 更多 >