如何在云函数中的config.json文件中提及.csv和.json文件格式以触发DAG

时间:2019-10-30 16:54:05

标签: node.js google-cloud-platform google-cloud-functions airflow google-cloud-composer

文件被放置在云存储中时,我正在使用Cloud函数触发Airflow DAG。

它适用于.csv文件,但我的要求是,当将任何类型的文件(例如.json文件)放置到云存储中时,云功能应触发DAG。

我给了类似的配置

index.js:

  'use strict';

   const fetch = require('node-fetch');
    const FormData = require('form-data');

    var config = require('./config.json');

   exports.triggerGCSDag = function triggerGCSDag(data,context) {

   const PROJECT_ID = config.PROJECT_ID;
   const CLIENT_ID = config.CLIENT_ID;
   const WEBSERVER_ID = config.WEBSERVER_ID;

   const USER_AGENT =config.USER_AGENT;
   const BODY = {'conf': JSON.stringify(data)};
   const file = data;

   const file_format=config.file_format;  
   const folder_array=config.folder_name;
   const DAG_ARRAY=config.DAG_NAME; 
   .
   .
   .

但是只要将.json或csv文件放入云存储中,DAG不会触发。

请帮助我设置config.json文件格式csv和json,以便cf触发Airflow DAG

1 个答案:

答案 0 :(得分:0)

您可以将事件finalize用作函数的触发器,然后可以使用触发器数据来确定上传的文件是.csv还是.json或任何其他类型的文件。您可以在Storage Triggers documentation中查看如何使用触发数据。

您可以使用此功能作为示例。

如果文件具有所需的扩展名,则此函数以“ goog”响应,如果具有任何其他扩展名,则以“ not goog”作为响应。您可以在函数的日志中找到响应。

现在,您只需要添加逻辑来触发条件内的气流。

  exports.helloGCS = (data, context) => {
  const file = data;
  console.log(`File: ${file.name}`);
  if(file.name.includes('.csv') || file.name.includes('.json')){
  console.log('goog');
  } else {
   console.log('not goog');
  }
  };