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

如何通过terraform apply同步更新AWS Glue Job的源代码?

解决Terraform部署AWS Glue Job时源代码不更新的问题

问题原因

  1. aws_s3_bucket_object 默认仅检查文件是否存在,不会检测本地脚本的内容变化,导致脚本修改后Terraform不会重新上传至S3。
  2. AWS Glue Job的script_location仅指向S3路径,S3文件更新后,Glue Job的配置本身无变化,Terraform不会触发Glue Job的更新操作(尽管Glue Job运行时会读取S3最新脚本,但无法通过Terraform确认脚本已同步)。

解决方案

步骤1:让Terraform检测脚本内容变化,自动更新S3文件

在aws_s3_bucket_object资源中添加source_hash参数,基于本地脚本的内容生成哈希值。当脚本内容修改时,哈希值变化,Terraform会自动重新上传文件至S3。

修改后的aws_s3_bucket_object配置:

resource "aws_s3_bucket_object" "upload-glue-script" {
  bucket      = var.bucket-name
  key         = "scripts/${var.file-name}"
  source      = var.file-name
  source_hash = filebase64sha256(var.file-name) # 新增此行,检测文件内容变化
}

步骤2:让Glue Job关联S3脚本的变化(可选但推荐)

为了让Terraform在脚本更新时同步标记Glue Job为已更新,可以将S3对象的哈希值注入到Glue Job的某个属性中(比如标签),这样当哈希变化时,Glue Job的配置会被触发更新,确保操作链路完整。

修改后的aws_glue_job配置:

resource "aws_glue_job" "glue-job" {
  name        = var.job-name
  role_arn    = var.glue-role-arn
  description = "This is script to create large files from small files "
  max_retries = 1
  timeout     = 2880
  command {
    script_location = "s3://${var.bucket-name}/scripts/${var.file-name}"
    python_version  = "3"
  }
  execution_property {
    max_concurrent_runs = 2
  }
  glue_version = "4.0"
  
  # 新增标签关联脚本哈希,触发Glue Job更新
  tags = {
    ScriptContentHash = aws_s3_bucket_object.upload-glue-script.source_hash
  }
}

补充说明

  • 添加source_hash后,每次本地脚本修改,terraform apply都会自动重新上传最新脚本到S3。
  • 即使不修改Glue Job的配置,Glue Job下次运行时也会读取S3中的最新脚本,但添加标签关联哈希后,Terraform会明确标记Glue Job已更新,便于跟踪配置变化。
  • 若你的S3桶启用了版本控制,旧版本的脚本会被保留,可按需管理版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:54:56