7

AWS Güncelleştirme-LMFunctionCode dosyasını, AWS'de varolan bir lambda işlevine dağıtmak için kullanmaya çalışıyorum.Powershell'de yerel bir zip dosyasının Base64encoded bir memor akışını nasıl edinebilirim?

Yalnızca zipFile (-FunctionZip) yolunu sağlayabildiğim Publish-LMFunction öğesinden farklı olarak, Update-LMFunction kendi -Zipfile argümanı için bir memoristream ister.

Yerel bir zip dosyası disketten çalışan bir bellek akışına yükleme örneği var mı? Benim ilk çağrılar burada sıkıştırılmış dosya edilemez hatalar ... Powershell fonksiyonu için

$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 edilir alıyorsanız: http://docs.aws.amazon.com/powershell/latest/reference/items/Update-LMFunctionCode.html bir çerçeve içinde yaşamak istiyor rağmen ...

+0

(. Bilginize, bu blok Get-LMFunction fonksiyonismi bulmak için başarısız olduğunda yakalar daha büyük bir try/catch ise) büyük, teşekkür çalıştı –

cevap

8

kullanmayı deneyin CopyTo yöntem akıştan başka kopyalamak için:

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

, AWS dokümanlarının neden tabana değindiğinden emin değil. parçanın parçalanması –

+3

Sanırım metin, temelden [UpdateFunctionCode için Lambda API Başvurusu] kopyalanmıştır (http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html). Tabii ki, bu onların PowerShell cmdlet'inin neden sadece bir dosya yolu alamıyor ve gerisini anlayamadığını açıklamıyor :). – James

+0

özellikle Yayınlama bunu yaptığında, teşekkürler - AWS forumlarında biraz kredi almak istiyorsanız - sorum hala orada: https://forums.aws.amazon.com/thread.jspa?threadID=214760&tstart=0 –

İlgili konular