Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 33 additions & 25 deletions AWS/AWS_Setup.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,18 @@ IMAGE="<image name>"
set -e
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
docker pull "$IMAGE"
docker pull $IMAGE
#make docker invokable without requiring sudo
sudo usermod -aG docker ubuntu
sudo newgrp docker
set +e
)

#Create .env, edit as necessary
mkdir /home/ubuntu/docker_config && cat > /home/ubuntu/docker_config/.env <<EOF
LOCAL_DATA=/app/data
DATASTORE_NAME=S3
DATASTORE_PATH=performance-tracker-test
DATASTORE_PATH=<your bucket name here>
TMP_DIR=/app/data/tmp
METRO_LINES=801,802,803,804,805,806
METRO_AGENCY=lametro-rail
Expand All @@ -31,7 +34,6 @@ AWS_SECRET_ACCESS_KEY=<secret key>
EOF

#allow for timestamps on STDERR

(
set -e
mkdir /home/ubuntu/utils
Expand All @@ -42,82 +44,88 @@ while read -r line; do
echo "[\$(date +%Y-%m-%d\ %H:%M:%S)] \$line" >> /home/ubuntu/logs/errors.log
done
EOF
chmod 755 /home/ubuntu/utils/timestamp_errors.sh
chown -R ubuntu /home/ubuntu/utils
chmod -R 777 ubuntu /home/ubuntu/utils
set +e
)

#Create Shell Scripts
(
set -e
mkdir /home/ubuntu/logs
touch /home/ubuntu/logs/errors.log
touch /home/ubuntu/logs/output.log
chown -R ubuntu /home/ubuntu/logs
chmod -R 777 ubuntu /home/ubuntu/logs
set +e
)

mkdir /home/ubuntu/scripts

(
set -e
cat > /home/ubuntu/daily_at_2.sh <<EOF
cat > /home/ubuntu/scripts/every_six_hours.sh <<EOF
#!/bin/bash
sudo docker run --rm --env-file /home/ubuntu/docker_config/.env -v /home/ubuntu/data/tmp:/app/data/tmp "$IMAGE" bash ./tasks/DAILY_AT_2AM.sh
docker run --rm --env-file /home/ubuntu/docker_config/.env -v /home/ubuntu/data/tmp:/app/data/tmp $IMAGE bash ./tasks/EVERY_6_HOURS.sh
EOF
chmod 755 daily_at_2.sh
set +e
)

(
set -e
cat > /home/ubuntu/every_minute.sh <<EOF
cat > /home/ubuntu/scripts/every_minute.sh <<EOF
#!/bin/bash
sudo docker run --rm --env-file /home/ubuntu/docker_config/.env -v /home/ubuntu/data/tmp:/app/data/tmp "$IMAGE" bash ./tasks/EVERY_MINUTE.sh
docker run --rm --env-file /home/ubuntu/docker_config/.env -v /home/ubuntu/data/tmp:/app/data/tmp $IMAGE bash ./tasks/EVERY_MINUTE.sh
EOF
chmod 755 every_minute.sh
set +e
)

#run the EVERY_15_MIN tasks every hour in dev to reduce the amount of writes to S3 (free tier caps at 2k per month)
(
set -e
cat > /home/ubuntu/every_hour.sh <<EOF
cat > /home/ubuntu/scripts/every_hour.sh <<EOF
#!/bin/bash
sudo docker run --rm --env-file /home/ubuntu/docker_config/.env -v /home/ubuntu/data/tmp:/app/data/tmp "$IMAGE" bash ./tasks/EVERY_15_MINS.sh
docker run --rm --env-file /home/ubuntu/docker_config/.env -v /home/ubuntu/data/tmp:/app/data/tmp $IMAGE bash ./tasks/EVERY_15_MINS.sh
EOF
chmod 755 every_hour.sh
set +e
)

chmod -R 777 /home/ubuntu/scripts

#Configure cron tasks

(
set -e
cat > every_minute <<EOF
CRON_TZ=UTC
* * * * * root /home/ubuntu/every_minute.sh 2> >(/home/ubuntu/utils/timestamp_errors.sh) >> /home/ubuntu/logs/output.log
SHELL=/bin/bash
* * * * * root /home/ubuntu/scripts/every_minute.sh 2> >(/home/ubuntu/utils/timestamp_errors.sh) >> /home/ubuntu/logs/output.log
EOF
chmod 644 every_minute
mv every_minute /etc/cron.d
set +e
)

(
set -e
#change to every 15 min for prod
cat > every_hour <<EOF
CRON_TZ=UTC
0 * * * * root /home/ubuntu/every_hour.sh 2> >(/home/ubuntu/utils/timestamp_errors.sh) >> /home/ubuntu/logs/output.log
SHELL=/bin/bash
0 * * * * root /home/ubuntu/scripts/every_hour.sh 2> >(/home/ubuntu/utils/timestamp_errors.sh) >> /home/ubuntu/logs/output.log
EOF
chmod 644 every_hour
mv every_hour /etc/cron.d
set +e
)

(
set -e
cat > every_day <<EOF
cat > every_six_hours <<EOF
CRON_TZ=UTC
* 11 * * * root rm -rf ~/data/tmp && /home/ubuntu/daily_at_2.sh 2> >(/home/ubuntu/utils/timestamp_errors.sh) >> /home/ubuntu/logs/output.log
SHELL=/bin/bash
0 5,11,17,23 * * * root rm -rf ~/data/tmp && /home/ubuntu/scripts/every_six_hours.sh 2> >(/home/ubuntu/utils/timestamp_errors.sh) >> /home/ubuntu/logs/output.log
EOF
chmod 644 every_day
mv every_day /etc/cron.d
mv every_six_hours /etc/cron.d
set +e
)
chmod -R 755 /etc/cron.d

#run the daily script once on launch to obtain schedule for current day
bash /home/ubuntu/daily_at_2.sh 2> >(/home/ubuntu/utils/timestamp_errors.sh) >> /home/ubuntu/logs/output.log
#obtain the current schedule before cron actions fire
bash /home/ubuntu/scripts/every_six_hours.sh 2> >(/home/ubuntu/utils/timestamp_errors.sh) >> /home/ubuntu/logs/output.log