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

EKS集群结合Step Functions调用Pod遇EKS.401错误的解决求助

问题描述

已创建名为Python-Cluster的EKS集群(含2节点节点组),将指定Python代码打包为python-img:latest镜像后,通过Deployment和Service完成部署。尝试通过Step Functions的arn:aws:states:::eks:runJob.sync任务调用EKS Job传递输入时,触发EKS.401错误,已为Step Functions配置管理员权限并添加IAM角色,问题仍未解决。

解决步骤

1. 确认EKS集群的aws-auth ConfigMap配置

EKS集群需要显式允许Step Functions的执行角色访问,需检查并更新aws-auth ConfigMap:

  • 执行命令编辑ConfigMap:
    kubectl edit configmap aws-auth -n kube-system
    
  • 在mapRoles数组中添加Step Functions执行角色的ARN,示例配置:
    mapRoles:
      - rolearn: arn:aws:iam::你的AWS账号ID:role/你的StepFunctions执行角色名
        username: stepfunctions-exec-role
        groups:
          - system:masters
    
    保存退出后,等待权限同步生效。

2. 修正Step Functions状态机的Job配置

状态机中的Job定义存在两处关键错误,需调整:

  • 镜像名称错误:原配置使用了Pod名称python-7f7c9cdbc6-fvtvl,应替换为实际镜像名python-img:latest
  • 命令与输入传递缺失:原命令仅指定python,未指定要执行的脚本,也未传递Step Functions的输入参数
  • 修正后的Job配置示例:
    "Job": {
      "apiVersion": "batch/v1",
      "kind": "Job",
      "metadata": {
        "name": "my-example-job"
      },
      "spec": {
        "template": {
          "metadata": {
            "name": "my-example-job"
          },
          "spec": {
            "containers": [
              {
                "name": "python-job",
                "image": "python-img:latest",
                "command": ["python", "/app/main.py"],
                "env": [
                  {
                    "name": "INPUT_PAYLOAD",
                    "value.$": "$.Payload.Input"
                  }
                ]
              }
            ],
            "restartPolicy": "Never"
          }
        }
      }
    }
    
    同时需调整Python代码以读取环境变量传递的输入,示例修改代码:
    import json
    import os
    
    response = {}
    def main():
        user_input = json.loads(os.getenv("INPUT_PAYLOAD", '"Invoke"'))
        
        if user_input == 'Invoke':
            response['Output'] = "Invoked"
            response['Message'] = "First Job invoked based on the input"
            print(json.dumps(response))
    
    if __name__ == "__main__":
        main()
    

3. 验证Step Functions执行角色的信任关系

确认角色的信任策略允许Step Functions服务扮演该角色:

  • 进入IAM控制台,找到Step Functions执行角色,检查信任策略是否包含:
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": "states.amazonaws.com"
          },
          "Action": "sts:AssumeRole"
        }
      ]
    }
    

4. 校验EKS集群Endpoint与CertificateAuthority

通过AWS CLI命令验证状态机中填写的Endpoint和证书是否正确:

aws eks describe-cluster --name Python-Cluster --query 'cluster.{Endpoint: endpoint, CertificateAuthority: certificateAuthority.data}' --output json

将输出结果与状态机中的配置对比,确保完全一致,避免复制时出现字符遗漏或错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:40:20