如何将代码转换为 AWS Lambda 函数?

tjc*_*jc4 3 python amazon-s3 amazon-web-services aws-lambda

我编写了一些 Python 代码,用于从两个 API 请求数据、打开 .CSV 文件、将 API 数据作为新行添加到 .CSV 中,并保存更新的 .CSV 文件。

在我的本地机器上运行良好。

现在我想将此代码转换为 AWS Lambda 函数(由 CloudWatch 每小时触发 1 次,并将 .CSV 存储在 S3 中),但不确定如何操作。

我想我已经弄清楚了部署包部分。我有一个带有依赖项的 .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)
Run Code Online (Sandbox Code Playgroud)

Joh*_*ein 6

您可以将.py文件添加到部署包中(例如lambda_function.py)。

在该文件中,添加一个处理程序,例如:

def lambda_handler(event, context):
Run Code Online (Sandbox Code Playgroud)

将您的代码放入函数中。

然后,以 格式告诉 Lambda 函数引用filename.function-name,例如lambda_function.lambda_handler. 然后,Lambda 系统将lambda_handler()在触发时调用您的函数。

您似乎正在创建临时文件。如果有,请将其放入/tmp目录中,使用后删除。您可以使用copy_object()boto3 将它们复制到 Amazon S3。

  • 感谢您的帮助。我没有意识到函数化我的代码就像在我的代码中添加“def lambda_handler(event, context):”一样简单。将处理程序设置为 [python 文件名].[函数名] 的提示也非常有帮助。花了一段时间(不是你的错 - 我的部署包中出现了一些错误),但我能够让我的代码通过测试(返回 API 结果)。接下来尝试将 API 数据保存到 S3。 (2认同)