aws-cloudformation - terraform tf 文件或模块可以自动使资源过期吗?

标签 aws-cloudformation terraform terraform-provider-aws

在cloudformation中,您可以在运行删除堆栈的命令的堆栈上设置TTL:https://aws.amazon.com/blogs/devops/scheduling-automatic-deletion-of-application-environments/

如何在 TF 文件中执行此操作?

或者也许我可以有一个脚本来获取 tf 文件(状态文件)的创建时间,将其与当前时间进行比较并进行销毁?这也可能有效

最佳答案

Terraform 不会跟踪此类生命周期事件。状态文件看起来甚至没有有关其更新时间的数据(后端拥有的任何元数据除外,例如文件创建/更新时间)。我建议您自己跟踪这些数据并在 terraform 之外对生命周期进行建模。

以下是如何使用 SSM parameter store 管理此生命周期的示例来保持这个状态。

首先,我为“堆栈”生成一个唯一标识符(借用 CloudFormation 术语)并将创建时间存储在 SSM 参数存储中。我们将此 UUID 传递给 Terraform 进行标记和后端配置

#!/bin/bash
set -e

UUID=$(uuidgen)
TIMESTAMP=$(date +%s)
SSM_PARAMETER_STORE_NAME="/terraform/created_at/${UUID}"
<configure terraform backend config>
<terraform apply step>
aws ssm put-parameter --name "$SSM_PARAMETER_STORE_NAME" --value "$TIMESTAMP" --type String > /dev/null
echo $UUID

然后,如果堆栈 $UUID 是在 $threshold 秒前创建的,则可以使用类似以下内容有条件地销毁堆栈。

#!/bin/bash

usage(){
  echo "Performs terraform destroy if a terrafrom 'stack' was created at least <threshold> seconds ago"
  echo "Usage: $0 UUID threshold"
  exit 1
}

validate_args(){
  [[ -z "$1" ]] && { echo "No UUID passed, exiting" ; usage; exit 1; }
  [[ -z "$2" ]] && { echo "No Threshold passed, exiting" ; usage; exit 1; }
  echo "Args validated"
}

check_time(){
  SSM_PARAMETER_STORE_NAME=$1
  THRESHOLD=$2
  NOW=$(date +%s)

  CREATED_AT=$(aws ssm get-parameter --name "$SSM_PARAMETER_STORE_NAME" | jq -r .Parameter.Value)
  if [[ $(($NOW - $CREATED_AT)) > $THRESHOLD ]]; then
     echo "Threshold not met, exiting"
     exit 1
  fi
  echo "Threshold met"
}

perform_tf_destroy(){
  <configure terraform backend config>
  <terraform destroy step>
  aws ssm delete-parameter --name "$SSM_PARAMETER_STORE_NAME"
}

validate_args $1 $2
SSM_PARAMETER_STORE_NAME="/terraform/created_at/${1}"
THRESHOLD=$2
check_time $SSM_PARAMETER_STORE_NAME $THRESHOLD
perform_tf_destroy

然后,您可以自动定期对 /terraform/created_at/* 中的每个 UUID 执行检查

关于aws-cloudformation - terraform tf 文件或模块可以自动使资源过期吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51119829/

相关文章:

amazon-web-services - 如何使用 Terraform 添加或删除安全组的入口/导出规则?

amazon-web-services - 使用 terraform aws_acm_certificate_validation 时缺少 DNS 验证记录

amazon-web-services - Terraform 导入 aws_cloudwatch_log_stream

amazon-web-services - 了解谁创建了 CloudTrail 以及如何创建?

amazon-web-services - 避免在 CloudFormation 堆栈中重新创建已经存在的 DynamoDB 表

amazon-web-services - Auto Scaling 组不会在启动配置更改时更新

amazon-web-services - 有没有办法让 cloudformation 查询可用区域以创建子网?

amazon-web-services - AWS 通过 API(Boto3 或 Terraform)禁用区域

terraform - 是否可以在代码块中而不是在 Web 界面中更改 Terraform Cloud 工作区执行模式?

amazon-web-services - aws 地形错误 CannotPullContainerError : Error response from daemon - but the image url is valid