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

如何在AWS SAM应用中自动构建含Python脚本的Glue Job部署包

SAM 内置Glue脚本自动打包实现方案

你需要的类Lambda的打包部署体验完全可以实现,无需在SAM外手动打包上传代码。可以按照以下方案配置:

方案1:原生自动打包(无额外依赖的单脚本场景)

SAM CLI 1.38.0及以上版本已经原生支持AWS::Glue::Job资源的脚本自动上传,无需额外配置:

  1. 把Glue Python脚本放在SAM项目目录内,比如./glue_scripts/etl_job.py
  2. 直接在模板的Glue Job配置中引用本地路径即可
Resources:
  # Glue作业执行角色,按需配置权限
  GlueJobRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Principal:
              Service: glue.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws-cn:iam::aws:policy/service-role/AWSGlueServiceRole

  MyETLJob:
    Type: AWS::Glue::Job
    Properties:
      Name: my-etl-job
      Role: !GetAtt GlueJobRole.Arn
      GlueVersion: "4.0"
      Command:
        Name: glueetl
        PythonVersion: "3"
        ScriptLocation: ./glue_scripts/etl_job.py # 直接写本地相对路径
      WorkerType: G.1X
      NumberOfWorkers: 2

执行sam build && sam deploy时,SAM会自动把本地脚本上传到部署桶,自动替换模板中的路径为对应S3地址。

方案2:类Lambda打包(有依赖、多文件场景)

如果你的Glue作业需要依赖第三方库、或者包含多个公共模块需要打包成zip,可以借助SAM对Lambda代码的打包能力实现完全一致的体验:

  1. 项目目录结构参考:
your-sam-project/
├── template.yaml
└── glue_scripts/
    ├── etl_job.py # 作业入口脚本
    ├── common_utils.py # 自定义公共模块
    └── requirements.txt # 第三方依赖声明
  1. 模板配置如下:
Resources:
  GlueJobRole:
    Type: AWS::IAM::Role
    Properties:
      # 同方案1的角色配置,省略重复内容
      
  # 借助Lambda打包逻辑处理Glue代码,不会实际部署Lambda函数
  GlueCodePackage:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./glue_scripts/
      Runtime: python3.10
      Handler: etl_job.lambda_handler # 随便填写即可,不会实际调用
    # 如果不需要安装依赖,添加下面的Metadata加快构建
    # Metadata:
    #   SkipBuild: True

  MyETLJob:
    Type: AWS::Glue::Job
    Properties:
      Name: my-etl-job
      Role: !GetAtt GlueJobRole.Arn
      GlueVersion: "4.0"
      Command:
        Name: glueetl
        PythonVersion: "3"
        # 引用打包后的zip包,#后面跟zip包内的入口脚本路径
        ScriptLocation: !Sub "s3://${GlueCodePackage.Code.S3Bucket}/${GlueCodePackage.Code.S3Key}#etl_job.py"
      WorkerType: G.1X
      NumberOfWorkers: 2

这种方案下,SAM会自动执行pip install -r requirements.txt安装依赖、打包成zip、上传到S3,每次代码变更执行sam deploy都会自动同步更新Glue作业的脚本,和Lambda的部署体验完全一致。

注意事项

  • 执行部署前无需提前手动打包代码、上传S3,所有流程都由SAM自动完成
  • 如果Glue作业需要访问其他AWS资源,记得给Glue执行角色添加对应的权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:45:04