如何通过Terraform读取S3对象标签优化部署流程?
问题描述
我采用代码部署与基础设施部署分离的模式,当前通过以下方式上传包含代码sha256哈希的独立文件来实现部署:
data "archive_file" "source" { type = "zip" source_file = "../../code/lambda.py" output_path = "../../code/lambda.zip" } resource "local_file" "source_hash" { content = data.archive_file.source.output_base64sha256 filename = "../../code/source_code_hash" } resource "aws_s3_object" "file_upload" { bucket = "deployment_bucket" key = "deployment_folder/lambda.zip" source = data.archive_file.source.output_path tags = { sha256 = "${data.archive_file.source.output_base64sha256}" } } resource "aws_s3_object" "source_hash_upload" { bucket = "deployment_bucket" key = "deployment_folder/source_code_hash" source = resource.local_file.source_hash.filename }
这种方式可行,但我希望利用附加在S3对象上的标签,跳过本地文件的创建、上传及后续下载步骤。
我未找到关于通过Terraform读取S3对象标签的相关资料,是否可以实现如下类似配置?
data "aws_s3_object" "source_code" { bucket = "deployment_bucket" key = "deployment_folder/lambda.zip" } resource "aws_lambda_function" "relaysecret" { function_name = "lambda-function" s3_bucket = "deployment_bucket" s3_key = "deployment_folder/lambda.zip" source_code_hash = chomp(data.aws_s3_object.source_code.tag.sha256) }
解决方案
你给出的配置无法直接实现,因为Terraform的aws_s3_object数据源不会返回对象的标签信息。要读取S3对象的标签,需要使用专门的aws_s3_bucket_object_tagging数据源。
修改后的配置如下:
# 读取S3对象基本信息(可选,若不需要其他属性可省略) data "aws_s3_object" "source_code" { bucket = "deployment_bucket" key = "deployment_folder/lambda.zip" } # 读取该S3对象的标签 data "aws_s3_bucket_object_tagging" "source_code_tags" { bucket = data.aws_s3_object.source_code.bucket key = data.aws_s3_object.source_code.key } resource "aws_lambda_function" "relaysecret" { function_name = "lambda-function" s3_bucket = "deployment_bucket" s3_key = "deployment_folder/lambda.zip" # 从标签中获取sha256哈希,无需处理换行(标签值本身就是无换行的base64sha256) source_code_hash = data.aws_s3_bucket_object_tagging.source_code_tags.tags.sha256 }
关键说明:
aws_s3_bucket_object_tagging数据源专门用于获取S3对象的标签集合,返回的tags是一个键值对映射。- 不需要用
chomp函数,因为你上传标签时用的是data.archive_file.source.output_base64sha256,这个值本身没有换行符。 - 这种方式完全跳过了本地哈希文件的创建、上传和下载步骤,直接通过S3对象标签获取代码哈希,符合你部署分离的需求。
内容的提问来源于stack exchange,提问作者Serdalis
相关产品推荐
相关产品推荐

