python - AWS Lambda 函数执行不显示执行成功的结果
问题描述
我目前正在使用 AWS Lambda 将 csv 数据集从 S3 获取到 RDS Mysql 表。我测试了一个我创建的完美执行的 lambda 函数,但由于某种原因,数据集没有插入到 RDS 中的数据库表中。
它可能是由触发器或 Lambda 以外的部分引起的,但我很难找到这里的问题,因为我对 AWS Lambda 非常陌生。
任何建议或建议将不胜感激。
这是 Lambda 函数:
import sys
import logging
import rds_config
import pymysql
import numpy as np
import csv
import pandas as pd
import mysql.connector
import sqlalchemy
from sqlalchemy import create_engine
import boto3
import botocore
Bucket_Name = 'ceo-project'
s3_client = boto3.client('s3')
name = rds_config.db_username
password = rds_config.db_password
db_name = rds_config.db_name
rds_host = rds_config.rds_host
logger = logging.getLogger()
logger.setLevel(logging.INFO)
try:
conn = pymysql.connect(host=rds_host, user=name, passwd=password, port =3306, db=db_name, connect_timeout=30)
except pymysql.MySQLError as e:
logger.error("ERROR: Unexpected error: Could not connect to MySQL instance.")
logger.error(e)
sys.exit()
logger.info("SUCCESS: Connection to RDS MySQL instance succeeded")
engine = create_engine('mysql+pymysql://'+name+':'+password+'@'+rds_host+':3306'+'/'+db_name)
def handler(event, context):
def S3_get_csv(Bucket_Name, Folder_Name,i):
if isinstance(prefix, str):
kwargs['Prefix'] = prefix
while True:
resp = s3_client.list_objects_v2(Bucket=Bucket_Name, Prefix=Folder_Name+'/')
latest = max(contents, key=lambda x: x['LastModified'])
try:
contents = resp['Contents']
except KeyError:
return
for obj in contents:
key = obj['Key']
if key.startswith(prefix):
yield obj
try:
s3.Bucket(Bucket_Name).download_file(latest['Key'],latest['Key'].split(sep='/')[1])
df = pd.read_csv(latest['Key'].split(sep='/')[1])
df.to_sql(name=table_list[i], con=engine, if_exists = 'append', index=False,chunksize=10000,method='multi')
except botocore.exceptions.ClientError as e:
if e.resp['Error']['Code'] == "404":
print("The object does not exist.")
else:
raise
def get_matching_s3_keys(bucket, prefix='', suffix=''):
for obj in get_matching_s3_objects(bucket, prefix):
yield obj['Key']
Folder_list = ['1','2','3','4','5','6','7']
table_list = ['a','b','c','d','e','f','g']
for i in range(0,7):
S3_get_csv(Bucket_Name,Folder_list[i],i)
return "CSV files inserted to RDS"
解决方案
推荐阅读
- python - 以编程方式访问指定 Google 表格的活动
- python - 使用 YOLO 和 OpenCV 时出现错误 - No such file or directory: 'labels.txt'
- java - 在jsp表达式中从foreach访问变量
- install4j - 在 install4j 编译器变量中使用正则表达式
- python - Python 格式无法正常工作
- php - 你如何在 Laravel 8 中添加到 Fortify 的路由?
- c - 为什么在这种情况下两个整数的总和不起作用?
- python-3.x - Discord.py(不是重写)。如何接受 on_message 的多个输入
- r - 在 R 中计算时间范围的准确性
- javascript - useMediaQuery 打字稿错误(条件将始终返回 true,因为始终定义函数)