为什么我的Powershell上传到lambda会将目录视为文件?

时间:2019-04-09 20:28:29

标签: powershell aws-lambda

使用以下脚本

$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)
}

最终,我的lambda项目结构如下所示: enter image description here

我在Windows机器上,正在运行Powershell 5.1.17763.316版本。我可以通过编程方式将zip上传到s3,并可以在文件浏览器中查看,但是如果我通过console.aws.com上载相同的zip,则我会遇到同样的问题。

2 个答案:

答案 0 :(得分:1)

ZIP标准使用/作为路径分隔符,而Powershell中的Compress-Archive使用\,因此,当Lambda将其解压缩时,它们就是长文件名而不是分隔的路径。

答案 1 :(得分:0)

我能够使用7zip以AWS接受的方式正确压缩文件。不知道他们不喜欢的内置Powershell方法出了什么问题。