You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在AWS中自动化Python脚本:日志邮件与HubSpot上传

可行AWS部署与自动化方案

一、前期准备

  • 整理所有Python脚本的依赖到requirements.txt(例如psycopg2-binary、requests、boto3等)
  • 将数据库密码、HubSpot Token、邮箱配置等敏感信息存入AWS Secrets Manager,彻底移除代码中的硬编码内容

二、脚本适配AWS环境

1. 日志输出调整

替换本地文件日志逻辑,改为输出到CloudWatch Logs(Lambda默认支持),同时可将日志上传至S3以便后续发邮件:

import boto3
s3 = boto3.client('s3')

# 日志上传到S3的工具函数
def upload_log_to_s3(log_content, filename):
    s3.put_object(
        Bucket='your-log-storage-bucket',
        Key=f'logs/{filename}',
        Body=log_content.encode('utf-8')
    )

2. 敏感信息读取

从Secrets Manager拉取数据库与API凭证:

import boto3
import json

def get_secret():
    secret_name = "your-secret-name"
    region_name = "your-aws-region"
    
    session = boto3.session.Session()
    client = session.client(service_name='secretsmanager', region_name=region_name)
    secret_str = client.get_secret_value(SecretId=secret_name)['SecretString']
    return json.loads(secret_str)

# 在DB_conn方法中使用
secret = get_secret()
self.connection = psycopg2.connect(
    host=secret['db_host'],
    database=secret['db_name'],
    user=secret['db_user'],
    password=secret['db_password'],
    port=secret['db_port']
)

# HubSpot Token调用示例
headers = {
    'Authorization': f"Bearer {secret['hubspot_token']}",
    'Accept': 'application/json',
    'Content-Type': 'application/json'
}

3. script2的JSON文件处理

Lambda仅支持/tmp目录作为临时存储,修改JSON生成路径:

now = datetime.datetime.now()
filename = f"/tmp/User_data_file_{now.strftime('%Y-%m-%d--%H-%M-%S')}.json"
with open(filename, 'w+') as f:
    json.dump(json_stri, f, indent=4, default=str)

三、部署脚本到Lambda

  1. 代码打包:将脚本、requirements.txt打包为zip包(建议在Linux环境打包,确保psycopg2等依赖适配Lambda运行时)
  2. 创建Lambda函数:选择Python 3.x运行时,上传zip包,配置执行角色(需包含S3、Secrets Manager、SES、CloudWatch Logs的操作权限)
  3. 测试函数:验证每个脚本能正常运行并生成日志/JSON文件

四、script2每周定时执行配置

使用Amazon EventBridge(原CloudWatch Events)创建定时规则:

  • 规则类型选择「Schedule」
  • 配置Cron表达式:例如每周一凌晨2点执行(UTC时间),表达式为0 2 ? * MON *(需根据本地时区调整)
  • 目标选择script2对应的Lambda函数

五、日志自动发送邮件

基于Amazon SES实现,推荐两种方式:

方式1:脚本执行完成后触发邮件

在每个Lambda脚本末尾添加邮件发送逻辑:

import boto3
from botocore.exceptions import ClientError

def send_log_email(log_filename, recipient_email):
    ses = boto3.client('ses', region_name='your-aws-region')
    # 从S3读取日志内容
    log_obj = s3.get_object(Bucket='your-log-storage-bucket', Key=f'logs/{log_filename}')
    log_content = log_obj['Body'].read().decode('utf-8')
    
    try:
        ses.send_email(
            Source='your-verified-sender@example.com',
            Destination={'ToAddresses': [recipient_email]},
            Message={
                'Subject': {'Data': f"脚本执行日志 - {log_filename}"},
                'Body': {'Text': {'Data': log_content}}
            }
        )
    except ClientError as e:
        print(e.response['Error']['Message'])
    else:
        print(f"邮件发送成功,消息ID:{response['MessageId']}")

方式2:CloudWatch日志触发邮件

创建CloudWatch Logs订阅过滤器,当有新日志生成时触发Lambda发送邮件,适合实时监控脚本运行状态。

六、关键权限配置

Lambda执行角色需附加以下权限策略(建议最小权限原则,避免全量权限):

  • S3:指定日志桶的读写权限
  • Secrets Manager:敏感信息的只读权限
  • SES:指定邮箱的发送权限
  • CloudWatch Logs:日志写入权限

额外优化建议

  • 给Lambda配置足够的内存与超时时间(例如1024MB内存、5分钟超时),避免脚本因运行时间过长被终止
  • 给S3日志桶设置生命周期规则,自动删除30天以上的旧日志
  • 给EventBridge规则配置CloudWatch告警,当script2未按时执行时触发通知

内容的提问来源于stack exchange,提问作者lAkShMipythonlearner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:15:41