如何通过terraform apply同步更新AWS Glue Job的源代码?
解决Terraform部署AWS Glue Job时源代码不更新的问题
问题原因
aws_s3_bucket_object默认仅检查文件是否存在,不会检测本地脚本的内容变化,导致脚本修改后Terraform不会重新上传至S3。- 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
相关产品推荐
相关产品推荐

