Cloud deployment (AWS)
Microservice stack supports cloud deployment out of the box. When you start your Microservice stack project using Configuration generator generates infrastructure/cloud
folder. This folder contains Terraform configuration required to deploy the whole stack to AWS with just few commands.
In order to deploy your application to the cloud, you will need to have Terraform (https://www.terraform.io/) installed and an AWS account setup with a domain parked inside Route53.
Once your AWS account is set up, proceed to install AWS CLI on your machine and configure it. You can follow the following guide to do that https://docs.aws.amazon.com/cli/latest/userguide/getting-started-prereqs.html.
After the AWS CLI is set up, you can proceed with installing the infrastructure. Move to the infrastructure/cloud
folder and execute the following commands, which will set up the Terraform environment
Once this is done, go into the variables.tf
file and change variables to your configuration. Bellow is brief explanation of that these variables mean
Environment name The name of your environment/deployment. Resources such as VPC and EKS will be named after this.
Domain Top level domain of your application. When installing the configuration,
api
subdomain will be automatically added to the domain value, so you don't have to.Zone ID The ID of Route53 zone the domain is located in.
- Load balancer URL
Load balancer DNS record, this should stay empty on the first Terraform run. After the first run is complete, you will be able to copy the load balancer URL from AWS console and replace the variable. After that run the
terraform apply
again, andapi
subdomain will be pointed to the load balancer.
First Terraform run
After variables are updated, you can run terraform apply
command. This command will create a plan of what will be changed inside the AWS and upon confirmation, it will create all the shown resources inside the AWS.
After the Terraform job has finished, you can verify that your cluster has been setup by getting Kubeconfig
using the following command
aws eks update-kubeconfig --name <cluster-name> --region <region>
Please keep in mind that the cluster name is the same as the environment_name
variable you set inside the variables.tf
.
When AWS CLI command completes, you can see the cluster using the kubectl
cli.
kubectl get nodes
Second Terraform run
With the cluster setup, we can now finalize the deployment by providing the load_balancer_url
variable to variables.tf
file. To get the load balancer url go to EC2->Load Balancers
and copy the newly created load balancers DNS name. With the variables updated, you can again run terraform apply
command to apply the changes and finish AWS configuration.
Github CI
The cluster is now setup and accessible, the only thing left to do is set up the Github CI secrets, so you can start deploying your application.
If you opted for output_secrets
option, all the secrets required for Github CI configuration will be located inside the infrastructure/cloud/outputs
folder. If not, you will have to get the secrets by looking into the terraform state.
To setup the secrets go to your Github repository settings, and select Security->Secrets and variables->Actions
. There you can add new repository secrets
AWS_ACCESS_KEY_ID Github actions IAM users access key, located in
outputs/iam_user_credentials.json
AWS_SECRET_ACCESS_KEY Github actions IAM users secret key, located in
outputs/iam_user_credentials.json
AWS_REGION The AWS region you deployed to
CLUSTER_NAME The name of the cluster, should be the same as
environment_name
variableAWS_ECR_REPOSITORY Should equal
<CLUSTER_NAME>_container_repository
After these secrets are set, you can deploy your applications by tagging your code using v*.*.*
tag.
Last updated