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

如何通过AWS Lambda读取EC2上托管的Microsoft DFS指定路径下的所有文件名?

用AWS Lambda读取EC2托管DFS路径下的所有文件名

要实现这个需求,核心是通过SMB协议访问DFS共享,下面以Python运行时为例给出具体实现步骤:

步骤1:准备依赖包

Lambda默认环境不包含SMB客户端库,你需要将smbclient库打包成Lambda层,或者直接包含在部署包中。如果用层的话,在本地Linux环境(与Lambda运行环境一致)执行:

mkdir -p python/lib/python3.9/site-packages
pip install smbclient -t python/lib/python3.9/site-packages
zip -r smbclient-layer.zip python/

然后将这个zip包上传为Lambda层并关联到你的函数。

步骤2:编写Lambda函数代码

下面的代码会连接DFS共享,列出指定路径下的所有文件名:

import smbclient

def lambda_handler(event, context):
    # 配置DFS共享信息
    dns_name = "<你的DNS地址>"
    share_name = "football"
    username = "ABC"
    password = "123"  # 强烈建议用AWS Secrets Manager存储,禁止硬编码
    
    # 构建SMB路径
    smb_path = f"smb://{dns_name}/{share_name}/"
    
    # 建立连接并列出文件
    try:
        # 设置SMB凭据
        smbclient.register_session(dns_name, username=username, password=password)
        # 获取路径下的所有文件
        file_list = []
        for entry in smbclient.scandir(smb_path):
            if entry.is_file():
                file_list.append(entry.name)
        return {"statusCode": 200, "files": file_list}
    except Exception as e:
        return {"statusCode": 500, "error": str(e)}
    finally:
        # 注销会话释放资源
        smbclient.delete_session(dns_name)

关键注意事项

  • 网络连通性:确保Lambda函数所在VPC能访问托管DFS的EC2实例,安全组需开放EC2的445端口(SMB默认端口)给Lambda的安全组。
  • 凭据安全:不要在代码中硬编码账号密码,建议将ABC和123存储到AWS Secrets Manager,通过Lambda SDK动态读取。
  • 路径格式:将Windows风格的\\<DNS>\football\转换为SMB协议的smb://<DNS>/football/格式。
  • 权限验证:确认服务账号ABC具备DFS共享路径的读取权限。

内容的提问来源于stack exchange,提问作者Shekhar Khadka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:13:20