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

如何通过AWS Lambda自动化执行AWS CloudShell中的Bash脚本?

自动化执行EKS相关Bash脚本的替代方案

CloudShell是交互式的浏览器/CLI环境,没有公开的API允许外部服务(比如Lambda)直接启动会话并执行脚本,所以你之前的Lambda调用CloudShell的思路不可行。以下是几个更合适的自动化方案:

方案1:用AWS Lambda直接执行脚本逻辑

Lambda可以直接配置权限访问EKS集群,无需依赖CloudShell,是最轻量化的serverless方案:

  • 配置IAM权限:给Lambda执行角色添加以下权限(根据脚本需求调整):
    • eks:DescribeCluster:用于获取EKS集群的kubeconfig
    • 对应K8s资源的操作权限(可通过IAM Roles for Service Accounts绑定K8s ClusterRole,或直接给Lambda角色附加K8s权限)
    • 如果脚本需要读取S3中的文件,添加s3:GetObject权限
  • 打包依赖(可选):如果脚本用到kubectl或eksctl,可以把这些工具打包成Lambda层,或者使用支持这些工具的自定义运行时。Lambda的Bash运行时(基于Amazon Linux 2)默认包含aws-cli,可以直接用aws eks update-kubeconfig配置集群访问
  • 编写Lambda代码:把原CloudShell脚本的逻辑迁移到Lambda中,比如用Bash运行时的示例代码:
#!/bin/bash
set -euo pipefail

# 配置kubectl访问目标EKS集群
aws eks update-kubeconfig --region ${AWS_REGION} --name your-eks-cluster-name

# 执行原脚本中的EKS操作,例如列出命名空间下的Pod
kubectl get pods -n your-namespace

# 其他自定义逻辑...
  • 触发方式:可以通过CloudWatch Events(定时触发)、API Gateway(手动/外部触发)、S3事件等方式触发Lambda执行

方案2:用AWS Systems Manager (SSM) 自动化执行

SSM的Automation或Run Command功能可以帮你在受控环境中执行脚本:

  • Automation文档:创建一个SSM自动化文档,定义下载脚本、配置kubectl、执行脚本的步骤(脚本可存储在S3中)
  • 示例自动化文档片段:
schemaVersion: '0.3'
assumeRole: '{{ AutomationAssumeRole }}'
parameters:
  ScriptS3Uri:
    type: String
    description: S3 URI of your bash script
  EksClusterName:
    type: String
    description: Name of target EKS cluster
mainSteps:
  - name: DownloadScript
    action: aws:s3GetObject
    inputs:
      Bucket: '{{ split(ScriptS3Uri, "/")[2] }}'
      Key: '{{ join(slice(split(ScriptS3Uri, "/"), 3), "/") }}'
      DestinationPath: /tmp/eks-script.sh
  - name: PrepareScript
    action: aws:executeShellScript
    inputs:
      RunCommand:
        - chmod +x /tmp/eks-script.sh
        - aws eks update-kubeconfig --region {{ AWS::Region }} --name {{ EksClusterName }}
  - name: RunEksScript
    action: aws:executeShellScript
    inputs:
      RunCommand:
        - /tmp/eks-script.sh
  • 触发执行:可以通过CloudWatch Events定时触发,或在SSM控制台手动执行,执行结果会自动记录在SSM中便于排查

方案3:用ECS Fargate任务一次性执行脚本

如果脚本依赖较多环境配置,可以用Fargate启动临时容器执行脚本,执行完成后自动销毁:

  • 创建任务定义:使用包含kubectl和aws-cli的镜像(比如Amazon Linux 2自定义镜像),配置任务执行角色拥有EKS访问权限
  • 定义任务命令:在任务定义中指定启动命令为执行你的脚本(脚本可打包进镜像或从S3下载)
  • 触发任务:通过CloudWatch Events、Lambda或CLI启动Fargate任务,无需长期运行服务器,成本可控

方案4:用EC2实例定时执行(适合复杂场景)

如果脚本需要持久化环境或依赖特殊工具,可以创建一个EC2实例:

  • 给EC2实例分配具有EKS访问权限的IAM角色
  • 把脚本放到实例中,用cron定时执行
  • 可选:用SSM Session Manager管理实例,无需开放公网端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:33:35