ACCOUNT_ID?=111222333444 REGION?=eu-west-1 REPO?=metadata-endpoint IMAGE_NAME?=endpoint-resolver REGISTRY?=$(ACCOUNT_ID).dkr.ecr.$(REGION).amazonaws.com/$(REPO) LOG_GROUP?=metadata-logs ENV_EKS+=REGISTRY IMAGE_NAME ENV_ECS+= ACCOUNT_ID REGION ECS_VARS?=$(foreach v,$(ENV_ECS),$(v)='$($(v))' ) KUBE_VARS?=$(foreach v,$(ENV_EKS),$(v)='$($(v))' ) all: ifeq ($(BUILD_CLUSTER),EKS) all: repository build tag push eksdeploy else ifeq ($(BUILD_CLUSTER),ECS) all: repository build tag push loggroup taskdefinition else ifeq ($(BUILD_CLUSTER),ALL) all: repository build tag push loggroup taskdefinition eksdeploy else echo 'Invalid parameter provided.' endif # Image preparation repository: @echo 'Creating ECR repository $(REPO)...' AWS_PAGER="" aws ecr create-repository --repository-name $(REPO) --region $(REGION) build: @echo 'Building image $(IMAGE_NAME)...' docker build --no-cache -t $(IMAGE_NAME):latest . tag: @echo 'Tagging image $(IMAGE_NAME)...' docker tag $(IMAGE_NAME):latest $(REGISTRY) push: @echo 'Logging to the registry and pushing image...' aws ecr get-login-password --region $(REGION)| docker login --username AWS --password-stdin $(REGISTRY) docker push $(REGISTRY) # ECS Deployment loggroup: @echo 'Create CloudWatch log group $(LOG_GROUP)...' aws logs create-log-group --log-group-name $(LOG_GROUP) --region $(REGION) .ONESHELL: taskdefinition: @echo 'Register task definition in ECS...' export AWS_PAGER="" $(ECS_VARS) envsubst < deploy/endpoint-metadata-task.template > deploy/endpoint-metadata-task.json aws ecs register-task-definition --network-mode none --requires-compatibilities "[\"EC2\"]" --cli-input-json file://deploy/endpoint-metadata-task.json aws ecs register-task-definition --network-mode bridge --requires-compatibilities "[\"EC2\"]" --cli-input-json file://deploy/endpoint-metadata-task.json aws ecs register-task-definition --network-mode host --requires-compatibilities "[\"EC2\"]" --cli-input-json file://deploy/endpoint-metadata-task.json aws ecs register-task-definition --network-mode awsvpc --requires-compatibilities "[\"EC2\",\"FARGATE\"]" --cli-input-json file://deploy/endpoint-metadata-task.json # EKS Deployment eksdeploy: @echo 'Deploy pod to to EKS...' $(KUBE_VARS) envsubst < deploy/pod.yaml | kubectl apply -f - # Clean up everything SHELL:=/bin/bash .ONESHELL: clean: @echo 'Cleaning up all the created resources...' export AWS_PAGER="" aws logs delete-log-group --log-group-name metadata-logs aws ecr delete-repository --repository-name metadata-endpoint --force tasks=$$(aws ecs list-task-definitions --family-prefix metadata-endpoint --query "taskDefinitionArns[]" | cut -f7 -d :| sed 's/[^0-9]//g' | sed '1d; $$d') while IFS= read -r version; do aws ecs deregister-task-definition --task-definition metadata-endpoint:$$version done <<< "$$tasks" kubectl delete ns meta-store .PHONY: repository build tag push loggroup taskdefinition eksdeploy clean