使用以下脚本
$tmpdir = New-TemporaryFile | %{ rm $_; mkdir $_ }
$tempFile = New-TemporaryFile
$ziplocation = $tempFile.FullName + ".zip"
$ziplocation
$filepath = Get-ChildItem $file
$filename = $filepath.Name
$fileWithoutExtension = $filepath.BaseName
$directory = Split-Path -path $file -parent
$sharedFolder = Join-Path -Path $directory -ChildPath "/shared"
$sharedFolder
$lambdaName = "$($enviroment)__$($fileWithoutExtension)"
$s3path = "$($enviroment)/$($lambdaName).zip"
$s3fullPath = "s3://firmware-repo-source-code/$($enviroment)/$($lambdaName).zip"
Copy-Item -Path $file -Destination $tmpdir
"Base file copied"
Rename-Item -path(Join-Path -Path $tmpdir -ChildPath $filename) -NewName "index.js"
Copy-Item -Path $sharedFolder -Destination $tmpdir -Recurse -Container
"shared files copied"
#Compress-Archive -Path $tmpdir -DestinationPath $ziplocation
Compress-Archive -Path ($tmpdir.FullName + "\*") -DestinationPath $ziplocation
"zip created"
aws lambda update-function-code --function-name $lambdaName --zip-file ("fileb://" + $ziplocation)
"Lambda updated"
function New-TemporaryDirectory {
$parent = [System.IO.Path]::GetTempPath()
[string] $name = [System.Guid]::NewGuid()
New-Item -ItemType Directory -Path (Join-Path $parent $name)
}
我在Windows机器上,正在运行Powershell 5.1.17763.316版本。我可以通过编程方式将zip上传到s3,并可以在文件浏览器中查看,但是如果我通过console.aws.com上载相同的zip,则我会遇到同样的问题。
答案 0 :(得分:1)
ZIP标准使用/作为路径分隔符,而Powershell中的Compress-Archive使用\,因此,当Lambda将其解压缩时,它们就是长文件名而不是分隔的路径。
答案 1 :(得分:0)
我能够使用7zip以AWS接受的方式正确压缩文件。不知道他们不喜欢的内置Powershell方法出了什么问题。