强制 Terraform 每次都应用新的状态文件 - S3 文件上传场景
Posted
技术标签:
【中文标题】强制 Terraform 每次都应用新的状态文件 - S3 文件上传场景【英文标题】:Enforce Terraform to apply new state file every time - S3 File Upload scenario 【发布时间】:2021-12-06 20:14:21 【问题描述】:如果问题违反了 Terraform 通常执行的协议,请原谅我。
我想出了一个实用程序,可以使用 Terraform 在 S3 存储桶中上传文件。它在上传文件时工作正常。
当我尝试再次上传一个新文件时,问题就出现了,而前一个文件被删除了。 Terraform 计划会比较现有的内容和正在应用的内容,并删除之前上传的文件。
有没有办法在 Terraform 中使用状态管理来解决这个问题?
这是我创建的用于将文件/对象上传到存储桶的简单资源
resource "aws_s3_bucket_object" "s3_automation_upload1"
bucket = ""
key = ""
source = ""
kms_key_id = ""
第 1 步
resource "aws_s3_bucket_object" "s3_automation_upload1"
bucket = "bucket1"
key = "folder1/"
source = "File1.txt"
kms_key_id = ""
file1.txt 上传到 bucket1 下的“folder1”
第 2 步 - 再次应用 Terraform
resource "aws_s3_bucket_object" "s3_automation_upload1"
bucket = "bucket1"
key = "folder1/"
source = "File2.txt"
kms_key_id = ""
现在 File2.txt 已上传,但由于有新的状态变化,Terraform 删除了 File1.txt。
应该怎么做才能保留File1.txt,只添加File2.txt
【问题讨论】:
抱歉,不清楚你想达到什么目的。你覆盖TF上传的文件,然后TF用旧版本替换文件? 是的 Terraform 好像要替换文件。让我详细更新问题本身的场景 使用 Terraform 上传文件的实用程序不是一个好主意。这不是 Terraform 的设计目的,因此您会看到问题。 AWS CLI 工具和所有 AWS 开发工具包已经存在。为什么需要使用 Terraform 执行此操作? @MarkB 我们无法直接控制使用 AWS GUI 添加。因此采取了 Terraform 路线。作为具有在组织中的 S3 中上传/下载/删除对象的角色的用户,我们没有独占权限 我在评论中列出的更好的东西都没有利用 AWS GUI。 Terraform 是一个很棒的工具,但它用于配置云资源,其中一小部分能够在配置资源时将一些文件复制到 S3。它不是像您一样构建 S3 文件复制实用程序的正确工具。 AWS CLI 或 AWS 开发工具包之一更合适。 【参考方案1】:同意 cmets 的观点,即 Terraform 可能不是这项工作的理想工具(像 aws s3 sync ...
这样的工具会是一个更好的起点),但要从表面上回答你的问题......
我认为您的问题是 key
规范。这应该是存储对象的键。您当前的解决方案是管理文件夹,而不是其中包含的文件,因此每次更改源时内容都会被替换。试试这个:
resource "aws_s3_bucket_object" "s3_automation_upload1"
bucket = "bucket1"
key = "folder1/File1.txt"
source = "File1.txt"
kms_key_id = ""
resource "aws_s3_bucket_object" "s3_automation_upload2"
bucket = "bucket1"
key = "folder1/File2.txt"
source = "File2.txt"
kms_key_id = ""
请记住,Terraform 旨在管理单个、离散的资源,因此使用这种方法,上传到 S3 的每个文件都需要自己的 Terraform 资源。
【讨论】:
以上是关于强制 Terraform 每次都应用新的状态文件 - S3 文件上传场景的主要内容,如果未能解决你的问题,请参考以下文章