Terraform не отслеживает подобные события жизненного цикла. Он не выглядит так, как будто файл состояния даже содержит данные о том, когда он был обновлен (за исключением метаданных, которые есть у бэкэнда, таких как время создания / обновления файла). Я бы посоветовал отслеживать эти данные самостоятельно и смоделировать жизненный цикл вне terraform.
Вот пример того, как управлять этим жизненным циклом, используя Хранилище параметров SSM для сохранения этого состояния.
Сначала я генерирую уникальный идентификатор для «стека» (заимствуя термин 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
Затем вы можете периодически автоматизировать выполнение этой проверки для каждого UUID в /terraform/created_at/*