P5-7547 Fix ecr login and add tag (#42)
This commit is contained in:
+42
-19
@@ -1,13 +1,18 @@
|
|||||||
##
|
##
|
||||||
# Example:
|
# Example:
|
||||||
# make create-stack GITHUB_TOKEN=xxxxx ENVIRONMENT_NAME=staging
|
# make create-stack STACK_ENVIRONMENT_NAME=staging
|
||||||
# make create-stack GITHUB_TOKEN=xxxxx ENVIRONMENT_NAME=production
|
# make create-stack STACK_ENVIRONMENT_NAME=production
|
||||||
#
|
#
|
||||||
# # make update-stack ENVIRONMENT_NAME=staging
|
# # make update-stack STACK_ENVIRONMENT_NAME=staging
|
||||||
##
|
##
|
||||||
STACK_NAME=api
|
STACK_NAME=api
|
||||||
GITHUB_REPO := api2
|
GITHUB_REPO := api2
|
||||||
GITHUB_USER := Photowall
|
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
|
# HOSTED_ZONE=photowall.com default in the template
|
||||||
# Cert ARN for the hosted zone
|
# Cert ARN for the hosted zone
|
||||||
CERTIFICATE_ARN='arn:aws:acm:eu-west-1:954747537408:certificate/1278df32-006d-48a4-abd6-2bfccabb11fd'
|
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))
|
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)
|
SUBDOMAIN=$(STACK_NAME)
|
||||||
GITHUB_BRANCH=master
|
GITHUB_BRANCH=master
|
||||||
DB_SECURITY_GROUP_ID=$(DB_SECURITY_GROUP_ID_PRODUCTION)
|
DB_SECURITY_GROUP_ID=$(DB_SECURITY_GROUP_ID_PRODUCTION)
|
||||||
@@ -29,48 +34,65 @@ ifeq ($(ENVIRONMENT_NAME),production)
|
|||||||
MEMORY_SIZE=2GB
|
MEMORY_SIZE=2GB
|
||||||
BERNARD_SQS_POLICY=arn:aws:iam::954747537408:policy/pw-publish-photowall-bernard-live-queue
|
BERNARD_SQS_POLICY=arn:aws:iam::954747537408:policy/pw-publish-photowall-bernard-live-queue
|
||||||
else
|
else
|
||||||
SUBDOMAIN=$(STACK_NAME)-$(ENVIRONMENT_NAME)
|
SUBDOMAIN=$(STACK_NAME)-$(STACK_ENVIRONMENT_NAME)
|
||||||
GITHUB_BRANCH=$(ENVIRONMENT_NAME)
|
GITHUB_BRANCH=$(STACK_ENVIRONMENT_NAME)
|
||||||
DB_SECURITY_GROUP_ID=$(DB_SECURITY_GROUP_ID_STAGING)
|
DB_SECURITY_GROUP_ID=$(DB_SECURITY_GROUP_ID_STAGING)
|
||||||
CPU_SIZE=256
|
CPU_SIZE=512
|
||||||
MEMORY_SIZE=1GB
|
MEMORY_SIZE=1GB
|
||||||
BERNARD_SQS_POLICY=arn:aws:iam::954747537408:policy/pw-publish-photowall-bernard-stage-queue
|
BERNARD_SQS_POLICY=arn:aws:iam::954747537408:policy/pw-publish-photowall-bernard-stage-queue
|
||||||
endif
|
endif
|
||||||
|
|
||||||
check-create-initial-ecr-image:
|
check-create-initial-ecr-image:
|
||||||
@echo Checking for inital image $(DOCKER_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=$$?; \
|
status=$$?; \
|
||||||
if [ $$status != 0 ]; \
|
if [ $$status != 0 ]; \
|
||||||
then \
|
then \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
echo "ECR Repo for initial image does not exist, creating"; \
|
echo "ECR Repo for initial image does not exist, creating"; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
aws ecr create-repository --repository $(STACK_NAME)-$(ENVIRONMENT_NAME); \
|
aws ecr create-repository --repository $(STACK_NAME)-$(STACK_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 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 pull nginx; \
|
||||||
docker tag nginx $(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)-$(ENVIRONMENT_NAME):latest; \
|
docker push $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com/$(STACK_NAME)-$(STACK_ENVIRONMENT_NAME):latest; \
|
||||||
echo ""; \
|
echo ""; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set-repository-lifecycle-policy:
|
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 \
|
@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"
|
--lifecycle-policy-text "file://ecr-lifecycle-policy.json"
|
||||||
|
|
||||||
check-create-variables-set:
|
check-create-variables-set:
|
||||||
$(call checkdef,STACK_NAME)
|
$(call checkdef,STACK_NAME)
|
||||||
$(call checkdef,ENVIRONMENT_NAME)
|
$(call checkdef,STACK_ENVIRONMENT_NAME)
|
||||||
$(call checkdef,GITHUB_TOKEN)
|
$(call checkdef,GITHUB_TOKEN)
|
||||||
$(call checkdef,GITHUB_USER)
|
$(call checkdef,GITHUB_USER)
|
||||||
$(call checkdef,GITHUB_REPO)
|
$(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
|
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 \
|
--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="Image",ParameterValue="$(DOCKER_IMAGE)" \
|
||||||
ParameterKey="Subdomain",ParameterValue="$(SUBDOMAIN)" \
|
ParameterKey="Subdomain",ParameterValue="$(SUBDOMAIN)" \
|
||||||
ParameterKey="Certificate",ParameterValue="$(CERTIFICATE_ARN)" \
|
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
|
update-stack: set-repository-lifecycle-policy
|
||||||
$(call checkdef,STACK_NAME)
|
$(call checkdef,STACK_NAME)
|
||||||
$(call checkdef,ENVIRONMENT_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 \
|
--capabilities CAPABILITY_NAMED_IAM \
|
||||||
|
--tags Key=EnvironmentName,Value=$(STACK_ENVIRONMENT_NAME) \
|
||||||
--parameters ParameterKey="EnvironmentName",UsePreviousValue=true \
|
--parameters ParameterKey="EnvironmentName",UsePreviousValue=true \
|
||||||
ParameterKey="Image",UsePreviousValue=true \
|
ParameterKey="Image",UsePreviousValue=true \
|
||||||
ParameterKey="Subdomain",UsePreviousValue=true \
|
ParameterKey="Subdomain",UsePreviousValue=true \
|
||||||
|
|||||||
@@ -239,10 +239,10 @@ Resources:
|
|||||||
TargetGroup:
|
TargetGroup:
|
||||||
Type: AWS::ElasticLoadBalancingV2::TargetGroup
|
Type: AWS::ElasticLoadBalancingV2::TargetGroup
|
||||||
Properties:
|
Properties:
|
||||||
HealthCheckIntervalSeconds: 10
|
HealthCheckIntervalSeconds: 15
|
||||||
# will look for a 200 status code by default unless specified otherwise
|
# will look for a 200 status code by default unless specified otherwise
|
||||||
HealthCheckPath: !Ref HealthCheckPath
|
HealthCheckPath: !Ref HealthCheckPath
|
||||||
HealthCheckTimeoutSeconds: 5
|
HealthCheckTimeoutSeconds: 10
|
||||||
UnhealthyThresholdCount: 2
|
UnhealthyThresholdCount: 2
|
||||||
HealthyThresholdCount: 2
|
HealthyThresholdCount: 2
|
||||||
Name: !Join ["", [!Ref "AWS::StackName", TargetGroup]]
|
Name: !Join ["", [!Ref "AWS::StackName", TargetGroup]]
|
||||||
@@ -433,7 +433,7 @@ Resources:
|
|||||||
post_build:
|
post_build:
|
||||||
commands:
|
commands:
|
||||||
- echo Logging in to ECR to push image
|
- echo Logging in to ECR to push image
|
||||||
- $(aws ecr get-login --no-include-email --region eu-west-1)
|
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
|
||||||
- docker push "$IMAGE_URI"
|
- docker push "$IMAGE_URI"
|
||||||
- docker push "$IMAGE_LATEST_URI"
|
- docker push "$IMAGE_LATEST_URI"
|
||||||
- printf '[{"name":"%s","imageUri":"%s"}]' "$IMAGE_NAME" "$IMAGE_LATEST_URI" > images.json
|
- printf '[{"name":"%s","imageUri":"%s"}]' "$IMAGE_NAME" "$IMAGE_LATEST_URI" > images.json
|
||||||
@@ -447,6 +447,8 @@ Resources:
|
|||||||
EnvironmentVariables:
|
EnvironmentVariables:
|
||||||
- Name: AWS_DEFAULT_REGION
|
- Name: AWS_DEFAULT_REGION
|
||||||
Value: !Ref AWS::Region
|
Value: !Ref AWS::Region
|
||||||
|
- Name: AWS_ACCOUNT_ID
|
||||||
|
Value: !Ref AWS::AccountId
|
||||||
- Name: REPOSITORY_URI
|
- Name: REPOSITORY_URI
|
||||||
Value: !Ref Image
|
Value: !Ref Image
|
||||||
- Name: IMAGE_NAME
|
- Name: IMAGE_NAME
|
||||||
|
|||||||
Reference in New Issue
Block a user