我编写了一些Python代码,这些代码从两个API请求数据,打开一个.CSV文件,将该API数据作为新行添加到.CSV中,并保存更新后的.CSV文件。
在我的本地计算机上运行很好。
现在,我想将此代码转换为AWS Lambda函数(由CloudWatch每小时以1x的速度触发,其中SCSV存储在.3中),但不确定如何实现。
我想我已经弄清楚了部署程序包部分。我有一个.zip依赖项。现在我想我只需要在函数中添加一个.py文件即可。
触发器很简单
但是不确定如何将我的代码转换为函数。
有人可以告诉我如何将我的代码转换为Lambda函数吗?
import requests
import json
import csv
import pandas as pd
import time
# OpenWeatherMap parameters
OWM_parameters = {"lat": 30.4013804, "lon": -97.6863783, "units": 'imperial', "APPID": 'redacted'}
# OpenWeatherMap API call
OWM_response = requests.get("http://api.openweathermap.org/data/2.5/weather",params=OWM_parameters)
OMW_json_data = OWM_response.content
OMW_json_parsed = json.loads(OMW_json_data)
# OWM does not provide rain data if it's not raining
# This code avoids an error by setting rain = 0 if API data not provided
try:
rain = OMW_json_parsed['rain']['1h']
except:
rain = 0
#USGS Parameters
USGS_parameters = {'format':'json', "sites": '08158200', "parameterCd": '00065', 'siteStatus': 'all'}
#USGS API call
USGS_response = requests.get("https://waterservices.usgs.gov/nwis/iv/", params=USGS_parameters)
USGS_json_data = USGS_response.content
USGS_json_parsed = json.loads(USGS_json_data)
# Pulling creek level from USGS json
creek_level_ft = float(USGS_json_parsed['value']['timeSeries'][0]['values'][1]['value'][0]['value'])
# creates dictionary from API data
new_weather_data = {'timestamp': time.time(), 'temp': OMW_json_parsed['main']['temp'], 'temp_min': OMW_json_parsed['main']['temp_min'], 'temp_max': OMW_json_parsed['main']['temp_max'], 'pressure': OMW_json_parsed['main']['pressure'], 'humidity': OMW_json_parsed['main']['humidity'], 'visibility': OMW_json_parsed['visibility'], 'wind_speed': OMW_json_parsed['wind']['speed'], 'wind_dir': OMW_json_parsed['wind']['deg'], 'cloud_cover': OMW_json_parsed['clouds']['all'], 'sunrise': OMW_json_parsed['sys']['sunrise'], 'sunset': OMW_json_parsed['sys']['sunset'], 'precipitation': rain, 'creek_level_ft': creek_level_ft}
# open CSV
df = pd.read_csv('weather_data.csv')
# appends CSV with dictionary
df = df.append([new_weather_data], sort=False)
# saves CSV
df.to_csv('weather_data.csv',index=False)
答案 0 :(得分:0)
您可以向部署包中添加一个.py
文件(例如lambda_function.py
)。
在文件中,添加一个处理程序,例如:
def lambda_handler(event, context):
将代码放入函数中。
然后,以filename.function-name
格式(例如lambda_function.lambda_handler
)告诉Lambda函数引用。然后,Lambda系统将在您的lambda_handler()
函数被触发时对其进行调用。
似乎您正在创建临时文件。如果是这样,请将它们放在/tmp
目录中,并在使用后将其删除。您可以使用boto3中的copy_object()
将它们复制到Amazon S3。