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