You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求编写定时触发的S3触发Lambda函数:每日给员工涨薪100

实现每日触发的Lambda函数,给S3中员工CSV的薪资加100

修改后的完整代码

import os
import boto3
import csv
from io import StringIO

def lambda_handler(event, context):
    # 从环境变量获取存储桶和文件名,避免硬编码
    bucket = os.environ.get('EMPLOYEE_BUCKET')
    file_key = os.environ.get('EMPLOYEE_FILE_KEY')
    
    if not bucket or not file_key:
        raise ValueError("请设置EMPLOYEE_BUCKET和EMPLOYEE_FILE_KEY环境变量")

    s3 = boto3.resource('s3')
    s3_object = s3.Object(bucket, file_key)
    
    # 读取并解析CSV内容
    csv_content = s3_object.get()['Body'].read().decode('utf-8')
    reader = csv.reader(StringIO(csv_content))
    headers = next(reader)
    
    # 找到薪资列的索引(假设表头是'薪资',如果是英文表头则改成'Salary')
    try:
        salary_index = headers.index('薪资')
    except ValueError:
        raise ValueError("CSV文件中未找到'薪资'表头")
    
    # 处理每一行数据,给薪资加100
    processed_rows = [headers]
    for row in reader:
        try:
            current_salary = int(row[salary_index])
            row[salary_index] = str(current_salary + 100)
            processed_rows.append(row)
        except ValueError:
            # 薪资不是数字的情况,跳过并记录日志
            print(f"跳过无效行:{row},薪资字段不是有效数字")
            continue
    
    # 将处理后的数据写入S3(这里覆盖原文件,也可改为新文件名如'processed_' + file_key)
    output = StringIO()
    writer = csv.writer(output)
    writer.writerows(processed_rows)
    
    s3.Object(bucket, file_key).put(Body=output.getvalue())
    
    return {
        'statusCode': 200,
        'body': f"成功处理{len(processed_rows)-1}条员工记录"
    }

关键改动说明

  • 避免硬编码:用环境变量EMPLOYEE_BUCKET和EMPLOYEE_FILE_KEY指定存储桶和文件路径,在Lambda控制台的函数配置中设置即可,无需修改代码。
  • 适配表头变化:通过表头名称动态找到薪资列的索引,不用依赖固定列位置。
  • 异常防护:处理表头不存在、薪资非数字的情况,避免函数直接崩溃,同时打印日志方便排查问题。
  • 内存中处理:用StringIO在内存中构建处理后的CSV内容,适配Lambda本地存储有限的特性。

每日9点触发配置

  • 打开AWS EventBridge控制台,创建规则。
  • 规则类型选择计划,设置计划表达式为cron(0 1 ? * * *)(AWS使用UTC时间,北京时间上午9点对应UTC凌晨1点,根据你的时区自行调整)。
  • 目标选择你的Lambda函数,完成规则创建。

内容的提问来源于stack exchange,提问作者Dakshayini HG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 19:25:28