我想集成 S3 和 lambda 函数的事件桥触发器,以将特定日志从云监视存储到 SQL Server 管理数据库,因此我使用 Pyodbc 库。
文件名称:
lambda_function.py
import json
import os
import pyodbc
import urllib.parse
def lambda_handler(event, context):
try:
# Extract S3 event details
s3_event = event['Records'][0]['s3']
bucket_name = s3_event['bucket']['name']
object_key = urllib.parse.unquote_plus(s3_event['object']['key'])
file_length = s3_event['object']['size']
# Extract additional fields from the record (if available)
record_fields = event.get('additionalFields', {})
provider_id = record_fields.get('providerID', None)
created_at = record_fields.get('createdAt', None)
updated_at = record_fields.get('updatedAt', None)
# Store file details locally
source_path = 's3://' + bucket_name + '/' + object_key
file_name = os.path.basename(object_key)
# Connect to the Microsoft SQL database
db_server = '**********'
db_name = '**********'
db_username = '*******'
db_password = '********'
conn_str = f'DRIVER={{ODBC Driver 17 for SQL Server}};SERVER={db_server};DATABASE={db_name};UID={db_username};PWD={db_password}'
conn = pyodbc.connect(conn_str)
cursor = conn.cursor()
# Insert/update file details in the database
sql_query = "INSERT INTO RawRecording_temp (providerID, createdAt, updatedAt, sourcepath, fileName, fileSize) VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE fileName = VALUES(fileName)"
cursor.execute(sql_query, provider_id, created_at, updated_at, source_path, file_name, file_length)
conn.commit()
# Close the database connection
cursor.close()
conn.close()
return {
'statusCode': 200,
'body': json.dumps('File details was inserted/updated in the database successfully!')
}
except Exception as e:
return {
'statusCode': 500,
'body': json.dumps(f'Error: {str(e)}')
}
但是,我收到此错误:
error: [ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'lambda_function'
Traceback (most recent call last):
我已经检查了处理程序,其归档如下“lambda_function.lambda_handler” 以及我正在维护的项目结构:
lambda_function.zip
├── lambda_function
│ └── lambda_function.py
└── lambda-packages
├── pyodbc
└── other_dependency
我什至尝试通过打包内容来使用 terraform 和 Vscode 进行部署,但最终出现相同的错误。
您应该修改 lambda 函数设置并设置处理程序的正确路径。由于您的
lambda_function.py
位于文件夹 lambda_function
内,因此完整路径应为:
lambda_function/lambda_function.lambda_handler