AWS Lambda中如何将SSM参数转为文本文件并上传至S3存储桶?
问题分析与修复方案
原代码核心问题
- 提前返回阻断后续逻辑:获取SSM参数后直接
return,导致文件写入和S3上传代码完全无法执行 - 错误写入对象:试图将SSM返回的字典对象直接写入文件,而非提取出的字符串参数值
- 文件句柄引用错误:
with open块中误用未定义的file变量,正确句柄是f - 未定义变量引用:末尾
print(response)引用已注释的变量,会触发NameError
修正后的完整代码
import boto3 client = boto3.client('ssm') s3 = boto3.client("s3") def lambda_handler(event, context): # 获取SSM参数并提取实际字符串值 parameter = client.get_parameter(Name='otherparam', WithDecryption=True) param_value = parameter['Parameter']['Value'] # 将参数写入Lambda允许的/tmp目录 with open("/tmp/log.txt", "w") as f: f.write(param_value) # 上传文件到目标S3存储桶 try: s3.upload_file("/tmp/log.txt", "copys3toecsbucket-117", "logs.txt") print("文件上传成功") except Exception as e: print(f"上传失败: {str(e)}") raise e return {"status": "success", "message": "参数已写入文件并上传至S3"}
关键注意事项
- IAM权限配置:确保Lambda执行角色拥有以下权限:
ssm:GetParameter:读取SSM参数权限s3:PutObject:向目标S3存储桶写入文件权限
- 目录限制:Lambda仅允许写入
/tmp临时目录,不能使用其他路径 - 异常处理:添加try-except块可捕获上传错误,便于问题排查
内容的提问来源于stack exchange,提问作者irfan shaikh
相关产品推荐
相关产品推荐

