Files
tf_provider/scripts/s3_notification_example.sh

100 lines
2.9 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
# Пример настройки bucket notifications через mc (S3-compatible)
# Запускать НА УДАЛЁННОЙ машине.
#
# Пример:
# export S3CFG=/home/naeel/terra/terraform/secrets/.s3cfg_registry
# export BUCKET=buck
# export TARGET_ARN='arn:minio:sqs::primary:webhook'
# export EVENTS='put,delete'
# bash scripts/s3_notification_example.sh
#
# Где TARGET_ARN — уже существующий target в конфигурации S3/MinIO.
S3CFG="${S3CFG:-/home/naeel/terra/terraform/secrets/.s3cfg_registry}"
BUCKET="${BUCKET:-}"
TARGET_ARN="${TARGET_ARN:-}"
EVENTS="${EVENTS:-put}" # put | delete | get | put,delete
PREFIX="${PREFIX:-}" # опционально, напр. uploads/
SUFFIX="${SUFFIX:-}" # опционально, напр. .jpg
ALIAS_NAME="${ALIAS_NAME:-regnotif}"
if ! command -v mc >/dev/null 2>&1; then
echo "ERROR: mc не установлен"
exit 1
fi
if [[ ! -f "$S3CFG" ]]; then
echo "ERROR: не найден S3CFG: $S3CFG"
exit 1
fi
if [[ -z "$BUCKET" ]]; then
echo "ERROR: задайте BUCKET"
exit 1
fi
if [[ -z "$TARGET_ARN" ]]; then
echo "ERROR: задайте TARGET_ARN (например arn:minio:sqs::primary:webhook)"
exit 1
fi
# Читаем access_key/secret_key/host_base из .s3cfg
# shellcheck disable=SC2016
readarray -t CFG_LINES < <(python3 - <<PY
import configparser
cfg = configparser.RawConfigParser()
cfg.read("$S3CFG")
sec = cfg["default"]
print(sec.get("access_key", ""))
print(sec.get("secret_key", ""))
print(sec.get("host_base", ""))
PY
)
ACCESS_KEY="${CFG_LINES[0]:-}"
SECRET_KEY="${CFG_LINES[1]:-}"
HOST_BASE="${CFG_LINES[2]:-}"
if [[ -z "$ACCESS_KEY" || -z "$SECRET_KEY" || -z "$HOST_BASE" ]]; then
echo "ERROR: в $S3CFG нет access_key/secret_key/host_base"
exit 1
fi
mc alias rm "$ALIAS_NAME" >/dev/null 2>&1 || true
MC_CONFIG_DIR="$(mktemp -d)"
cleanup() {
rm -rf "$MC_CONFIG_DIR"
}
trap cleanup EXIT
export MC_HOST_${ALIAS_NAME}="https://${ACCESS_KEY}:${SECRET_KEY}@${HOST_BASE}"
mc --config-dir "$MC_CONFIG_DIR" alias ls >/dev/null
echo "[1/3] Текущие notification-правила в бакете $BUCKET:"
mc --config-dir "$MC_CONFIG_DIR" event ls "$ALIAS_NAME/$BUCKET" || true
echo "[2/3] Добавление правила: events=$EVENTS target=$TARGET_ARN"
EVENT_FLAGS=()
IFS=',' read -r -a EVENT_ARRAY <<< "$EVENTS"
for ev in "${EVENT_ARRAY[@]}"; do
EVENT_FLAGS+=("--event" "$ev")
done
FILTER_FLAGS=()
if [[ -n "$PREFIX" ]]; then
FILTER_FLAGS+=("--prefix" "$PREFIX")
fi
if [[ -n "$SUFFIX" ]]; then
FILTER_FLAGS+=("--suffix" "$SUFFIX")
fi
mc --config-dir "$MC_CONFIG_DIR" event add "$ALIAS_NAME/$BUCKET" "$TARGET_ARN" "${EVENT_FLAGS[@]}" "${FILTER_FLAGS[@]}"
echo "[3/3] Проверка после добавления:"
mc --config-dir "$MC_CONFIG_DIR" event ls "$ALIAS_NAME/$BUCKET"
echo "OK: правило уведомлений настроено"