Назад | Перейти на главную страницу

Запуск экземпляра виртуальной машины в облачной функции, запускаемой событием Finalize / Create сегмента

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

def startVMInstance(event, context):
  file = event
  if (file['name'] == 'test1.csv'):
      print('Starting VM Instnace')
      request = context.instances().start(project ='proj-name', zone ='zone-info', instance ='VMlabel')
         response = request.execute(event)
         print(response)

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

AttributeError: объект Context не имеет атрибутов instance

Я знаком только с python и не смог найти никаких ресурсов, которые помогли бы мне написать эту функцию в моем коде.

Было бы здорово, если бы я кто-нибудь мог указать, где я ошибаюсь и какие библиотеки мне не хватает в моем коде, чтобы он работал.

ps: Я еще не включил в свой код какие-либо библиотеки, так как не знаю, какие из них мне понадобятся.

Оказалось, что мне нужно включить googleapiclient для импорта библиотеки «обнаружение» ниже - это код, который позволит мне запустить экземпляр виртуальной машины.

Чтобы прогнать код всухую. Это код для функции Google Cloud, которая выполняется, когда файл добавляется в корзину. Он проверяет, правильный ли это файл. Если это так, то запускается экземпляр виртуальной машины, который будет обрабатывать загруженный файл.

from googleapiclient import discovery

service = discovery.build('compute', 'v1')

def hello_gcs(event, context):
    """Triggered by a change to a Cloud Storage bucket.
    Args:
         event (dict): Event payload.
         context (google.cloud.functions.Context): Metadata for the event.
    """
    file = event
    print(f"Processing file: {file['name']}.")

    # Trigger VM start only if the correct file is uploaded
    if (file['name'] == 'test1.csv') :         

         print('VM Instance starting')

         # Project ID for this request.
         project = 'project_name' 

         # The name of the zone for this request.
         zone = 'zone_value'  

         # Name of the instance resource to start.
         instance = 'instance_name'

         request = service.instances().start(project=project, zone=zone, instance=instance)
         response = request.execute()

         print('VM Instance started')