File size: 2,556 Bytes
ef5050a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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