# export environment variables from .env include .env export VENV=infra/venv/bin WITH_VENV=. $(VENV)/activate; .PHONY: all all: @echo "make venv - create virtual environment" @echo "make synth - test CDK stacks with .env variables" @echo "make generate_fernet - generate Fernet Key for Airflow" @echo "make bootstrap - bootstrap AWS architecture (S3, ECR, VPC, RDS, Redis)" @echo "make push_images - push Docker images (Airflow, DBT) to ECR" @echo "make deploy - deploy ECS cluster and services" .PHONY: venv venv: venv/bin/activate venv/bin/activate: requirements-dev.txt @echo "Installing dependencies" @test -d infra/venv || python3 -m venv infra/venv @$(VENV)/pip install --upgrade pip @$(VENV)/pip install -Ur requirements-dev.txt @touch $(VENV)/activate .PHONY: synth synth: venv @$(WITH_VENV) cd infra; cdk synth "*" .PHONY: generate_fernet generate_fernet: venv @$(WITH_VENV) python scripts/fernet.py .PHONY: bootstrap bootstrap: venv @echo "Bootstrap infrastructure" @$(WITH_VENV) cd infra; cdk bootstrap @$(WITH_VENV) cd infra; cdk deploy VpcStack S3Stack ECRStack RDSStack RedisStack RedshiftClusterStack @echo "Bootstrap finished. You can now push Docker images and deploy Airflow cluster" .PHONY: push_images push_images: venv bootstrap @echo "Push Docker images (Airflow, DBT)" @bash scripts/ecr.sh @echo "All Docker images are pushed. You can now deploy Airflow cluster" .PHONY: deploy deploy: venv bootstrap push_images @$(WITH_VENV) cd infra; cdk deploy AirflowClusterStack airflow dbt .PHONY: destroy destroy: venv @bash scripts/empty_s3.sh @bash scripts/empty_ecr.sh @$(WITH_VENV) cd infra; cdk destroy --all # CodeBuild rules .PHONY: codebuild_deploy_airflow codebuild_deploy_airflow: @cd infra; cdk deploy airflow --require-approval=never .PHONY: codebuild_deploy_dbt codebuild_deploy_dbt: @cd infra; cdk deploy dbt --require-approval=never