【问题标题】:Google cloud functions - cannot read property 'getApplicationDefault'谷歌云功能 - 无法读取属性“getApplicationDefault”
【发布时间】:2018-08-27 03:25:30
【问题描述】:

我已经部署了一个云函数来调用数据流管道模板并尝试通过将文件放在云存储桶中来触发该函数。

作为node.js的先决条件我已经完成了,

npm init
npm install --save googleapis

索引.js

const google = require('googleapis');

exports.goWithTheDataFlow = function(event, callback) {
 const file = event.data;



   google.auth.getApplicationDefault(function (err, authClient, projectId) {
     if (err) {
       throw err;
     }

 console.log(projectId);
     if (authClient.createScopedRequired && authClient.createScopedRequired()) {
       authClient = authClient.createScoped([
         'https://www.googleapis.com/auth/cloud-platform',
         'https://www.googleapis.com/auth/userinfo.email'
       ]);
     }

     const dataflow = google.dataflow({ version: 'v1b3', auth: authClient });
            console.log(`gs://${file.bucket}/${file.name}`);
     dataflow.projects.templates.create({
       projectId: projectId,
       resource: {
         parameters: {
           inputFile: `gs://${file.bucket}/${file.name}`

         },
         jobName: 'cloud-fn-dataflow-test',
         gcsPath: 'gs://jaison/templates/ApacheBeamTemplate'
       }
     }, function(err, response) {
       if (err) {
         console.error("problem running dataflow template, error was: ", err);
       }
       console.log("Dataflow template response: ", response);
       callback();
     });

   });

 callback();
};

用于部署云功能的命令:

gcloud beta functions deploy goWithTheDataFlow --stage-bucket cf100stage --trigger-bucket cf100

数据流(Apache 梁): 我能够从控制台执行数据流模板,下面是模板的路径,

'gs://jaison/templates/ApacheBeamTemplate'

函数崩溃并出现以下错误:

TypeError:无法读取未定义的属性“getApplicationDefault” 在exports.goWithTheDataFlow (/user_code/index.js:11:17) 在 /var/tmp/worker/worker.js:695:16 在 /var/tmp/worker/worker.js:660:9 在 _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickDomainCallback (internal/process/next_tick.js:128:9)

看起来我缺少库。不知道如何解决这个问题。请帮忙。

【问题讨论】:

    标签: google-cloud-functions google-cloud-dataflow google-api-nodejs-client


    【解决方案1】:

    我的云功能适用于以下更改,

    1.将GOOGLE_APPLICATION_CREDENTIALS设置为服务帐号json文件

    export GOOGLE_APPLICATION_CREDENTIALS="/path/of/svc/json/file.json"
    

    2.index.js

    var {google} = require('googleapis');
    
    exports.TriggerBeam = (event, callback) => {
    
    
    const file = event.data;
      const context = event.context;
    
      console.log(`Event ${context.eventId}`);
      console.log(`  Event Type: ${context.eventType}`);
      console.log(`  Bucket: ${file.bucket}`);
      console.log(`  File: ${file.name}`);
      console.log(`  Metageneration: ${file.metageneration}`);
      console.log(`  Created: ${file.timeCreated}`);
      console.log(`  Updated: ${file.updated}`);
    
      google.auth.getApplicationDefault(function (err, authClient, projectId) {
         if (err) {
           throw err;
         }
    
     console.log(projectId);
    
     const dataflow = google.dataflow({ version: 'v1b3', auth: authClient });
            console.log(`gs://${file.bucket}/${file.name}`);
     dataflow.projects.templates.create({
       projectId: projectId,
       resource: {
         parameters: {
           inputFile: `gs://${file.bucket}/${file.name}`
    
         },
         jobName: 'cloud-fn-beam-test',
         gcsPath: 'gs://jaison/templates/ApacheBeamTemplate'
       }
     }, function(err, response) {
       if (err) {
         console.error("problem running dataflow template, error was: ", err);
       }
       console.log("Dataflow template response: ", response);
       callback();
     });
    
       });
    
     callback();
    };
    

    【讨论】:

    • 不,这对我不起作用。是否只是在使用 gcloud 部署功能时添加了导出?如果我使用 UI 安装会怎样?
    • 不仅仅是导出语句。你也必须修改你的 index.js 文件。
    • 嗨@Vetri,这对你还有效吗? porjectId 对我来说是未定义的,如果我明确设置它,我会得到一个 TypeError: authClient.request is not a function both in the emulator and production
    • @garcianavalon 是的。这个对我有用。此代码取决于默认凭据。请检查您的配置。
    • @Vetri 感谢您的回答!在解决了几个问题后,我设法使我的功能正常工作。作为记录,如果云功能模拟器配置正确,我不需要导出 env 变量
    猜你喜欢
    • 2017-08-15
    • 2021-02-26
    • 1970-01-01
    • 2017-11-14
    • 2018-12-05
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多