Может ли terraform tf файл или модуль автоматически истечь ресурсы? - PullRequest
0 голосов
/ 01 июля 2018

В облачной информации вы можете установить TTL в стеке, который запускает команду, удаляющую стек: https://aws.amazon.com/blogs/devops/scheduling-automatic-deletion-of-application-environments/

Как мне сделать это в TF-файле?

ИЛИ может быть, у меня может быть сценарий, который получает время создания tf-файла (файла состояния), сравнивает его с текущим временем и выполняет уничтожение? это тоже может сработать

1 Ответ

0 голосов
/ 02 июля 2018

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/*

...