又一个 E2E 解决方案交付。此次使用 CI/CD、AWS EventBridge 和 ECS Fargate
Source: Dev.to
我最近完成了一个个人项目,旨在为第三方系统自动化密码轮换流程。
该系统需要身份验证,但强制每月进行一次密码轮换。密码过期后,上传和下载会失败,迅速演变为运维问题。
为消除手动更新以及忘记更新的风险,我实现了端到端的自动化。
解决方案是一个使用 Selenium 与无头 Chromium 的 Python 工作器,按计划运行,并由完整的 CI/CD 流水线提供支持。每当向 main 分支推送代码时,GitHub Actions 通过 OIDC 假设 AWS IAM 角色,构建 Docker 镜像,将其推送到 Amazon ECR,并注册一个仅更新容器镜像的新 ECS 任务定义修订版。
Architecture design solution

CI/CD

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

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


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

Architecture decisions
-
Public subnet – 为简化和降低成本而选择。工作器只需要出站互联网访问,不对外暴露任何端口,只要安全组没有入站规则,就不存在额外风险。这也避免了私有子网所需的 NAT Gateway 的费用和复杂性。
-
ECS Fargate vs. Lambda – 在 Lambda 上运行带 Chromium 的 Selenium 通常需要自定义层并进行细致调优,且容易受到内存、包大小或执行时间限制的影响。使用 Fargate 时,整个环境都打包在 Docker 镜像中,提供可预测的运行时行为和灵活的 CPU/内存分配,使该工作负载更易于运维。
最终,这只是一个简单的批处理工作器:按计划运行,执行一次任务,然后退出。对于无头浏览器自动化,这种方式更直接、更可靠。