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

Serverless Framework创建Glue Job无法使用本地路径的问题排查

关于Serverless Framework创建AWS Glue Job本地脚本路径问题的解答

核心原因:AWS Glue的原生要求,而非Serverless限制

AWS Glue Job的运行环境是AWS托管的,它无法直接访问你本地或Serverless部署包内的文件——所有执行脚本必须存储在S3上。Serverless Framework只是负责编排AWS资源,底层完全遵循Glue的规则,所以不是Serverless的限制。

两种可行解决思路:自动上传本地脚本到S3

不管用不用插件,核心都是让Serverless在部署阶段把本地脚本传到S3,再将Glue Job的脚本路径指向这个S3位置。下面是具体方案:

方案1:无需插件,手动配置CloudFormation资源

你可以直接在serverless.yml中定义S3桶(或复用Serverless自动创建的部署桶),并通过AWS::Glue::Job资源指定S3脚本路径:

service: glue-job-demo

provider:
  name: aws
  runtime: python3.9
  region: us-east-1

resources:
  Resources:
    # 可选:如果没有现成的S3桶,创建一个专门存Glue脚本
    GlueScriptBucket:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: my-glue-scripts-${self:provider.region}
    # 定义Glue Job
    MyETLJob:
      Type: AWS::Glue::Job
      Properties:
        Name: MyETLJob
        Role: !GetAtt GlueExecutionRole.Arn
        Command:
          Name: glueetl
          # 用自定义桶的路径,或者复用Serverless部署桶:s3://${ServerlessDeploymentBucket}/Glue_Jobs/my-script.py
          ScriptLocation: !Sub s3://${GlueScriptBucket}/Glue_Jobs/my-script.py
        WorkerType: G.1X
        NumberOfWorkers: 2
    # 定义Glue执行角色
    GlueExecutionRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Principal: { Service: glue.amazonaws.com }
              Action: sts:AssumeRole
        ManagedPolicyArns:
          - arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole

# 确保本地脚本被打包进Serverless部署包
package:
  include:
    - Glue_Jobs/**

部署后,Serverless会把Glue_Jobs下的文件上传到部署桶,你可以直接复用部署桶的路径,或者通过AWS CLI/控制台把脚本复制到自定义的Glue脚本桶。

方案2:正确配置serverless-glue插件

如果用serverless-glue插件失效,大概率是配置步骤遗漏或错误,以下是标准流程:

  1. 安装插件:
npm install serverless-glue --save-dev
  1. 在serverless.yml中正确配置插件和Glue Job:
service: glue-job-demo

provider:
  name: aws
  region: us-east-1

# 声明使用插件
plugins:
  - serverless-glue

# 配置Glue Job
custom:
  glue:
    jobs:
      MyETLJob:
        command:
          name: glueetl
          # 直接填本地脚本的相对路径,插件会自动上传到S3
          scriptLocation: Glue_Jobs/my-script.py
        role: !GetAtt GlueExecutionRole.Arn
        workerType: G.1X
        numberOfWorkers: 2
        # 可选:指定自定义S3桶存储脚本,不填则插件自动创建
        # scriptBucket: my-glue-scripts-${self:provider.region}

resources:
  Resources:
    GlueExecutionRole:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Principal: { Service: glue.amazonaws.com }
              Action: sts:AssumeRole
        ManagedPolicyArns:
          - arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole

如果插件还是不生效,排查以下几点:

  • 本地脚本路径是否正确,确保文件存在于项目目录中
  • 查看部署日志,检查插件是否有报错(比如S3上传权限不足)
  • 确认你的AWS账号拥有S3:PutObject、Glue:CreateJob等必要权限

总结

问题根源是AWS Glue的原生要求,而非Serverless Framework的限制。解决的核心是让部署流程自动将本地脚本同步到S3,你可以选择手动配置CloudFormation资源,或者通过正确配置serverless-glue插件来简化流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 06:40:21