由 Bucket 的 Finalize/Create 事件触发在 Cloud Function 上启动 VM 实例

由 Bucket 的 Finalize/Create 事件触发在 Cloud Function 上启动 VM 实例

我希望每当文件放入存储桶时都执行云函数(参见以下代码)。此外,此云函数应启动 VM 实例。

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’对象没有属性‘instances’

我只熟悉 python,并且找不到任何可以帮助我在代码中编写此功能的资源。

如果有人能指出我错在哪里以及我的代码缺少哪些库以使其正常工作,那就太好了。

附言:到目前为止,我还没有在我的代码中包含任何库,因为我不知道我一次需要哪一个。

答案1

事实证明,我需要包含“googleapiclient”来导入库“discovery”,下面的代码将允许我启动我的 VM 实例

试运行代码。这是 Google Cloud 函数的代码,每当文件添加到存储桶时都会执行该函数。它会检查它是否是正确的文件。如果正确,则启动 VM 实例,进一步处理上传的文件。

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')

相关内容