Как запустить код python на AWS (EC2 / Lambda) - PullRequest
5 голосов
/ 20 июня 2020

Этот пост предназначен для получения c информации / ссылок для понимания работы кода Py на Lambda или EC2.

Моя структура кода довольно проста:

import numpy as np
import pandas as pd
#load more packages

input_data = pd.read_csv(...)

def do_stuff(input, parameters):
     action1
     action2
     output.to_csv(...)
     plt.save_fig(...)

do_stuff(input_data,input_parameter)

Мне нужно чтобы запустить этот код на AWS, но я не уверен, что использовать: Lambda или EC2. Кроме того, входной файл находится на моем локальном P C, а выходные данные сохраняются в указанной папке c. Надо ли сохранять на S3. Если да, то как выглядит путь? Я все еще использую import os

Прошу прощения за этот вопрос типа нуба. Мне нужно начальное руководство о том, что мне следует прочитать, чтобы начать работу. Изучение документации AWS становится технической - а из «Hello World» на Lambda я многого не понял. Из-за блокировки я не могу использовать свой рабочий стол в офисе, а моя личная ma c не может справиться с нагрузками. Файлы ввода и вывода довольно маленькие - в совокупности менее 5 МБ (имеется несколько файлов ввода).

Ответы [ 2 ]

1 голос
/ 20 июня 2020

Если это нужно делать часто, вы потенциально можете создать рабочий процесс, в котором вы:

  1. Загрузите входной .csv файл в S3 bucket

  2. Ваша AWS Lambda функция прослушивает изменения в корзине S3, и ваш код запускается при открытии нового файла. загружено.

  3. Ваш код сохраняет вывод .csv в секунду S3 bucket.

Код может выглядеть примерно так (изменено с этого примера) :

import boto3
import os
import sys
from urllib.parse import unquote_plus

s3_client = boto3.client('s3')
def handle_csv(original_csv_path, output_csv_path):
    <process csv code>

def lambda_handler(event, context):
    for record in event['Records']:
        bucket = record['s3']['bucket']['name']
        key = unquote_plus(record['s3']['object']['key'])
        tmpkey = key.replace('/', '')
        download_path = <insert path here>
        upload_path = <insert path here>
        s3_client.download_file(bucket, key, download_path)
        handle_csv(download_path, upload_path)
        s3_client.upload_file(upload_path, '<>'.format(bucket), key)

Путь может выглядеть так: '<bucket/object>': 'input_csvs/1.csv'

0 голосов
/ 27 июня 2020

Это ОП здесь, и хотя у меня здесь нет хорошего ответа - я могу резюмировать то, что я понял.

Лямбда: Я нашел полезное видео на YouTube чтобы понять, как заставить работать Lambda. Кроме того, чтобы использовать пакеты Py, такие как numpy и pandas, вам необходимо добавить слой Lambda. Я смог это сделать, просмотрев этот средний пост . Но я не совсем понял, как подключить мои входные файлы CVS и экспортировать выходной файл CSV. Я остановился как вкопанный, когда понял, что Lambda может работать до 15 минут непрерывной работы. Мой код моделирования Маркова занимает 24 часа, поэтому о Лямбде не могло быть и речи, и я не стал продолжать. (PS: я прочитал позже, что есть несколько "сложных" способов заставить его работать - но нет - я даже не понял, как будут взиматься услуги Lambda).

EC2: Есть пара ресурсов, которые помогли много для запуска моего кода на сервере EC2 AWS Linux. Сообщение medium о запуске сервера Jupyter было наиболее полезным, а затем я переключился на использование python и conda на самом терминале через другое полезное сообщение . Кроме того, я использую API dropbox и пакет python для pu sh моих файлов вывода в облако из кода, запущенного на EC2.

TL; DR: Lambda не будет работать для меня, а EC2 работал во многом благодаря среднему посту . Кроме того, мне нужно понять, как работает код CLI, чтобы лучше понять, как это работает.

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