requeue
This commit is contained in:
parent
663faa6a08
commit
63d12f8c7c
|
|
@ -0,0 +1,111 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# requeue_email.sh
|
||||||
|
# Nimmt eine existierende Email aus S3 und stellt ein Event in die SQS Queue,
|
||||||
|
# um eine erneute Verarbeitung durch den Worker auszulösen.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# --- Parameter ---
|
||||||
|
DOMAIN="$1"
|
||||||
|
RECIPIENT="$2"
|
||||||
|
MESSAGE_ID="$3" # Das ist der S3 Key (die lange Zeichenkette aus dem Log)
|
||||||
|
AWS_REGION=${AWS_REGION:-"us-east-2"}
|
||||||
|
|
||||||
|
if [ -z "$DOMAIN" ] || [ -z "$RECIPIENT" ] || [ -z "$MESSAGE_ID" ]; then
|
||||||
|
echo "Usage: $0 <domain> <recipient> <s3-message-id>"
|
||||||
|
echo "Example: $0 buddelectric.net Tyler@buddelectric.net cn8j6j970atkh7n3fstdhgqr9imgrivegnm70jg1"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Variablen ableiten ---
|
||||||
|
BUCKET_NAME=$(echo "$DOMAIN" | tr '.' '-')"-emails"
|
||||||
|
QUEUE_NAME=$(echo "$DOMAIN" | tr '.' '-')"-queue"
|
||||||
|
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||||
|
|
||||||
|
echo "============================================================"
|
||||||
|
echo " Requeue S3 Email"
|
||||||
|
echo "============================================================"
|
||||||
|
echo " Domain: $DOMAIN"
|
||||||
|
echo " Recipient: $RECIPIENT"
|
||||||
|
echo " Bucket: $BUCKET_NAME"
|
||||||
|
echo " Key (ID): $MESSAGE_ID"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# --- Schritt 1: Prüfen ob S3 Objekt existiert ---
|
||||||
|
echo "[1/2] Checking S3 object: s3://${BUCKET_NAME}/${MESSAGE_ID} ..."
|
||||||
|
|
||||||
|
if aws s3 ls "s3://${BUCKET_NAME}/${MESSAGE_ID}" --region "$AWS_REGION" > /dev/null 2>&1; then
|
||||||
|
echo " ✓ Object found."
|
||||||
|
else
|
||||||
|
echo " ❌ ERROR: Object s3://${BUCKET_NAME}/${MESSAGE_ID} does not exist!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- Schritt 2: Nachricht in SQS stellen ---
|
||||||
|
echo "[2/2] Placing message in SQS queue..."
|
||||||
|
|
||||||
|
QUEUE_URL=$(aws sqs get-queue-url \
|
||||||
|
--queue-name "$QUEUE_NAME" \
|
||||||
|
--region "$AWS_REGION" \
|
||||||
|
--output text \
|
||||||
|
--query 'QueueUrl')
|
||||||
|
|
||||||
|
if [ -z "$QUEUE_URL" ]; then
|
||||||
|
echo " ❌ ERROR: Queue $QUEUE_NAME not found!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# SES event payload (Simuliert die Lambda-Ausgabe)
|
||||||
|
# Wir nutzen "requeue@admin" als Source, da der Worker den echten Absender
|
||||||
|
# ohnehin aus den Email-Headern im S3-File parst.
|
||||||
|
SES_DATA=$(jq -n \
|
||||||
|
--arg msgId "$MESSAGE_ID" \
|
||||||
|
--arg source "requeue-admin@${DOMAIN}" \
|
||||||
|
--arg recipient "$RECIPIENT" \
|
||||||
|
--arg ts "$TIMESTAMP" \
|
||||||
|
--arg bucket "$BUCKET_NAME" \
|
||||||
|
'{
|
||||||
|
mail: {
|
||||||
|
messageId: $msgId,
|
||||||
|
source: $source,
|
||||||
|
timestamp: $ts,
|
||||||
|
destination: [$recipient]
|
||||||
|
},
|
||||||
|
receipt: {
|
||||||
|
recipients: [$recipient],
|
||||||
|
timestamp: $ts,
|
||||||
|
action: {
|
||||||
|
type: "S3",
|
||||||
|
bucketName: $bucket,
|
||||||
|
objectKey: $msgId
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}')
|
||||||
|
|
||||||
|
# Fake SNS wrapper (Gleiches Format wie Lambda Shim)
|
||||||
|
SQS_BODY=$(jq -n \
|
||||||
|
--arg sesData "$SES_DATA" \
|
||||||
|
--arg ts "$TIMESTAMP" \
|
||||||
|
'{
|
||||||
|
Type: "Notification",
|
||||||
|
MessageId: "requeue-\(now | tostring)",
|
||||||
|
TopicArn: "arn:aws:sns:ses-shim:global-topic",
|
||||||
|
Subject: "Amazon SES Email Receipt Notification",
|
||||||
|
Message: $sesData,
|
||||||
|
Timestamp: $ts
|
||||||
|
}')
|
||||||
|
|
||||||
|
# Senden
|
||||||
|
SQS_MSG_ID=$(aws sqs send-message \
|
||||||
|
--queue-url "$QUEUE_URL" \
|
||||||
|
--region "$AWS_REGION" \
|
||||||
|
--message-body "$SQS_BODY" \
|
||||||
|
--output text \
|
||||||
|
--query 'MessageId')
|
||||||
|
|
||||||
|
echo " ✓ Done (SQS MessageId: ${SQS_MSG_ID})"
|
||||||
|
echo ""
|
||||||
|
echo "============================================================"
|
||||||
|
echo " Email successfully requeued!"
|
||||||
|
echo " Worker should pick it up immediately."
|
||||||
|
echo "============================================================"
|
||||||
Loading…
Reference in New Issue