Запись в базу данных с AWS лямбда-ошибкой - сбой вызова действия API вызова с этим сообщением: Ошибка сети - PullRequest
1 голос
/ 16 апреля 2020

Я запрашиваю API, сохраняю его в pandas фрейме данных, преобразовываю его и затем записываю в базу данных AWS Redshift. На моей локальной машине проблем нет и все работает отлично. Когда я поместил код в AWS Lambda со всеми необходимыми пакетами, я получил эту ошибку:

Calling the invoke API action failed with this message: Network Error

Я прочитал, что это может быть связано с ограничением количества строк, в которые он может записать базы данных, затем я попытался записать только 1 строку в базу данных, но все равно получил ту же ошибку.

Мой код, где я пишу, выглядит так:

conn = create_engine('postgresql://user:password@redshifteu-west-1.redshift.amazonaws.com:5439/dev')
result.to_sql('table_1', conn, index=False, if_exists='replace', schema='schema')

Я использую pandas to_sql метод и sqlalchemy. Как я могу записать свой фрейм данных в базу данных Redshift с AWS Lambda?

1 Ответ

1 голос
/ 16 апреля 2020

Обратите внимание, что вам может потребоваться psycopg2 для подключения к Redshift через SQLAlchemy:

pip install psycopg2

Теперь еще одна возможность может заключаться в том, что вы существенно превышаете скорость предел S3 .


Если вышеперечисленное не работает и вы уверены, что ограничение скорости не превышено, вы можете указать pandas_redshift a go:

# pip install pandas-redshift
import pandas_redshift as pr


pr.connect_to_redshift(
    dbname='dev', host='redshifteu-west-1.redshift.amazonaws.com', 
    port=5439, user='user', password='password'
)

pr.connect_to_s3(
   aws_access_key_id='aws_access_key_id',
   aws_secret_access_key='aws_secret_access_key',
   bucket='bucket_name',
   subdirectory='subdirectory'
)

pr.pandas_to_redshift(data_frame=result, redshift_table_name='table_1')
...