如何在 gitlab 中删除 terraform 资源?
Posted
技术标签:
【中文标题】如何在 gitlab 中删除 terraform 资源?【英文标题】:how to delete terraform resources in gitlab? 【发布时间】:2022-01-15 21:12:59 【问题描述】:我通过 gitlab 创建资源,但无法删除。一开始,我将计划输出到工件以在 apply 中应用它。然后创建资源,创建后我想删除它们。但是删除它们是行不通的,不可能像计划一样将它们输出到out,如果我只是在终端中键入destroy,那么作业运行成功,但是删除了0个资源。 my.gitlab-ci.yaml 是这样的
stages:
- validate
- plan
- apply
- destroy
before_script:
- rm -rf .terraform
- export AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY
- terraform init
validate:
stage: validate
script:
- terraform validate
tags:
- shell-runner
plan:
stage: plan
script:
- terraform plan -out "planfile"
dependencies:
- validate
artifacts:
paths:
- "planfile"
tags:
- shell-runner
apply:
stage: apply
script:
- terraform apply -input=false -auto-approve
dependencies:
- plan
tags:
- shell-runner
when: manual
destroy:
stage: destroy
script:
- terraform destroy -state="planfile" -auto-approve
tags:
- shell-runner
when: manual
【问题讨论】:
Terraform 命令的用法不正确。您应该检查 Terraform CLI 的文档并修复它们,然后您将获得预期的行为。 【参考方案1】:我找到了一种解决方案 + 可以通过 s3 存储桶完成 https://docs.gitlab.com/ee/user/infrastructure/iac/terraform_state.html
【讨论】:
【参考方案2】:您将Terraform state 与Terraform plan 混淆了。
Terraform state 是一个集中文件,用于存储有关您的所有基础架构的信息。
Terraform 计划是一个临时文件,仅包含计划中的更改。
请正确设置Terraform state location,销毁时不要将计划文件设置为状态文件。除了local
,您需要任何后端类型。
【讨论】:
你的意思是这样做?脚本:- terraform destroy -state="terraform.tfstate" -auto-approve 您不必传递 -state 参数(terraform.state 是它的默认值 btw)。当您设置远程后端时,这将自动工作。本地后端不适用于 Gilab CI(和任何其他 CI),因为每个作业都在干净的环境中运行。 Shell 执行器使情况变得更糟。 如果我理解正确,那么你需要编写 terraform destroy -auto-approve,因为这是在远程服务器上完成的,它应该触发和删除资源。但其实我也试过了。并且还删除了 0 个资源。也许我很笨,但如果你能写出你需要的东西,以便将其删除,那么我将能够将我的逻辑链执行到最后以上是关于如何在 gitlab 中删除 terraform 资源?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Terraform 附加或删除安全组的入口/出口规则?
SSH 密钥未受保护的 terraform ansible jenkins