又一个 E2E 解决方案交付。此次使用 CI/CD、AWS EventBridge 和 ECS Fargate

发布: (2026年3月10日 GMT+8 09:17)
3 分钟阅读
原文: Dev.to

Source: Dev.to

我最近完成了一个个人项目,旨在为第三方系统自动化密码轮换流程。
该系统需要身份验证,但强制每月进行一次密码轮换。密码过期后,上传和下载会失败,迅速演变为运维问题。

为消除手动更新以及忘记更新的风险,我实现了端到端的自动化。

解决方案是一个使用 Selenium 与无头 Chromium 的 Python 工作器,按计划运行,并由完整的 CI/CD 流水线提供支持。每当向 main 分支推送代码时,GitHub Actions 通过 OIDC 假设 AWS IAM 角色,构建 Docker 镜像,将其推送到 Amazon ECR,并注册一个仅更新容器镜像的新 ECS 任务定义修订版。

Architecture design solution

Architecture diagram

CI/CD

CI/CD pipeline diagram

Execution (EventBridge)

执行由 Amazon EventBridge 处理,它每 29 天触发一次任务。

EventBridge schedule diagram

ECS Cluster

任务在公共子网中的 ECS Fargate 上运行,拥有公共 IP 并允许出站流量。

ECS cluster overview

Task definition details

触发后,Fargate 启动容器,运行 automation.py,启动带 Chromium 和 Chromedriver 的 Selenium,登录系统,执行密码轮换,然后退出。成功时任务以退出码 0 结束。如果出现异常,日志会发送到 CloudWatch,错误会报告到 Slack 警报频道。

Task execution logs

Architecture decisions

  • Public subnet – 为简化和降低成本而选择。工作器只需要出站互联网访问,不对外暴露任何端口,只要安全组没有入站规则,就不存在额外风险。这也避免了私有子网所需的 NAT Gateway 的费用和复杂性。

  • ECS Fargate vs. Lambda – 在 Lambda 上运行带 Chromium 的 Selenium 通常需要自定义层并进行细致调优,且容易受到内存、包大小或执行时间限制的影响。使用 Fargate 时,整个环境都打包在 Docker 镜像中,提供可预测的运行时行为和灵活的 CPU/内存分配,使该工作负载更易于运维。

最终,这只是一个简单的批处理工作器:按计划运行,执行一次任务,然后退出。对于无头浏览器自动化,这种方式更直接、更可靠。

0 浏览
Back to Blog

相关文章

阅读更多 »