云函数触发后立即崩溃
Cloud function crashes immediately after triggering
我正在尝试触发云函数以在 pub/sub 主题事件中创建一个新的数据处理集群,每当任何数据处理集群创建失败且状态代码为非零的数字时,该主题都会收到消息( status_code!=0) 在云日志中(dataproc activity 日志)。
我已经为上述场景编写了 python 代码,但此云函数在 pub/sub 触发后立即崩溃。
我的代码有什么问题,根据上面的场景需要修改什么才能执行成功。
import base64
import json
import googleapiclient.discovery
from google.cloud import dataproc_v1 as dataproc
def dataproc_workflow(event, context):
"""
Triggered by a Cloud Pub/Sub message containing a Dataproc status code != 0
audit activity Stackdriver log message
"""
pubsub_message = base64.b64decode(event['data']).decode('utf-8')
msg_json = json.loads(pubsub_message)
proto_payload = msg_json['protoPayload']
resource_name = proto_payload['resourceName']
email = proto_payload['authenticationInfo']['principalEmail']
client = dataproc.ClusterControllerClient()
create_cluster(client, project_id, zone, region, cluster_name)
print(f"Cluster created: {cluster_name}.")
def create_cluster(client, project_id, zone, region, cluster_name):
print('Creating cluster...')
cluster_data = {
'project_id': *********************,
'cluster_name': simple,
'region' : ******************,
'config': {
'config_bucket': ************,
'gce_cluster_config': {
'zone_uri': ********************,
'subnetwork_uri': ********************,
'internal_ip_only': true,
'service_account_scopes': [
'https://www.googleapis.com/auth/cloud-platform'
],
'tags': [
'dataproc-rule',
]
},
'master_config': {
'num_instances': 1,
'machine_type_uri': 'n1-standard-1'
},
'worker_config': {
'num_instances': 2,
'machine_type_uri': 'n1-standard-1'
}
}
}
response = client.create_cluster(project_id, region, cluster_data)
result = response.result()
print("After cluster create")
return result
从代码片段来看,似乎所有 Dataproc 集群配置都是硬编码的?例如project_id、区域等,而不是从方法参数中读取。此外,create_cluster(client, project_id, zone, region, cluster_name)
中传递的参数似乎没有在任何地方定义,这肯定会在触发工作流时使您的程序崩溃。
如果这不是问题并且故意忽略了这些变量,那么请附上完整的堆栈跟踪。
我正在尝试触发云函数以在 pub/sub 主题事件中创建一个新的数据处理集群,每当任何数据处理集群创建失败且状态代码为非零的数字时,该主题都会收到消息( status_code!=0) 在云日志中(dataproc activity 日志)。
我已经为上述场景编写了 python 代码,但此云函数在 pub/sub 触发后立即崩溃。
我的代码有什么问题,根据上面的场景需要修改什么才能执行成功。
import base64
import json
import googleapiclient.discovery
from google.cloud import dataproc_v1 as dataproc
def dataproc_workflow(event, context):
"""
Triggered by a Cloud Pub/Sub message containing a Dataproc status code != 0
audit activity Stackdriver log message
"""
pubsub_message = base64.b64decode(event['data']).decode('utf-8')
msg_json = json.loads(pubsub_message)
proto_payload = msg_json['protoPayload']
resource_name = proto_payload['resourceName']
email = proto_payload['authenticationInfo']['principalEmail']
client = dataproc.ClusterControllerClient()
create_cluster(client, project_id, zone, region, cluster_name)
print(f"Cluster created: {cluster_name}.")
def create_cluster(client, project_id, zone, region, cluster_name):
print('Creating cluster...')
cluster_data = {
'project_id': *********************,
'cluster_name': simple,
'region' : ******************,
'config': {
'config_bucket': ************,
'gce_cluster_config': {
'zone_uri': ********************,
'subnetwork_uri': ********************,
'internal_ip_only': true,
'service_account_scopes': [
'https://www.googleapis.com/auth/cloud-platform'
],
'tags': [
'dataproc-rule',
]
},
'master_config': {
'num_instances': 1,
'machine_type_uri': 'n1-standard-1'
},
'worker_config': {
'num_instances': 2,
'machine_type_uri': 'n1-standard-1'
}
}
}
response = client.create_cluster(project_id, region, cluster_data)
result = response.result()
print("After cluster create")
return result
从代码片段来看,似乎所有 Dataproc 集群配置都是硬编码的?例如project_id、区域等,而不是从方法参数中读取。此外,create_cluster(client, project_id, zone, region, cluster_name)
中传递的参数似乎没有在任何地方定义,这肯定会在触发工作流时使您的程序崩溃。
如果这不是问题并且故意忽略了这些变量,那么请附上完整的堆栈跟踪。