7

Próbuję użyć aktualizacji AWS-LMFunctionCode do wdrożenia mojego pliku do istniejącej funkcji lambda w AWS.W PowerShell, w jaki sposób mogę uzyskać kod pamięci Base64 z lokalnym plikiem zip?

W odróżnieniu od funkcji Publish-LMFunction, w której mogę podać tylko ścieżkę do pliku zipFile (-FunctionZip), funkcja Update-LMFunction żąda strumienia pamięci dla argumentu -Zipfile.

czy istnieje przykład ładowania lokalnego pliku zip z dysku do działającego strumienia pamięci? Moje pierwsze rozmowy są coraz błędy, że plik nie może być rozpakowany ...

$deployedFn = Get-LMFunction -FunctionName $functionname 
     "Function Exists - trying to update" 
     try{ 
      [system.io.stream]$zipStream = [system.io.File]::OpenRead($zipFile) 
     [byte[]]$filebytes = New-Object byte[] $zipStream.length 
     [void] $zipStream.Read($filebytes, 0, $zipStream.Length) 
      $zipStream.Close() 
      "$($filebytes.length)" 
     $zipString = [System.Convert]::ToBase64String($filebytes) 
     $ms = new-Object IO.MemoryStream 
     $sw = new-Object IO.StreamWriter $ms 
     $sw.Write($zipString) 
     Update-LMFunctionCode -FunctionName $functionname -ZipFile $ms 
      } 
     catch{ 
      $ErrorMessage = $_.Exception.Message 
      Write-Host $ErrorMessage 
      break 
     } 

docs dla funkcji PowerShell jest tutaj: http://docs.aws.amazon.com/powershell/latest/reference/items/Update-LMFunctionCode.html choć chce żyć w ramce ...

+0

(. FYI, że blok jest w większej try/catch, że połowy, kiedy Get-LMFunction nie znajdzie functionName) –

Odpowiedz

8

Spróbuj użyć metoda CopyTo skopiować z jednego strumienia do drugiego:

try { 
    $zipFilePath = "index.zip" 
    $zipFileItem = Get-Item -Path $zipFilePath 
    $fileStream = $zipFileItem.OpenRead() 
    $memoryStream = New-Object System.IO.MemoryStream 
    $fileStream.CopyTo($memoryStream) 

    Update-LMFunctionCode -FunctionName "PSDeployed" -ZipFile $memoryStream 
} 
finally { 
    $fileStream.Close() 
} 
+0

to było wspaniałe, dzięki, nie wiem, dlaczego w dokumentach AWS wspomniano o base64Enc oding part –

+3

Myślę, że tekst jest kopiowany z podstawowej [Lambda API Reference dla UpdateFunctionCode] (http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html). Oczywiście to nie wyjaśnia, dlaczego ich cmdlet PowerShell nie może po prostu wziąć ścieżki do pliku i dowiedzieć się resztę :). – James

+0

zwłaszcza, gdy Wydawnictwo to robi, dziękuję - jeśli chcesz mieć trochę punktów na forach AWS - moje pytanie jest nadal tam: https://forums.aws.amazon.com/thread.jspa?threadID=214760&tstart=0 –

Powiązane problemy