在cloudformation中,您可以在运行删除该堆栈的命令的堆栈上设置TTL:https://aws.amazon.com/blogs/devops/scheduling-automatic-deletion-of-application-environments/
如何在TF文件中执行此操作?
或者也许我可以有一个脚本来获取tf文件(状态文件)的创建时间,将其与当前时间进行比较并销毁?可能也可以
答案 0 :(得分: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秒钟前创建的,则可以使用以下内容有条件地破坏堆栈。{p>
#!/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/*