CSV-файл из AWS S3 в PostgreSQL Amazon RDS с использованием python - PullRequest
0 голосов
/ 19 сентября 2018

Статус:

  1. Я создал новые таблицы в PostgreSQL-Database на Amazon RDS
  2. Я загрузил csv-файл в Bucket на Amazon S3
  3. через лямбда-функцию я подключился к Amazon S3 Buckets и Amazon RDS
  4. Я могу прочитать csv-файл с помощью следующего кода

    import csv, io, boto3
    
    s3 = boto3.resource('s3')
    client = boto3.client('s3',aws_access_key_id=Access_Key,aws_secret_access_key=Secret_Access_Key)
    buf = io.BytesIO()
    s3.Object('bucketname','filename.csv').download_fileobj(buf)
    
    buf.seek(0)
    while True:
        line =  buf.readlines(1)
        print(line)
    

Проблема:

Не удается импортировать необходимые библиотеки Python, например, psycopg2, openpyxl и т. Д., Когда я пытался импортировать psycopg2

    import psycopg2

Я получил информацию об ошибке:

    Unable to import module 'myfilemane': No module named 'psycopg2._psycopg'

всначала я импортировал не модуль "psycopg2._psycopg", а "psycopg2".Я не знаю, где суффикс '_psycopg' от

. Во-вторых, я выполнил все шаги в документации: https://docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html (1. Создайте каталог. 2. Сохраните весь ваш исходный код Pythonфайлы (файлы .py) на корневом уровне этого каталога. 3. Установите любые библиотеки, используя pip на корневом уровне каталога. 4. Заархивируйте содержимое каталога project-dir)

И яЯ также прочитал эту документацию: https://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html

То же самое относится и к другим модулям или библиотекам, например, к openpyxl и т. д. Мне всегда говорили, что «модуль не назван» OneNameThatIHaveNotImported '"

Так же кто-нибудьЛюбая идея или кто знает другой способ, как можно через lambda-функцию отредактировать csv-файл на s3 и импортировать отредактированную версию в базу данных rds?

Заранее спасибо за помощь!

1 Ответ

0 голосов
/ 23 сентября 2018

ветка ответов, эта ТАК ссылки на ответы поставит вас на правильный путь.По сути, вам нужно создать пакет развертывания в EC2, соответствующий образу Linux, на котором работают лямбда-функции AWS.еще лучше, вы можете развернуть лямбда-функции из того же промежуточного экземпляра EC2, где вы создали свой пакет развертывания через CLI AWS.

вы также можете использовать [предварительно скомпилированные лямбда-пакеты] [2], если вам нужно готовое исправление.

[2]: https://github.com/jkehler/awslambda-psycopg2 или, в более широком смысле, https://github.com/Miserlou/lambda-packages

...