{"id":19746266,"url":"https://github.com/itzmanish/devops-roadmap","last_synced_at":"2025-07-03T07:05:38.920Z","repository":{"id":99441037,"uuid":"383362380","full_name":"itzmanish/devops-roadmap","owner":"itzmanish","description":"Exercise codes for Devops Roadmap https://www.notion.so/Devops-Roadmap-bbc0bc4141b449af9134457b756700c1","archived":false,"fork":false,"pushed_at":"2021-07-13T14:01:33.000Z","size":46,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-03T07:05:28.389Z","etag":null,"topics":["devops","devops-tools","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/itzmanish.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-06T06:23:39.000Z","updated_at":"2021-07-13T14:01:36.000Z","dependencies_parsed_at":"2023-04-05T15:17:02.658Z","dependency_job_id":null,"html_url":"https://github.com/itzmanish/devops-roadmap","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/itzmanish/devops-roadmap","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmanish%2Fdevops-roadmap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmanish%2Fdevops-roadmap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmanish%2Fdevops-roadmap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmanish%2Fdevops-roadmap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itzmanish","download_url":"https://codeload.github.com/itzmanish/devops-roadmap/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itzmanish%2Fdevops-roadmap/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263279261,"owners_count":23441680,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devops","devops-tools","terraform"],"created_at":"2024-11-12T02:13:57.434Z","updated_at":"2025-07-03T07:05:38.899Z","avatar_url":"https://github.com/itzmanish.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Devops Roadmap\n\n# Infrastructure\n\na) Write terraform script to create a multi-AZ setup(AWS Mumbai region). You can create an AWS account and use the free tier.\n\nIt should have\n\n- [x] Internet Gateway\n- [x] NAT.\n- [x] Application Loadbalancer.\n- [x] Two bastion machines (one per AZ). (Public subnet)\n- [x] Three service machines(2+1 AZ). The service box should be in the private subnet.\n- [x] Attach 8 GB extra EBS volume to the service box.\n- [x] One rds(my-sql/postgres).\n- [x] One S3 bucket. Create two users one with read-access and the other with read+write-access to the bucket.\n\nThe service boxes, RDS should be in the private subnet.\nUse the minimum size of the box and RDS.\n\n---\n\nNote: If you are selecting ap-south region and instance type t2.micro then azs must be set manually to [\"ap-south-1a\", \"ap-south-1b\"] only.\nBecause ap-south-1c doesn't support ec2 instance type t2.micro.\n\n---\n\n**Expectations**\n\n- [x] The code can be deployed on any region and adheres to its availability zones\n- [x] The same templates can be used for multiple environments.\n- [ ] Try to understand the difference between ALB, NLB and Classic Load Balancer.\n\n---\n\n# Software Provisioning\n\n### Docker Registry\n\n- [x] Create a docker registry backed by S3. The docker registry should run on the docker container.\n- [x] Deploy the Docker registry on three of the service box.\n- [x] The registry should be reachable via the ALB.\n- [x] Provision the docker registry by Ansible.\n\n---\n\nNote:\n\n```bash\nexport S3_ACCESSKEY='get access key credential of rw user from terraform output'\nexport S3_SECRETKEY='get secret key credential of rw user from terraform output'\nansible-playbook -i ec2-hosts.py lab.yml -v\n```\n\n---\n\n### Application Provisioning\n\n- [ ] Create a simple Django/RoR rest app backed by RDS for production and docker-compose for local testing.\n- [ ] Containerize the application using docker.\n- [ ] Use make files to run tests, create docker images and push to docker registry.\n- [ ] Use Ansible's dynamic inventory to provision the application on three service boxes.\n- [ ] The application should be reachable behind ALB.\n\nOnce the Software Provisioning is complete, reduce the count of service machines and its EBS volume via terraform code.\n\n---\n\n# Configure Jenkins\n\n- [ ] Install Vagrant on your local machine.\n- [ ] Provision two Ubuntu VMs via Vagrant.\n- [ ] Setup a Jenkins server on one VM and Jenkins slave on another VM.\n- [ ] Configure the Jenkins slave over SSH.\n\n---\n\n# Build and Deploy Pipeline\n\nUse the Jenkins setup to create a multi-branch CI/CD pipeline.\n\nCreate a declarative CI pipeline with the following stages:\n\n- [ ] Lint code\n- [ ] Run tests\n- [ ] Build Docker image for the application\n- [ ] Push to the docker registry\n\nRe-use the make file created earlier in pipeline stages.\n\nExtend the CD pipeline\n\n- [ ] Deploy on AWS Infrastructure via Jenkins using Ansible.\n\n**The status of the build pipeline should be sent to a Slack channel.**\n\n# Documentation\n\nOnce all of the exercises are completed, prepare a document which tells:\n\n- What were the assumptions for the solution?\n- Implementation details.\n- Try to capture the nuances, caveats and gotchas.\n- Learnings.\n\n# Resources\n\nAnsible\n\n[https://learning.oreilly.com/videos/hands-on-ansible/9780136746171/](https://learning.oreilly.com/videos/hands-on-ansible/9780136746171/) [https://learning.oreilly.com/videos/automation-with-ansible/9781800206496/](https://learning.oreilly.com/videos/automation-with-ansible/9781800206496/)\n\nSetting up your own docker registry\n\n[https://hub.docker.com/\\_/registry](https://hub.docker.com/_/registry)\n\nTerraform\n\nFor reference have a look at: [https://github.com/one2nc/terraform/tree/master/sitaram/terraform](https://github.com/one2nc/terraform/tree/master/sitaram/terraform)\n\nDocker\n\n[https://container.training/intro-selfpaced.yml.html#28](https://container.training/intro-selfpaced.yml.html#28)\n\n[https://dockerlabs.collabnix.com/workshop/docker/](https://dockerlabs.collabnix.com/workshop/docker/)\n\n[https://dockerlabs.collabnix.com/intermediate/workshop/](https://dockerlabs.collabnix.com/intermediate/workshop/)\n\n```\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitzmanish%2Fdevops-roadmap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitzmanish%2Fdevops-roadmap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitzmanish%2Fdevops-roadmap/lists"}