1+ #! /bin/bash
2+
3+ # Clear the stack:
4+ aws cloudformation delete-stack --stack-name neoapi-dev --region us-east-2 && aws cloudformation wait stack-delete-complete --stack-name neoapi-dev --region us-east-2
5+
6+ aws cloudformation delete-stack --stack-name neoapi-prod --region us-east-2 && aws cloudformation wait stack-delete-complete --stack-name neoapi-prod --region us-east-2
7+
8+ # set env vars
9+ AWS_REGION=" us-east-2" # Change to your region
10+ AWS_ACCOUNT_ID=" 417278330808" # Change to your account ID
11+ REPOSITORY_NAME=" neoapi-prod"
12+ IMAGE_TAG=" latest"
13+ STACK_NAME=" neoapi-prod"
14+ ENVIRONMENT=" prod"
15+ IMAGE_URI=" 417278330808.dkr.ecr.us-east-2.amazonaws.com/neoapi-prod:latest"
16+ VPC_ID=" vpc-0d10dcdc60306b07e"
17+ PRIVATE_SUBNETS=" subnet-0e66614ca7e9e7247,subnet-013f8ff069404c987"
18+ NODE_ENV=development
19+ APIPORT=3001
20+ RDS_HOSTNAME=neotomaprivate.cxkwxkjpj8zi.us-east-2.rds.amazonaws.com
21+ RDS_USERNAME=neotomaAdmin
22+ RDS_DATABASE=neotomatank
23+ RDS_PASSWORD=ndbgeopoliticalunits
24+ RDS_PORT=5432
25+ LOCALLIMIT=false
26+ SSL_CERT=true
27+ NATIVELANDKEY=1lMifvl80k2C6uQFEdEru
28+ PORT=3001
29+ HOSTED_ZONE_ID=" Z06678132YXCZ3LP39MIP"
30+ DOMAIN_NAME=" api.neotomadb.org"
31+
32+ docker build -f Dockerfile -t neoapi-prod:latest .
33+ aws ecr get-login-password --region ${AWS_REGION} | \
34+ docker login --username AWS --password-stdin ${AWS_ACCOUNT_ID} .dkr.ecr.${AWS_REGION} .amazonaws.com
35+
36+ # Tag image for ECR
37+ docker tag ${REPOSITORY_NAME} :${IMAGE_TAG} \
38+ ${AWS_ACCOUNT_ID} .dkr.ecr.${AWS_REGION} .amazonaws.com/${REPOSITORY_NAME} :${IMAGE_TAG}
39+
40+ # Push to ECR
41+ echo " Pushing image to ECR..."
42+ docker push ${AWS_ACCOUNT_ID} .dkr.ecr.${AWS_REGION} .amazonaws.com/${REPOSITORY_NAME} :${IMAGE_TAG}
43+
44+ echo " Ensuring App Runner service-linked role exists"
45+ aws iam create-service-linked-role --aws-service-name apprunner.amazonaws.com 2> /dev/null || echo " Service-linked role already exists"
46+
47+ aws cloudformation deploy \
48+ --template-file infrastructure/cloudformation-template.yaml \
49+ --stack-name ${STACK_NAME} \
50+ --parameter-overrides \
51+ Environment=${ENVIRONMENT} \
52+ ImageUri=${IMAGE_URI} \
53+ RDSHostname=${RDS_HOSTNAME} \
54+ RDSDatabase=${RDS_DATABASE} \
55+ RDSUsername=${RDS_USERNAME} \
56+ RDSPassword=${RDS_PASSWORD} \
57+ VPCId=${VPC_ID} \
58+ PrivateSubnets=${PRIVATE_SUBNETS} \
59+ Port=3001 \
60+ HostedZoneId=${HOSTED_ZONE_ID} \
61+ DomainName=${DOMAIN_NAME} \
62+ --capabilities CAPABILITY_NAMED_IAM \
63+ --region ${AWS_REGION}
0 commit comments