Make sure DB credentials are available when running userdata
Some checks failed
AWS Deploy on Push / build (push) Failing after 41s

This commit is contained in:
2025-05-29 17:43:08 -05:00
parent e743daf9f7
commit 21b73b6843
2 changed files with 45 additions and 5 deletions

View File

@@ -275,6 +275,25 @@ class IptvManagerStack(Stack):
associate_public_ip_address=True,
)
# Ensure instance depends on SSM parameters being created
instance.node.add_dependency(db)
ssm_params = [
ssm.StringParameter.from_string_parameter_name(
self, "DBHostParamRef", "/iptv-manager/DB_HOST"
),
ssm.StringParameter.from_string_parameter_name(
self, "DBNameParamRef", "/iptv-manager/DB_NAME"
),
ssm.StringParameter.from_string_parameter_name(
self, "DBUserParamRef", "/iptv-manager/DB_USER"
),
ssm.StringParameter.from_string_parameter_name(
self, "DBPassParamRef", "/iptv-manager/DB_PASSWORD"
),
]
for param in ssm_params:
instance.node.add_dependency(param)
# Option: 2: Create Elastic IP (not free tier compatible)
# eip = ec2.CfnEIP(
# self, "IptvManagerEIP",

View File

@@ -16,11 +16,32 @@ cd iptv-manager-service
# Install Python packages with --ignore-installed to prevent conflicts with RPM packages
pip3 install --ignore-installed -r requirements.txt
# Retrieve DB credentials from SSM Parameter Store
export DB_HOST=$(aws ssm get-parameter --name "/iptv-manager/DB_HOST" --query "Parameter.Value" --output text)
export DB_NAME=$(aws ssm get-parameter --name "/iptv-manager/DB_NAME" --query "Parameter.Value" --output text)
export DB_USER=$(aws ssm get-parameter --name "/iptv-manager/DB_USER" --query "Parameter.Value" --output text)
export DB_PASSWORD=$(aws ssm get-parameter --name "/iptv-manager/DB_PASSWORD" --query "Parameter.Value" --output text)
# Retrieve DB credentials from SSM Parameter Store with retries
echo "Attempting to retrieve DB credentials from SSM..."
for i in {1..30}; do
DB_HOST=$(aws ssm get-parameter --name "/iptv-manager/DB_HOST" --query "Parameter.Value" --output text 2>/dev/null)
DB_NAME=$(aws ssm get-parameter --name "/iptv-manager/DB_NAME" --query "Parameter.Value" --output text 2>/dev/null)
DB_USER=$(aws ssm get-parameter --name "/iptv-manager/DB_USER" --query "Parameter.Value" --output text 2>/dev/null)
DB_PASSWORD=$(aws ssm get-parameter --name "/iptv-manager/DB_PASSWORD" --query "Parameter.Value" --output text 2>/dev/null)
if [ -n "$DB_HOST" ] && [ -n "$DB_NAME" ] && [ -n "$DB_USER" ] && [ -n "$DB_PASSWORD" ]; then
echo "Successfully retrieved all DB credentials"
break
fi
echo "Waiting for SSM parameters to be available... (attempt $i/30)"
sleep 5
done
if [ -z "$DB_HOST" ] || [ -z "$DB_NAME" ] || [ -z "$DB_USER" ] || [ -z "$DB_PASSWORD" ]; then
echo "ERROR: Failed to retrieve all required DB credentials after 30 attempts"
exit 1
fi
export DB_HOST
export DB_NAME
export DB_USER
export DB_PASSWORD
# Set PGPASSWORD for psql to use
export PGPASSWORD=$DB_PASSWORD