簡體   English   中英

Google上用於長期任務的雲功能的替代方案

[英]Alternative to Cloud Functions for Long Duration Tasks on Google

我一直在使用Google Cloud Functions (GCF)設置無服務器環境。 這工作正常,涵蓋了我需要的大多數必需功能。

但是,對於一個特定的模塊(從FTP服務器提取數據),從提供程序解析文件的時間要比540s長 因此,將我執行的任務部署為雲功能時會超時。

另外,某些FTP服務器要求它們將發出這些請求的IP地址列入白名單。 使用Cloud函數時,除非您以某種方式保留了靜態地址或范圍 ,否則這是不可能的。

因此,我正在尋找一種替代解決方案,以在Google平台上的雲中執行Python腳本。 要求是:

  • 它需要支持Python 3.7
  • 它必須具有將靜態IP地址與其關聯的可能性
  • 一次執行應花費超過540秒的時間
  • 理想情況下,應該可以輕松地部署腳本( 與GCF一樣

滿足這些需求的最佳選擇是什么?

雲功能的概念主要是微服務的概念,它是在相對較短的時間內運行的。 在您的故事中,我們似乎采取了可以長時間運行的行動。 這似乎很適合運行某種形式的計算引擎的概念。 立即想到的兩個是Google Compute Engine(CE)和Google Kubernetes Engine(GKE)。 讓我們考慮一下計算引擎。 可以將其視為具有100%控制權的Linux VM。 這不必是一件重量級的事情……Google提供了微不足道的微型計算引擎。 您可以使用其中的一項或多項功能,包括在集合上的負載過高時動態擴展實例數量的功能。 在您的計算引擎上,您可以創建所需的任何環境...包括安裝Python環境並運行Flask(或其他)來處理傳入的請求。 您可以將計算引擎與靜態IP地址關聯,也可以將靜態IP地址與引擎前端的負載均衡器關聯。

這是我將具有Google Cloud Functions的FTP文件從FTP下載到Google Cloud Storage的方法。 少於30秒(取決於文件大小)。

#import libraries
from google.cloud import storage
import wget


def importFile(request):

 #set storage client
 client = storage.Client()

 # get bucket
 bucket = client.get_bucket('BUCKET-NAME') #without gs://
 blob = bucket.blob('file-name.csv')

 #See if file already exists
 if blob.exists() == False:

    #copy file to google storage
    try:
        link = 'ftp://account:password@ftp.domain.com/folder/file.csv' #for non-public ftp files
        ftpfile = wget.download(link, out='/tmp/destination-file-name.csv') #save downloaded file in /tmp folder of Cloud Functions
        blob.upload_from_filename(ftpfile)
        print('Copied file to Google Storage!')

    #print error if file doesn't exists
    except BaseException as error:
        print('An exception occurred: {}'.format(error))

 #print error if file already exists in Google Storage
 else:
    print('File already exists in Google Storage') 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM