没有名为“lambda_function”的模块:无法导入“lambda_function”

问题描述 投票:0回答:1

我想集成 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 进行部署,但最终出现相同的错误。

amazon-web-services amazon-s3 aws-lambda amazon-cloudwatchlogs aws-event-bridge
1个回答
0
投票

您应该修改 lambda 函数设置并设置处理程序的正确路径。由于您的

lambda_function.py
位于文件夹
lambda_function
内,因此完整路径应为:

lambda_function/lambda_function.lambda_handler
© www.soinside.com 2019 - 2024. All rights reserved.