| 1 | #!/usr/bin/env bash |
| 2 | # EXPERIMENTAL — tears down the CodeWhale Lightsail smoke lab and verifies |
| 3 | # nothing billable is left behind (instance, key pair, static IPs, disks, |
| 4 | # snapshots). Safe to re-run; prints what it finds before deleting. |
| 5 | set -euo pipefail |
| 6 | |
| 7 | INSTANCE_NAME="${INSTANCE_NAME:-codewhale-smoke}" |
| 8 | KEY_PAIR_NAME="${KEY_PAIR_NAME:-${INSTANCE_NAME}-key}" |
| 9 | REGION="${AWS_REGION:-$(aws configure get region || true)}" |
| 10 | [[ -n "${REGION}" ]] || { echo "Set AWS_REGION" >&2; exit 1; } |
| 11 | |
| 12 | echo "== Current Lightsail resources in ${REGION} ==" |
| 13 | aws lightsail get-instances --region "$REGION" \ |
| 14 | --query 'instances[].[name,state.name,bundleId]' --output table || true |
| 15 | |
| 16 | if aws lightsail get-instance --region "$REGION" --instance-name "$INSTANCE_NAME" >/dev/null 2>&1; then |
| 17 | read -r -p "Delete instance '${INSTANCE_NAME}'? Type 'yes': " CONFIRM |
| 18 | [[ "$CONFIRM" == "yes" ]] || { echo "Aborted."; exit 1; } |
| 19 | aws lightsail delete-instance --region "$REGION" --instance-name "$INSTANCE_NAME" >/dev/null |
| 20 | echo "deleted instance ${INSTANCE_NAME}" |
| 21 | else |
| 22 | echo "instance ${INSTANCE_NAME} not found (already deleted?)" |
| 23 | fi |
| 24 | |
| 25 | if aws lightsail get-key-pair --region "$REGION" --key-pair-name "$KEY_PAIR_NAME" >/dev/null 2>&1; then |
| 26 | aws lightsail delete-key-pair --region "$REGION" --key-pair-name "$KEY_PAIR_NAME" >/dev/null |
| 27 | echo "deleted key pair ${KEY_PAIR_NAME}" |
| 28 | fi |
| 29 | |
| 30 | echo "== Leftover billable resources check ==" |
| 31 | echo "-- static IPs (billed when unattached):" |
| 32 | aws lightsail get-static-ips --region "$REGION" --query 'staticIps[].[name,isAttached]' --output table |
| 33 | echo "-- extra disks:" |
| 34 | aws lightsail get-disks --region "$REGION" --query 'disks[].[name,state]' --output table |
| 35 | echo "-- instance snapshots:" |
| 36 | aws lightsail get-instance-snapshots --region "$REGION" --query 'instanceSnapshots[].[name,state]' --output table |
| 37 | echo "-- remaining instances:" |
| 38 | aws lightsail get-instances --region "$REGION" --query 'instances[].[name,state.name]' --output table |
| 39 | echo |
| 40 | echo "If all tables above are empty, Lightsail billing for this lab is fully stopped." |
| 41 |