7

मैं एडब्ल्यूएस में मौजूदा लैम्ब्डा फ़ंक्शन में अपनी फ़ाइल को तैनात करने के लिए AWS अद्यतन-LMFunctionCode का उपयोग करने का प्रयास कर रहा हूं।पावरहेल में, मैं स्थानीय ज़िप फ़ाइल का बेस 64 एन्कोडेड मेमोरीस्ट्रीम कैसे प्राप्त कर सकता हूं?

प्रकाशन-एलएमफ़ंक्शन से अलग हो जहां मैं ज़िपफाइल (-फंक्शनक्शन) के लिए केवल एक रास्ता प्रदान कर सकता हूं, अद्यतन-एलएमफ़ंक्शन अपने -Zipfile तर्क के लिए मेमोरीस्ट्रीम चाहता है।

क्या डिस्क से स्थानीय ज़िपफाइल को स्मृति स्ट्रीम में लोड करने का एक उदाहरण है जो काम करता है? मेरे प्रारंभिक कॉल त्रुटियों कि फ़ाइल अनज़िप नहीं किया जा सकता ... Powershell समारोह के लिए

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

डॉक्स यहाँ हो रहे हैं: http://docs.aws.amazon.com/powershell/latest/reference/items/Update-LMFunctionCode.html हालांकि यह एक फ्रेम में रहने के लिए चाहता है ...

+0

(। FYI करें, कि ब्लॉक एक बड़ा ट्राई/कैच कि पकड़ता जब Get-LMFunction functionName खोजने में विफल रहा है) –

उत्तर

8

उपयोग करने का प्रयास CopyTo विधि एक धारा से दूसरे में कॉपी करने के लिए:

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 दस्तावेज़ base64Enc का उल्लेख कर रहे थे ओडींग भाग –

+3

मुझे लगता है कि पाठ अंतर्निहित [अद्यतन फंक्शनकोड के लिए लैम्ब्डा एपीआई संदर्भ] से कॉपी किया गया है (http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html)। बेशक, यह स्पष्ट नहीं करता है कि क्यों उनके पावरशेल cmdlet सिर्फ फ़ाइल पथ नहीं ले सकते हैं और शेष को समझ सकते हैं :)। – James

+0

विशेष रूप से जब प्रकाशन केवल यही करता है, धन्यवाद - अगर आप एडब्ल्यूएस मंचों पर कुछ क्रेडिट चाहते हैं - मेरा प्रश्न अभी भी वहां है: https://forums.aws.amazon.com/thread.jspa?threadID=214760&tstart=0 –

संबंधित मुद्दे