必须配置 aws 凭证(access key id 和 secret access key)及默认区域(region_name),否则 boto3.client('s3') 会因缺失认证或区域信息抛出 nocredentialserror 或 illegallocationconstraintexception。

用 boto3 上传文件到 S3 前必须配置什么
不配好凭证和区域,boto3.client('s3') 会直接报 NoCredentialsError 或 ClientError: An error occurred (InvalidAccessKeyId)。这不是代码写错,而是环境没准备好。
推荐优先用 AWS CLI 配置:aws configure,它会把密钥写进 ~/.aws/credentials,boto3 默认就读这里。如果程序跑在服务器或容器里,更安全的做法是用 IAM 角色(EC2/ECS 场景),完全避免硬编码密钥。
必须显式指定 region_name,哪怕你只用 us-east-1 —— 某些旧版 boto3 在非 us-east-1 区域不设 region 会抛 IllegalLocationConstraintException。
如何用 pathlib + shutil 备份前校验配置文件有效性
直接 shutil.copy() 一个不存在的路径,或者权限不足的 /etc/nginx/nginx.conf,备份脚本就静默失败了。得先确认源文件可读、目标目录可写、且不是空文件。
- 用
pathlib.Path(src).exists()和.is_file()双重检查,避免链接断裂或目录误判 - 加
try/except PermissionError捕获读取失败,比事后报错更可控 - 用
pathlib.Path(dst_dir).mkdir(parents=True, exist_ok=True)确保临时目录存在,别依赖手动创建 - 小技巧:备份前用
hashlib.md5(Path(src).read_bytes()).hexdigest()记录原始哈希,上传后比对 ETag(注意 S3 的 ETag 对单 part 上传才是 MD5)
上传时怎么避免覆盖线上关键配置
S3 默认覆盖同名对象,但配置文件一旦误覆盖,可能直接导致服务中断。不能靠“手快删错”来兜底。
必须启用版本控制(Bucket 层级开关),再配合带时间戳的 key 名,双重保险:
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
- key 设计成
f"configs/{hostname}/{Path(src).name}-{int(time.time())}.bak",保证每次唯一 - 上传时加
ExtraArgs={'ServerSideEncryption': 'AES256'},尤其含敏感字段的配置 - 禁用
ACL='public-read'—— 默认 private 就够,公开等于裸奔 - 如果要用生命周期自动清理旧备份,规则匹配前缀
configs/,保留最近 7 天,别设成全局删除
定时执行备份时,cron 脚本为什么总提示找不到 boto3
本地 Python 环境装了 boto3,但 cron 启动的 shell 默认不用你的 ~/.bashrc,PATH 和 Python path 都是系统最小集,import boto3 直接 ModuleNotFoundError。
最稳解法:在 crontab 里写绝对路径
0 2 * * * /usr/bin/python3 /home/user/backup_config.py >> /var/log/backup.log 2>&1
别信 “加 source ~/.bashrc”,cron 的 non-interactive shell 不读它;也别用 pip install --user,不同用户权限下 --user 路径还可能不一致。
另外,Python 脚本开头务必加 #!/usr/bin/env python3 并 chmod +x,否则 cron 执行时连解释器都找不到。
真正麻烦的是跨平台——Windows 用户想用 OneDrive/SharePoint,就得换 requests 调 Graph API,OAuth 流程、token 刷新、分块上传逻辑全不一样,S3 这套根本不能平移。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










