#google-cloud-platform #notifications #google-cloud-storage
#google-cloud-platform #уведомления #google-облачное хранилище
Вопрос:
Как я могу создавать уведомления по электронной почте на адрес электронной почты (john.citizen@gmail.com ) (при внесении изменений в файлы в хранилище, т.Е. При добавлении, перезаписи или сбое обновления нового файла? Я только начинаю с GCP.
Ответ №1:
В GCP нет «почты мне», когда что-то меняется в облачном хранилище, но вы можете получать уведомления в своем приложении и отправлять оттуда электронное письмо.
Это можно сделать двумя способами:
-
Уведомления об изменении объекта отправят сообщение HTTP в ваше приложение.
-
Уведомления о пабе / дополнительном хранилище (рекомендовано Google). — При создании, изменении или удалении файла публикуется сообщение pub / sub. Pubsub может отправлять HTTP-сообщения, запускать облачные функции, запускать облачный запуск (как функции, но с настройками) или опрашиваться.
У 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))