P5-7547 Fix ecr login and add tag (#42)

This commit is contained in:
Niklas Fondberg
2021-07-19 12:50:50 +02:00
committed by GitHub
parent 3969bc54df
commit 454d9b852f
2 changed files with 47 additions and 22 deletions
+42 -19
View File
@@ -1,13 +1,18 @@
##
# Example:
# make create-stack GITHUB_TOKEN=xxxxx ENVIRONMENT_NAME=staging
# make create-stack GITHUB_TOKEN=xxxxx ENVIRONMENT_NAME=production
# make create-stack STACK_ENVIRONMENT_NAME=staging
# make create-stack STACK_ENVIRONMENT_NAME=production
#
# # make update-stack ENVIRONMENT_NAME=staging
# # make update-stack STACK_ENVIRONMENT_NAME=staging
##
STACK_NAME=api
GITHUB_REPO := api2
GITHUB_USER := Photowall
$(eval GITHUB_TOKEN=$(shell aws ssm get-parameter --with-decryption --name /github/CODE_PIPELINE_TOKEN --output text --query Parameter.Value))
AWS_REGION=$(shell aws configure get region)
AWS_ACCOUNT_ID=$(shell aws sts get-caller-identity --query Account --output text)
# HOSTED_ZONE=photowall.com default in the template
# Cert ARN for the hosted zone
CERTIFICATE_ARN='arn:aws:acm:eu-west-1:954747537408:certificate/1278df32-006d-48a4-abd6-2bfccabb11fd'
@@ -19,9 +24,9 @@ AWS_ACCOUNT_ID=$(shell aws sts get-caller-identity --query Account --output text
checkdef = $(if $(value $(1)),,$(error $(1) not set))
DOCKER_IMAGE=$(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(STACK_NAME)-$(ENVIRONMENT_NAME)
DOCKER_IMAGE=$(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)
ifeq ($(ENVIRONMENT_NAME),production)
ifeq ($(STACK_ENVIRONMENT_NAME),production)
SUBDOMAIN=$(STACK_NAME)
GITHUB_BRANCH=master
DB_SECURITY_GROUP_ID=$(DB_SECURITY_GROUP_ID_PRODUCTION)
@@ -29,48 +34,65 @@ ifeq ($(ENVIRONMENT_NAME),production)
MEMORY_SIZE=2GB
BERNARD_SQS_POLICY=arn:aws:iam::954747537408:policy/pw-publish-photowall-bernard-live-queue
else
SUBDOMAIN=$(STACK_NAME)-$(ENVIRONMENT_NAME)
GITHUB_BRANCH=$(ENVIRONMENT_NAME)
SUBDOMAIN=$(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)
GITHUB_BRANCH=$(STACK_ENVIRONMENT_NAME)
DB_SECURITY_GROUP_ID=$(DB_SECURITY_GROUP_ID_STAGING)
CPU_SIZE=256
CPU_SIZE=512
MEMORY_SIZE=1GB
BERNARD_SQS_POLICY=arn:aws:iam::954747537408:policy/pw-publish-photowall-bernard-stage-queue
endif
check-create-initial-ecr-image:
@echo Checking for inital image $(DOCKER_IMAGE)
@aws ecr list-images --repository-name $(STACK_NAME)-$(ENVIRONMENT_NAME) 2>/dev/null | grep imageTag | grep -q latest; \
@aws ecr list-images --repository-name $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME) 2>/dev/null | grep imageTag | grep -q latest; \
status=$$?; \
if [ $$status != 0 ]; \
then \
echo ""; \
echo "ECR Repo for initial image does not exist, creating"; \
echo ""; \
aws ecr create-repository --repository $(STACK_NAME)-$(ENVIRONMENT_NAME); \
docker login -u AWS -p $(shell aws ecr get-login-password --region eu-west-1) $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(STACK_NAME)-$(ENVIRONMENT_NAME); \
aws ecr create-repository --repository $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME); \
aws ecr get-login-password --region eu-west-1 | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com; \
docker pull nginx; \
docker tag nginx $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(STACK_NAME)-$(ENVIRONMENT_NAME):latest; \
docker push $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(STACK_NAME)-$(ENVIRONMENT_NAME):latest; \
docker tag nginx $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(STACK_NAME)-$(STACK_ENVIRONMENT_NAME):latest; \
docker push $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(STACK_NAME)-$(STACK_ENVIRONMENT_NAME):latest; \
echo ""; \
fi
set-repository-lifecycle-policy:
@echo Setting lifecycle policy for repo $(STACK_NAME)-$(ENVIRONMENT_NAME)
@echo Setting lifecycle policy for repo $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)
@aws ecr put-lifecycle-policy \
--repository-name $(STACK_NAME)-$(ENVIRONMENT_NAME) \
--repository-name $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME) \
--lifecycle-policy-text "file://ecr-lifecycle-policy.json"
check-create-variables-set:
$(call checkdef,STACK_NAME)
$(call checkdef,ENVIRONMENT_NAME)
$(call checkdef,STACK_ENVIRONMENT_NAME)
$(call checkdef,GITHUB_TOKEN)
$(call checkdef,GITHUB_USER)
$(call checkdef,GITHUB_REPO)
check-update-variables-set:
$(call checkdef,STACK_ENVIRONMENT_NAME)
delete-stack:
aws cloudformation delete-stack --stack-name $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)
aws ecr delete-repository --force --repository-name $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)
@echo ""
@echo "################################################################"
@echo "# Do not forget to delete the articast bucket and loggroup:"
@aws s3 ls | grep $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)
@echo "# aws s3 rb --force s3://<bucket name>"
@echo ""
@echo "aws logs delete-log-group --log-group-name /aws/codebuild/$(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)"
@echo "aws logs delete-log-group --log-group-name $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)"
@echo "################################################################"
create-stack: check-create-variables-set check-create-initial-ecr-image
aws cloudformation create-stack --stack-name $(STACK_NAME)-$(ENVIRONMENT_NAME) --template-body file://ecs-service.yaml \
aws cloudformation create-stack --stack-name $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME) --template-body file://ecs-service.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--parameters ParameterKey="EnvironmentName",ParameterValue="$(ENVIRONMENT_NAME)" \
--tags Key=EnvironmentName,Value=$(STACK_ENVIRONMENT_NAME) \
--parameters ParameterKey="EnvironmentName",ParameterValue="$(STACK_ENVIRONMENT_NAME)" \
ParameterKey="Image",ParameterValue="$(DOCKER_IMAGE)" \
ParameterKey="Subdomain",ParameterValue="$(SUBDOMAIN)" \
ParameterKey="Certificate",ParameterValue="$(CERTIFICATE_ARN)" \
@@ -86,8 +108,9 @@ create-stack: check-create-variables-set check-create-initial-ecr-image
update-stack: set-repository-lifecycle-policy
$(call checkdef,STACK_NAME)
$(call checkdef,ENVIRONMENT_NAME)
aws cloudformation update-stack --stack-name $(STACK_NAME)-$(ENVIRONMENT_NAME) --template-body file://ecs-service.yaml \
aws cloudformation update-stack --stack-name $(STACK_NAME)-$(STACK_ENVIRONMENT_NAME) --template-body file://ecs-service.yaml \
--capabilities CAPABILITY_NAMED_IAM \
--tags Key=EnvironmentName,Value=$(STACK_ENVIRONMENT_NAME) \
--parameters ParameterKey="EnvironmentName",UsePreviousValue=true \
ParameterKey="Image",UsePreviousValue=true \
ParameterKey="Subdomain",UsePreviousValue=true \