DFS_Portfolio_Manager / update-launch-template-with-supervisor.ps1
James McCool
Add in config file.
ef5050a
# Updated user data with supervisor setup
$userData = @'
#!/bin/bash
cd /home/ec2-user
# Install supervisor if not already installed
if ! command -v supervisorctl &> /dev/null; then
sudo dnf install -y supervisor
sudo systemctl enable supervisord
sudo systemctl start supervisord
fi
# Remove old directory if it exists but isn't a git repo
if [ -d "AWS_Portfolio_Manager" ] && [ ! -d "AWS_Portfolio_Manager/.git" ]; then
sudo rm -rf AWS_Portfolio_Manager
fi
# Clone or pull
if [ ! -d "AWS_Portfolio_Manager" ]; then
git clone https://huggingface.co/spaces/Multichem-PD/DFS_Portfolio_Manager AWS_Portfolio_Manager
cd AWS_Portfolio_Manager
python3 -m venv venv
cp app.py application.py
mkdir -p .streamlit
else
cd AWS_Portfolio_Manager
git pull origin main
cp app.py application.py
fi
# Install/update packages
source venv/bin/activate
pip install -r requirements.txt
# Create supervisor config for streamlit
sudo tee /etc/supervisor/conf.d/streamlit.conf > /dev/null <<EOF
[program:streamlit]
directory=/home/ec2-user/AWS_Portfolio_Manager
command=/home/ec2-user/AWS_Portfolio_Manager/venv/bin/streamlit run application.py --server.port 5000 --server.address 0.0.0.0
user=ec2-user
autostart=true
autorestart=true
stderr_logfile=/var/log/streamlit.err.log
stdout_logfile=/var/log/streamlit.out.log
environment=HOME="/home/ec2-user",USER="ec2-user"
EOF
# Reload supervisor and restart streamlit
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl restart streamlit
'@
# Encode to base64
$userDataBase64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($userData))
# Create JSON file
$jsonContent = "{`"UserData`": `"$userDataBase64`"}"
[System.IO.File]::WriteAllText("$PWD\launch-template-data.json", $jsonContent, [System.Text.Encoding]::ASCII)
# Create new launch template version
aws ec2 create-launch-template-version `
--launch-template-name portfolio-manager-template `
--source-version '$Latest' `
--launch-template-data file://launch-template-data.json
$latestVersion = aws ec2 describe-launch-template-versions `
--launch-template-name portfolio-manager-template `
--query 'LaunchTemplateVersions[0].VersionNumber' `
--output text
aws ec2 modify-launch-template `
--launch-template-name portfolio-manager-template `
--default-version $latestVersion
Remove-Item "launch-template-data.json" -ErrorAction SilentlyContinue
Write-Host "Launch template updated to version $latestVersion with supervisor!" -ForegroundColor Green