Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 从pubsub/stackdriver消息中提取字段_Google Cloud Platform_Google Cloud Functions_Google Cloud Pubsub_Google Cloud Stackdriver - Fatal编程技术网

Google cloud platform 从pubsub/stackdriver消息中提取字段

Google cloud platform 从pubsub/stackdriver消息中提取字段,google-cloud-platform,google-cloud-functions,google-cloud-pubsub,google-cloud-stackdriver,Google Cloud Platform,Google Cloud Functions,Google Cloud Pubsub,Google Cloud Stackdriver,我正在将一个自定义度量从StackDriver导出到PubSub,这反过来将触发一个函数。我需要提取tableId和datasetId字段,这些字段将用于删除不符合企业标准的bigquery表 到目前为止,我已经尝试将数据字段的名称更改为protoPayload、textPayload,并且收到了多个错误。有些错误是无效键,使用字节而不是dict,主要是变量未定义 import base64 def hello_pubsub(event, context): pubsub_messag

我正在将一个自定义度量从StackDriver导出到PubSub,这反过来将触发一个函数。我需要提取tableId和datasetId字段,这些字段将用于删除不符合企业标准的bigquery表

到目前为止,我已经尝试将数据字段的名称更改为protoPayload、textPayload,并且收到了多个错误。有些错误是无效键,使用字节而不是dict,主要是变量未定义

import base64

def hello_pubsub(event, context):
    pubsub_message = base64.b64decode(event['protoPayload']).decode('utf-8')
    print(pubsub_message)
我希望能够提取单个字段tableId和datasetId,并使用BQ客户机中的字段删除有问题的表

更新:已将评论复制到问题:

line 383, in run_background_function
_function_handler.invoke_user_function(event_object) 
File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 217, in invoke_user_function return call_user_function(request_or_event) 
File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 214, in call_user_function event_context.Context(**request_or_event.context)) 
File "/user_code/main.py", line 9, in hello_pubsub pubsub_message = base64.b64decode(event['protoPayload']).decode('utf-8') KeyError: 'protoPayload' 

使用此框架作为起点:

def hello_pubsub(event, context):
    if 'data' in event:
        pubsub_message = base64.b64decode(event['data']).decode('utf-8')
        print(pubsub_message)

        // Your custom data

        tableId = pubsub_message['requestMetadata']['serviceData']['tableInsertRequest']['resource']['tableName']['tableId']

        datasetId = pubsub_message['requestMetadata']['serviceData']['tableInsertRequest']['resource']['tableName']['datasetId']
从下面的注释中解码JSON缺少底部:

MY-MESSAGE: {
    "insertId":"-cr1b1ae1x199",
    "logName":" logs/cloudaudit.googleapis.com%2Factivity",
    "protoPayload":{
        "@type":"type.googleapis.com/google.cloud.audit.AuditLog",
        "authenticationInfo":{
        "principalEmail":"xxx"
    },
    "authorizationInfo":[{
        "granted":true,
        "permission":"bigquery.tables.create",
        "resource":"xxx"
    }],
    "methodName":"tableservice.insert",
    "requestMetadata":{
        "callerIp":"x",
        "callerSuppliedUserAgent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/x Safari/537.36,gzip(gfe)"},
        "resourceName":"x",
        serviceData"":{
            "@type":"type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData",
            "tableInsertRequest":{
                "resource":{
                    "info":{},
                    "schemaJson":"{\n}",
                    "tableName":{
                        "datasetId":"citi_dev_gcp",
                        "projectId":"x",
                        "tableId":"outputCheck"
                    },
                    "view":{}
                }
            },
            "tableInsertResponse":{
                "resource":{
                    "createTime":"2019-06-20T18:42:21.106Z",
                    "expireTime":"2019-07-20T18:42:21.106Z",
                    "info":{},
                    "schemaJson":"{\n}",
                    "tableName":{
                        "datasetId":"name",
                        "projectId":"x",
                        "tableId":"outputCheck"
                    },
                    "updateTime":"2019-06-20T18:42:21.151Z",
                    "view":{}
                }
            }
        },
        "serviceName":"bigquery.googleapis.com","status":{}
    },
    "receiveTimestamp":

您可以发布您通过pubsub获得的消息吗?第383行,在run_background_function_function_handler.invoke_user_functionevent_object File/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py,第217行,调用用户函数返回调用用户函数请求或事件文件/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py,第214行,调用用户函数事件上下文。上下文**请求或事件上下文文件/user\u code/main.py,第9行,在hello\u pubsub pubsub\u message=base64.b64decodeevent['protoPayload'].decode'utf-8'键错误:'protoPayload'谢谢回复!为了满足字符限制,我不得不将这个问题缩小一点。下次,编辑你的问题并以代码的形式发布。@Jman。。。很抱歉我不清楚。您正在通过发布/订阅接收消息数据,并尝试对其进行解码。是否可以发布此消息/数据的示例?如果很大,可以把它发到互联网上的某个地方并添加一个链接。谢谢,约翰。使用此代码时,我收到以下内容:packages/google/cloud/functions/worker.py,第383行,在run\u background\u function\u handler.invoke\u user\u functionevent\u object File/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py,第217行,在调用用户函数返回调用用户函数请求或事件文件/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py,第214行,在调用用户函数事件上下文.context**request\u或事件.context文件/user\u code/main.py,第6行,在hello\u pubsub mydata=pubsub\u message['message']TypeError:字符串索引必须是整数这一行打印什么printpubsub_消息这一行的输出确实在括号之间打印完整的Stackdriver日志,函数名在前面:table delete test 123456880987{“insertId”:“-98765432123ml”,“logname”:“projects/tf my simple test”,“protoPayload”:{“@type”:“type.googleapis.com”}这里有更多内容,但本质上是一个庞大的字典。我已经用新代码更新了我的答案,这些代码将处理发布的JSON