Как создать уведомление по электронной почте об изменениях в файлах в хранилище

#google-cloud-platform #notifications #google-cloud-storage

#google-cloud-platform #уведомления #google-облачное хранилище

Вопрос:

Как я могу создавать уведомления по электронной почте на адрес электронной почты (john.citizen@gmail.com ) (при внесении изменений в файлы в хранилище, т.Е. При добавлении, перезаписи или сбое обновления нового файла? Я только начинаю с GCP.

Ответ №1:

В GCP нет «почты мне», когда что-то меняется в облачном хранилище, но вы можете получать уведомления в своем приложении и отправлять оттуда электронное письмо.

Это можно сделать двумя способами:

У Google также есть руководство по отправке писем.

Есть крайний случай, который может оказаться полезным:

Если

  • объем очень низкий и
  • создание / обновление / удаление файлов происходит один за другим и
  • вам все равно, какой файл был изменен / создан / обновлен и
  • потеря уведомления не критична

Тогда вы могли бы:

  • Настройте очередь pubsub с низким уровнем хранения (<5 минут).
  • Настройте оповещение, когда в очереди более одного сообщения.
  • И Google отправит вам электронное письмо, когда это произойдет.

Ответ №2:

 #Only change dataset name

def process_request(event, context):
    try:
    
        # Change the bigquery_dataset Name according to what you have created.
        bigquery_dataset_name = 'Your dataset name'

        # Don't Change Anything from here on.
        # When creating the function trigger type event = storage bucket

        source_bucket_name = event['bucket']
        blob_name = event['name']
        # call function to notify bucket updates
       #send_text_message_to_teams("{} has been received in {}".format(blob_name, source_bucket_name))
        storage_client = storage.Client()
        bigquery_client = bigquery.Client()
        source_bucket = storage_client.bucket(source_bucket_name) 
        source_blob = source_bucket.blob(blob_name)
        
        #check if file type is csv the define job_config,uri, filename, tablename and table id AND then load the job
        if source_blob.name.split('.')[-1] == 'csv':
            job_config = bigquery.LoadJobConfig(
                    skip_leading_rows=1,
                    autodetect=True,
                    source_format=bigquery.SourceFormat.CSV,
                    write_disposition=bigquery.WriteDisposition.WRITE_TRUNCATE)
            uri = 'gs://{}/{}'.format(source_bucket_name, source_blob.name)
            file_name = '.'.join(source_blob.name.split('/')[-1].split('.')[0:-1])
            table_name = ''.join([character if character.isalnum() else '_' for character in file_name])
            table_id = '{}.{}.{}'.format(bigquery_client.project, bigquery_dataset_name, table_name)
            print('Trasferring {} into {}'.format(source_blob.name, table_id))
            
        #load job using details above   
            load_job = bigquery_client.load_table_from_uri(uri, table_id, job_config=job_config)
            load_job.result()
            print("table updated")
            print('{} has been processed.'.format(source_blob.name))
            # call function to notify table updates
            #send_text_message_to_teams("{} has been updated".format(table_id))
        else:
            print('{} is not a csv.'.format(source_blob.name))
    except Exception as e:
         # call function to notify failures
         #send_text_message_to_teams("function-uploadcsv has encoutered an issue. The details are {}".format(e))