在AWS或GCP环境中调度Unix Shell脚本的可行方案咨询
AWS环境可选方案
AWS EventBridge + AWS Lambda
用EventBridge创建每30分钟触发的定时规则,将Lambda作为执行目标。Lambda可采用自定义运行时(如Amazon Linux 2),打包你的Shell脚本及kubectl、mysql-client等依赖,也可通过Lambda层统一管理依赖文件。需为Lambda配置IAM角色,赋予EKS集群访问权限、RDS MySQL访问权限(若RDS在VPC内,需将Lambda部署至对应VPC网络)。优势是无需管理服务器实例,按执行时长计费,自带日志与监控能力。Amazon EKS CronJobs
在你的EKS集群中定义Kubernetes CronJob资源,指定每30分钟执行一次,触发运行脚本的Pod。可基于预装kubectl、AWS CLI、mysql-client的镜像构建Pod,Pod内的kubectl默认可直接访问集群API。需为Pod的ServiceAccount绑定IAM角色,确保其能访问RDS(同VPC环境下需保障网络连通性)。优势是与EKS原生集成,无需额外外部资源。AWS Batch
创建Batch作业队列,通过EventBridge定时触发Batch任务,Batch会自动管理计算资源(可选Fargate或EC2实例)运行你的脚本。需将脚本打包为Docker镜像提交至Batch,配置Compute Environment(选Fargate无需自行维护实例)。适合资源密集型任务,支持自动扩缩容,按任务执行量计费。
GCP环境可选方案
Cloud Scheduler + Cloud Functions/Cloud Run
用Cloud Scheduler设置每30分钟的定时作业,触发Cloud Functions(可通过subprocess调用Shell脚本,或使用自定义运行时)或Cloud Run服务(运行包含脚本的Docker容器)。需为Functions/Cloud Run配置IAM权限,允许访问GKE集群及Cloud SQL(若Cloud SQL在VPC内,需配置Cloud Run的VPC访问能力)。优势是Serverless架构,无需维护服务器,集成GCP监控与日志系统。GKE CronJobs
在GKE集群中创建Kubernetes CronJob,定时启动Pod执行脚本。Pod可通过Cloud SQL Auth Proxy连接Cloud SQL,或利用VPC网络直接访问数据库。为Pod的ServiceAccount绑定IAM角色,获取必要的GKE及Cloud SQL访问权限。优势是与GKE原生集成,网络连通性配置便捷。Compute Engine Managed Instance Groups + Cron
构建包含Cron任务、脚本依赖(kubectl、gcloud、mysql-client)的GCE实例模板,创建托管实例组(MIG)。MIG会自动替换故障实例,保障任务持续运行。需为实例配置服务账户,赋予GKE及Cloud SQL访问权限。类似EC2 Cron方案,但具备高可用性自动修复能力。
内容的提问来源于stack exchange,提问作者Santosh Kumar Sahoo

