- AWS account
- IAM user with administrative permissions
- AWS CLI v2 installed and configured
- Terraform installed
- kubectl installed
- A custom domain purchased from any domain provider
- Example: Hostinger, Namecheap, GoDaddy, etc.
- Using GitHub OIDC removes the need for long-lived AWS access keys in GitHub Secrets by enabling short-lived, securely scoped role assumption from GitHub Actions workflows.
-
IAM Identity Provider:
-
Deployment Role:
-
Click on created
Identity provider -
Assign & Create a role named
GitHubActionsRole. -
Enter the following details:
Identity provider: Select the created one.Audience: Select the created one.GitHub organization: Your GitHub username or organization name where this repository is located.GitHub repository: Enter the repository name of this project (e.g., github-actions-kubernetes-masterclass).GitHub branch: The branch to use for this project (e.g., main).- Click on
Next.
-
Assign
AmazonEC2ContainerRegistryPowerUserpermissions. -
Click on
Next, enter the name of the role, and click onCreate role.
-
Add the following secrets/variable in the GitHub repository settings:
| Secrets | Description |
|---|---|
AWS_ROLE_ARN |
The ARN of the GitHubActionsRole |
AWS_REGION |
The AWS region where resources are deployed |
AWS_ACCOUNT_ID |
Your 12-digit AWS account number |
| Variable | Description |
|---|---|
DEPLOY_ENABLED |
true |
Log in to the AWS Management Console.
Go to:
Route 53 → Hosted zones
Click:
Create hosted zone
Enter:
Domain name: cloud2devops.online
Type: Public Hosted Zone
Click:
Create hosted zone
Copy all 4 NS records.
Example:
ns-1682.awsdns-18.co.uk
ns-1102.awsdns-09.org
ns-507.awsdns-63.com
ns-628.awsdns-14.net
Go to:
Hostinger → Domains → cloud2devops.online → Nameservers
Replace the existing nameservers with the Route 53 nameservers.
Save the changes.
Wait for DNS propagation.
Verify:
nslookup -type=NS cloud2devops.online 8.8.8.8- Google Public DNS (8.8.8.8) is used to validate DNS resolution independently of the local resolver (router/ISP DNS), ensuring authoritative DNS propagation from Route 53 is correct.
Important: The ACM certificate must be created in the same AWS region where the Application Load Balancer (ALB) is deployed.
Go to:
AWS Certificate Manager (ACM)
Select the region:
ap-south-1
Click:
Request certificate
Choose:
Request a public certificate
Add the domains:
cloud2devops.online
*.cloud2devops.online
Choose the validation method:
DNS validation
Click:
Request
Open the certificate.
Click:
Create records in Route 53
Click:
Create records
Wait until status becomes:
Issued
- Create the ECR repositories using the AWS CLI:
# For backend
aws ecr create-repository --repository-name skillpulse-backend --region ap-south-1
# For frontend
aws ecr create-repository --repository-name skillpulse-frontend --region ap-south-1Note: S3 bucket names are globally unique across AWS. Use a unique bucket name if
skillpulse-tfstateis unavailable.
- Create the S3 bucket:
aws s3api create-bucket \
--bucket skillpulse-tfstate \
--region ap-south-1 \
--create-bucket-configuration LocationConstraint=ap-south-1- Enable versioning:
aws s3api put-bucket-versioning \
--bucket skillpulse-tfstate \
--versioning-configuration Status=Enabled- Verify the versioning configuration:
aws s3api get-bucket-versioning --bucket skillpulse-tfstateRun the following command:
aws secretsmanager create-secret \
--name skillpulse-db \
--region ap-south-1 \
--secret-string '{
"MYSQL_ROOT_PASSWORD":"CHANGE_ME",
"MYSQL_USER":"skillpulse",
"MYSQL_PASSWORD":"CHANGE_ME",
"MYSQL_DATABASE":"skillpulse"
}'Follow Infra.md to provision the AWS VPC and Amazon EKS infrastructure using Terraform.

















