Перенос файлов из Google Cloud Storage в Windows экземпляр виртуальной машины с использованием облачных функций - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь настроить облачную функцию, которая перемещает и удаляет файлы из хранилища в экземпляр Windows, который находится в том же проекте. Конечно, мы можем заставить его работать, если мы будем запускать его локально из экземпляра и использовать gsutil.

Но как нам получить путь к виртуальной машине, закодированный в сценариях облачной функции в месте локальной папки?

У меня также была локальная папка, совместно используемая внутри виртуальной машины.

Очень признателен за ваш вклад.

Ниже приведен код

import logging
from google.cloud import storage
import os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="serviceaccount.json"

#logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG) 
bucket_name = 'bucket name'
#File_name = 'filename'
# Instance/VM location where the files should be downloaded into (VM NAME)
folder = '//VW123456789/Cloud-Files' 

storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
blobs = bucket.list_blobs() #List all objects that satisfy the filter.

# Download the files inside windows-VM on GCP 
def download_to_local():
 logging.info('File download Started...Please wait for the job to complete!')
 # Create this folder locally if not exists
 if not os.path.exists(folder):
    os.makedirs(folder)
 # Iterating through for loop one by one using API call
 for blob in blobs:
    logging.info('Blobs: {}'.format(blob.name))
    destination_files = '{}/{}'.format(folder, blob.name) 
    blob.download_to_filename(destination_files)
    logging.info('Exported {} to {}'.format(blob.name, destination_files))
    blob.delete()
if __name__ == '__main__':
 download_to_local()

Спасибо!

1 Ответ

3 голосов
/ 27 февраля 2020

Существует несколько способов копирования файлов на серверы Windows. Ни один из этих методов не является простым для реализации в облачной функции.

Windows Общий доступ к файлам CIFS

Этот метод включает включение Windows общих ресурсов. AFAIK нет простого клиента SAMBA, который мог бы быть реализован в облачных функциях.

SFTP

Этот метод требует настройки сервера Windows Server S SH и пара ключей S SH для клиента (облачная функция). Существуют Python S SH клиентские библиотеки (paramiko), которые могут работать с облачными функциями. Передача файлов с использованием SFTP легко реализовать с помощью paramiko.

REST API Server

Для этого метода необходимо создать собственное программное обеспечение, которое предоставляет REST API (или аналогичную технологию), которое Облачные функции можно вызывать через HTTPS. Вам нужно будет управлять авторизацией. Реализация собственного API и безопасности представляет значительный риск.

РЕКОМЕНДАЦИЯ

Облачные функции - это неправильный сервис для взаимодействия с Windows Серверами. Я рекомендую создать конечную точку HTTP на сервере Windows, который вызывается вместо облачной функции. Теперь вы удалили Windows авторизацию сервера из вашего уравнения проектирования. Ваш код Python может выполняться непосредственно на Windows, взаимодействуя с облачным хранилищем.

...