GCP Cloud Storage (GCS) новый объект / изменяет уведомления на электронную почту / текст, сообщение - PullRequest
0 голосов
/ 08 ноября 2018

Мы храним некоторые из наших дампов SQL из AWS RDS в облачное хранилище GCP в качестве долгосрочной вторичной резервной копии. За последние четыре дня данные не были перенесены в GCP, и в результате анализа мы выяснили, что это произошло из-за изменений в летнее время. и исправил проблему.

Теперь в будущем мы хотели бы получить уведомление от GCP по электронной почте / текстовое сообщение - положительный сценарий / обязанность пейджера - отрицательный сценарий (только электронная почта в настоящее время). Положительным сценарием для отправки по электронной почте является успешная загрузка нового файла в корзину GCS. Но так как Google не имеет никакой встроенной поддержки по электронной почте или тексту, пожалуйста, предложите нам решение. Я настроил следующее

  1. Сконфигурировано ведро для уведомления об изменениях в sub sub https://cloud.google.com/storage/docs/reporting-changes

  2. Настроил паб / суб-уведомление как тип доставки по запросу https://cloud.google.com/storage/docs/pubsub-notifications

Но теперь, как мне отправить электронное письмо / текст из GCP. Мы - главный магазин AWS. Можем ли мы использовать SES или SNS или любой другой тип уведомления для получения данных из PUB / SUB.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018
  1. Мы можем сконфигурировать корзину GCS для непосредственного запуска облачных функций для следующих изменений в корзине GCS.
    1. Завершить - Создать
    2. Удалить
    3. Архив
    4. Обновление метаданных

Учебник: https://cloud.google.com/functions/docs/tutorials/storage

  1. Облачная функция с python 3.7 для запуска электронной почты с использованием интерфейса Amazon SES SMTP.

    import smtplib
    import email.utils
    from email.mime.multipart import MIMEMultipart
    from email.mime.text import MIMEText
    
    def email_notify(event, context):
        """Triggered by a change to a Cloud Storage bucket.
        Args:
        event (dict): Event payload.
        context (google.cloud.functions.Context): Metadata for the event.
        """
        file = event
        print(f"Processing file: {file['name']}.")
        BUCKET = file['bucket']
        FILE = file['name']
        CREATED = file['timeCreated']
        UPDATED = file['updated']
        # Replace sender@example.com with your "From" address.
        # This address must be verified.
        SENDER = 'sender-email-address'  
        SENDERNAME = 'no-reply'
    
        # Replace recipient@example.com with a "To" address. If your account
        # is still in the sandbox, this address must be verified.
        RECIPIENT  = 'recepient-email-address'
    
        # Replace smtp_username with your Amazon SES SMTP user name.
        USERNAME_SMTP = "SMTP-USERNAME"
    
        # Replace smtp_password with your Amazon SES SMTP password.
        PASSWORD_SMTP = "SMTP-PASSWORD"
    
        # (Optional) the name of a configuration set to use for this message.
        # If you comment out this line, you also need to remove or comment out
        # the "X-SES-CONFIGURATION-SET:" header below.
        # CONFIGURATION_SET = "ConfigSet"
    
        # If you're using Amazon SES in an AWS Region other than US West (Oregon),
        # replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP
        # endpoint in the appropriate region.
        HOST = "email-smtp.us-west-2.amazonaws.com"
        PORT = 587
    
        # The subject line of the email.
        SUBJECT = 'Successfull upload of file {} to GCS bucket {}'.format(FILE,BUCKET)
    
        # The email body for recipients with non-HTML email clients.
        BODY_TEXT = ("File upload to GCS bucket\r\n"
                     "Bucket-Name: {}\r\n"
                     "File-Name: {}\r\n"
                     "File-Create-Date: {}\r\n"
                     "File-Update-Date: {}\r\n"
                    ).format(BUCKET,FILE,CREATED,UPDATED)
    
        # Create message container - the correct MIME type is multipart/alternative.
        msg = MIMEMultipart('alternative')
        msg['Subject'] = SUBJECT
        msg['From'] = email.utils.formataddr((SENDERNAME, SENDER))
        msg['To'] = RECIPIENT
        # Comment or delete the next line if you are not using a configuration set
        # msg.add_header('X-SES-CONFIGURATION-SET',CONFIGURATION_SET)
    
        # Record the MIME types of both parts - text/plain and text/html.
        part1 = MIMEText(BODY_TEXT, 'plain')
        # part2 = MIMEText(BODY_HTML, 'html')
    
        # Attach parts into message container.
        # According to RFC 2046, the last part of a multipart message, in this case
        # the HTML message, is best and preferred.
        msg.attach(part1)
        # msg.attach(part2)
    
        # Try to send the message.
        try:
            server = smtplib.SMTP(HOST, PORT)
            server.ehlo()
            server.starttls()
            #stmplib docs recommend calling ehlo() before & after starttls()
            server.ehlo()
            server.login(USERNAME_SMTP, PASSWORD_SMTP)
            server.sendmail(SENDER, RECIPIENT, msg.as_string())
            server.close()
        # Display an error message if something goes wrong.
        except Exception as e:
            print ("Error: ", e)
        else:
            print ("Email sent!")
    
0 голосов
/ 09 ноября 2018

Можем ли мы использовать SES или SNS или любой другой тип уведомления для получения данные вне PUB / SUB?

Да. Я сделал это (SES), используя Google Cloud Functions с триггером Pub / Sub. Я предполагаю, что SNS будет так же просто.

Однако я считаю, что гораздо проще настроить облачные функции Google на использование SMTP-клиента для отключения электронной почты. Я также использовал Twilio для отключения SMS-сообщений.

Чтобы использовать AWS SNS или SES, вам необходимо упаковать библиотеки boto3 с вашим развертыванием и вашими учетными данными AWS. Вы также можете использовать интерфейс AWS REST, чтобы не требовались внешние библиотеки.

Для почтового SMTP-клиента в Google Cloud Functions включена smtplib, так что это очень простой путь. Вам просто нужно имя пользователя электронной почты и пароль для SMTP. Для этого я использую учетные данные Gmail или Office 365. 20 строк кода на Python и все готово.

[EDIT]

При использовании облачных функций Google для отправки электронной почты используйте SSL для транспорта. Для Office 365 и Gmail этот порт 587. Не пытайтесь использовать порт 25, который не использует SSL, так как почти все блокируют порт 25.

...