7

Ho cercato di utilizzare AWS Update-LMFunctionCode per distribuire il mio file su una funzione lambda esistente in AWS.In PowerShell, come posso ottenere un memorandtream con codifica Base64 di un file zip locale?

A differenza di Publish-LMFunction dove posso fornire solo un percorso per zipFile (-FunctionZip), Update-LMFunction vuole un memorystream per il suo argomento -Zipfile.

C'è un esempio di caricamento di un file zip locale da disco in un flusso di memoria che funziona? Le mie chiamate iniziali stanno ottenendo gli errori che il file non può essere decompresso ...

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

documentazione per la funzione di PowerShell è qui: http://docs.aws.amazon.com/powershell/latest/reference/items/Update-LMFunctionCode.html anche se vuole vivere in una cornice ...

+0

(. Cordiali saluti, quel blocco è in un più ampio try/catch che cattura quando il Get-LMFunction non riesce a trovare il functionname) –

risposta

8

Provare a utilizzare il metodo CopyTo per copiare da un flusso all'altro:

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

che lavorano alla grande, grazie, non sono sicuro del motivo per cui i documenti AWS menzionavano la base64Enc oding part –

+3

Penso che il testo sia copiato dal sottostante [Lambda API Reference for UpdateFunctionCode] (http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html). Naturalmente, questo non spiega perché il loro cmdlet PowerShell non può semplicemente prendere un percorso di file e capire il resto :). – James

+0

specialmente quando la Pubblica fa proprio questo, grazie - se vuoi un po 'di credito nei forum di AWS - la mia domanda è ancora lì: https://forums.aws.amazon.com/thread.jspa?threadID=214760&tstart=0 –

Problemi correlati