Python 如何在谷歌云基础设施内通过电子邮件发送脚本结果(设计关于发布/订阅、电子邮件和其他选项的查询)

Python 如何在谷歌云基础设施内通过电子邮件发送脚本结果(设计关于发布/订阅、电子邮件和其他选项的查询),python,google-cloud-platform,google-cloud-functions,Python,Google Cloud Platform,Google Cloud Functions,这更多的是一个设计问题,即在谷歌云的基础设施中使用什么来获得Python脚本的结果 以下面的场景为例:我们有60多个项目和一个用于Stackdriver日志记录等的中心项目 正是在这个中心项目中,我想运行一个Python脚本(使用Cloud Scheduler,然后触发Cloud函数),以获取在过去24小时内未拍摄快照的磁盘列表、未分配给快照计划的磁盘列表以及名称与命名约定不符的快照计划列表。我已经准备好了脚本,它在我的工作站上运行得非常好(为每个项目生成一个所需结果的字典列表) 然而,我的问题

这更多的是一个设计问题,即在谷歌云的基础设施中使用什么来获得Python脚本的结果

以下面的场景为例:我们有60多个项目和一个用于Stackdriver日志记录等的中心项目

正是在这个中心项目中,我想运行一个Python脚本(使用Cloud Scheduler,然后触发Cloud函数),以获取在过去24小时内未拍摄快照的磁盘列表、未分配给快照计划的磁盘列表以及名称与命名约定不符的快照计划列表。我已经准备好了脚本,它在我的工作站上运行得非常好(为每个项目生成一个所需结果的字典列表)

然而,我的问题是:我应该将结果发送到哪里?那么,我怎样才能将一封电子邮件发送给适当的人来采取行动呢

我已经尝试过将对象属性发送到中心项目中的Pub/Sub,但这需要我手动拉取消息,我看不到任何安排拉取请求的方法。我也看不到从Pub/Sub向电子邮件地址发送电子邮件的选项,因此唯一的选项似乎是创建一个电子邮件云函数,当其中一个订阅收到来自第一个包含原始脚本的云函数的新消息时,该函数就会触发

我想我可以简单地在我们的一个Windows VM实例上设置它,并将脚本转换为PowerShell,但我希望尽可能不让它进入VM


以前有人这样做过吗?如果是这样,您使用了什么来获得所需的结果?

我认为您可以使用Sendgrid API从云功能发送电子邮件。设置起来很容易,它有一个免费计划,包括每月12000个,并且有一个Python:D的API

您可以使用选择免费计划注册

然后为代码创建一个API密钥。如果您只需要发送邮件,我建议您可以选择受限访问选项,并为邮件发送提供完全访问权限或您认为适合您的级别

下面是一段代码片段:

import logging
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail, Email
from python_http_client.exceptions import HTTPError

def send_mail(request):
    log = logging.getLogger(__name__)

    SENDGRID_API_KEY = 'SG.blahblahblah'
    sg = SendGridAPIClient(SENDGRID_API_KEY)


    """
    Maybe here goes the code you use to check what you need
    """


    APP_NAME = "Testing"

    html_content = f"""
    Here goes your mail body in HTML format
    """

    message = Mail(
        to_emails="dest@a.domain.com",
        from_email=Email('sender@your.domain.com', "Your name or your app name"),
        subject=f"Warning!!!!",
        html_content=html_content
        )

    try:
        response = sg.send(message)
        log.info(f"email.status_code={response.status_code}")
        return f'Your mail was sent!'
    except HTTPError as e:
        log.error(e)
不要忘记将
sendgrid
lib添加到
requirements.txt
文件中:

# Function dependencies, for example:
# package>=version
sendgrid

希望这能对您有所帮助。

我认为您可以使用Sendgrid API从云功能发送电子邮件。设置起来很容易,它有一个免费计划,包括每月12000个,并且有一个Python:D的API

您可以使用选择免费计划注册

然后为代码创建一个API密钥。如果您只需要发送邮件,我建议您可以选择受限访问选项,并为邮件发送提供完全访问权限或您认为适合您的级别

下面是一段代码片段:

import logging
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail, Email
from python_http_client.exceptions import HTTPError

def send_mail(request):
    log = logging.getLogger(__name__)

    SENDGRID_API_KEY = 'SG.blahblahblah'
    sg = SendGridAPIClient(SENDGRID_API_KEY)


    """
    Maybe here goes the code you use to check what you need
    """


    APP_NAME = "Testing"

    html_content = f"""
    Here goes your mail body in HTML format
    """

    message = Mail(
        to_emails="dest@a.domain.com",
        from_email=Email('sender@your.domain.com', "Your name or your app name"),
        subject=f"Warning!!!!",
        html_content=html_content
        )

    try:
        response = sg.send(message)
        log.info(f"email.status_code={response.status_code}")
        return f'Your mail was sent!'
    except HTTPError as e:
        log.error(e)
不要忘记将
sendgrid
lib添加到
requirements.txt
文件中:

# Function dependencies, for example:
# package>=version
sendgrid

希望这能对你有所帮助。

例如,你认为一个月内你会发送多少封电子邮件?@FernandoRV-粗略估计大约300-500封。例如,你认为一个月内你会发送多少封电子邮件?@FernandoRV-粗略估计大约300-500封。