首页 文章

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

提问于
浏览
1

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

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

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

1 回答

  • 1

    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执行该检查

相关问题