Как преобразовать код в функцию AWS Lambda? - PullRequest
0 голосов
/ 10 февраля 2019

Я написал некоторый код Python, который запрашивает данные у двух API, открывает файл .CSV, добавляет данные API в .CSV в виде новой строки и сохраняет обновленный файл .CSV.

Отлично работаетна моем локальном компьютере.

Теперь я хотел бы превратить этот код в лямбда-функцию AWS (запускается 1 раз в час CloudWatch с сохранением .CSV в S3), но не уверен, как.

Я думаю, что я понял часть пакета развертывания.У меня есть .zip с зависимостями.Теперь я думаю, что мне просто нужно добавить файл .py с моей функцией.

И триггер прост.

Но не уверен, как превратить мой код в функцию.

Может кто-нибудь сказать мне, как превратить мой код в лямбда-функцию?

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)

1 Ответ

0 голосов
/ 10 февраля 2019

Вы можете добавить файл .py в свой пакет развертывания (например, lambda_function.py).

В этом файле добавьте обработчик, например:

def lambda_handler(event, context):

Поместитекод внутри функции.

Затем скажите Lambda ссылку на функцию в формате filename.function-name, например lambda_function.lambda_handler.Затем система Lambda будет вызывать вашу функцию lambda_handler() при ее запуске.

Похоже, вы создаете временные файлы.Если это так, поместите их в каталог /tmp и удалите их после использования.Вы можете скопировать их в Amazon S3, используя copy_object() в boto3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...