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

AWS Lambda PowerShell脚本如何通过OutFile参数将文件存到Amazon S3

问题核心原因

Invoke-RestMethod的OutFile参数仅支持写入本地文件系统路径,无法直接识别S3存储桶路径,你需要拆分「拉取文件」和「上传S3」两个步骤实现需求。

前置要求

  • 你的Lambda执行角色必须配置包含s3:PutObject权限的IAM策略,权限覆盖目标S3存储桶的对应路径
  • Lambda运行环境默认预装AWS Tools for PowerShell的S3模块,可直接调用Write-S3Object cmdlet完成上传

方案1:先写入Lambda临时目录再上传(适合所有文件大小)

Lambda仅开放/tmp目录的写入权限,你可以先把文件拉取到临时目录,再上传到S3,代码示例:

# 定义临时本地路径
$localTempPath = "/tmp/<my file name>.txt"
# 拉取文件存到本地临时路径
Invoke-RestMethod -Method Get -Uri $URI -Headers $Params -OutFile $localTempPath
# 上传到S3
Write-S3Object -BucketName "<bucket name>" -Key "<directory name>/<my file name>.txt" -File $localTempPath

方案2:直接内存上传(适合小文件,避免磁盘IO)

如果拉取的文件体积较小,可以不写入本地磁盘,直接将拉取到的内存内容上传到S3:

# 直接拉取文件内容到内存
$fileContent = Invoke-RestMethod -Method Get -Uri $URI -Headers $Params
# 内存内容直接上传S3
Write-S3Object -BucketName "<bucket name>" -Key "<directory name>/<my file name>.txt" -Content $fileContent

注意事项

  • Lambda的/tmp目录最大容量为512MB,如果你要拉取的文件超过这个体积,需要调整方案使用分段上传或者挂载EFS
  • 如果你拉取的是二进制文件,建议使用Invoke-WebRequest代替Invoke-RestMethod,避免内容解析异常
  • 使用Invoke-WebRequest拉取文件时请加-UseBasicParsing参数,避免Lambda环境缺少IE组件导致的报错

内容的提问来源于stack exchange,提问作者Mike Goldweber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:48:04