AWS Lambda出现KeyError:'s3_cleansed_layer'问题求助
解决AWS Lambda中
s3_cleansed_layer的KeyError问题 你遇到的KeyError: 's3_cleansed_layer'本质是Lambda运行时无法找到对应的环境变量,以下是几个必查的解决方向:
1. 核对环境变量名称的大小写
AWS Lambda的环境变量名称严格区分大小写。检查你配置的变量名是否和代码里的s3_cleansed_layer完全一致——比如有没有误写成S3_Cleansed_Layer、s3-cleansed-layer这类变体。
2. 确认Lambda已重新部署
修改环境变量后,必须重新部署Lambda函数。如果只是保存了环境变量但没部署,运行的还是旧版本的函数,自然读取不到新配置的变量。
3. 检查环境变量的配置范围
如果你使用了Lambda的版本或别名,要确保环境变量是配置在当前运行的版本/别名上,而非其他未启用的版本。
4. 调整环境变量的读取位置
你的代码在函数定义外部就读取了环境变量,这部分逻辑会在Lambda冷启动时执行。如果是热启动的复用进程,可能不会重新读取更新后的环境变量。建议把环境变量的读取逻辑移到lambda_handler内部,确保每次调用都获取最新值:
import awswrangler as wr import pandas as pd import urllib.parse import os def lambda_handler(event, context): # 移到函数内部读取环境变量 os_input_s3_cleansed_layer = os.environ['s3_cleansed_layer'] os_input_glue_catalog_db_name = os.environ['glue_catalog_db_name'] os_input_glue_catalog_table_name = os.environ['glue_catalog_table_name'] os_input_write_data_operation = os.environ['write_data_operation'] # Get the object from the event and show its content type bucket = event['Records'][0]['s3']['bucket']['name'] key = urllib.parse.unquote_plus(event['Records'][0]['s3']['object']['key'], encoding='utf-8') try: # Creating DF from content df_raw = wr.s3.read_json('s3://{}/{}'.format(bucket, key)) # Extract required columns: df_step_1 = pd.json_normalize(df_raw['items']) # Write to S3 wr_response = wr.s3.to_parquet( df=df_step_1, path=os_input_s3_cleansed_layer, dataset=True, database=os_input_glue_catalog_db_name, table=os_input_glue_catalog_table_name, mode=os_input_write_data_operation ) return wr_response except Exception as e: print(e) print('Error getting object {} from bucket {}. Make sure they exist and your bucket is in the same region as this function.'.format(key, bucket)) raise e
5. 调试排查:打印所有环境变量
如果以上方法都无效,可以在lambda_handler开头添加调试代码,打印所有可用的环境变量,确认s3_cleansed_layer是否存在:
print("当前可用环境变量:", list(os.environ.keys()))
内容的提问来源于stack exchange,提问作者MCA DDIT
相关产品推荐
相关产品推荐

