Introduction
Hey everyone! As you know, I’ve always been a data guy, diving deep into the realms of data science. But recently, I’ve decided to give DevOps a try. Why, you ask? Well, thanks to the amazing DevOps community and a special shoutout to “kubeden” for enlightening me on how fascinating this field can be, I thought, why not explore it? So, I decided to take a detour from my data journey and spend some time in the DevOps world.
My Background
I’ve been a developer for three years now, with some experience in cloud computing and AWS. So, I figured learning DevOps might be a bit easier given my background. Here’s a rundown of what I’ve learned in the past four days during my free time:
AWS
IAM
Users: Managing user accounts and permissions.
Groups: Organizing users into groups for easier management.
Policies (Permissions): Defining and assigning permissions to users and groups.
Amazon Elastic Container Service (ECS) and ECR
Deploy Docker Container:
Create Cluster: Setting up a new ECS cluster.
Service API:
Tasks: Running individual containers.
Load Balancer: Distributing traffic among containers.
Health Checker: Monitoring container health.
Elastic Beanstalk
Deploying and managing applications without worrying about the underlying infrastructure.
Docker
Basics
Installation of Docker CLI and Desktop: Getting Docker up and running on my machine.
Understanding Images vs. Containers: Learning the difference between Docker images and containers.
Running Ubuntu Image in Container: Starting a container with Ubuntu.
Multiple Containers: Managing multiple containers simultaneously.
Port Mappings: Mapping container ports to host ports.
Environment Variables: Setting environment variables for containers.
Dockerization of Node.js Application:
Dockerfile: Creating a Dockerfile for a Node.js app.
Caching Layers: Using caching to speed up builds.
Publishing to Hub: Pushing images to Docker Hub.
Advanced
Docker Compose:
Services: Defining multi-container applications.
Port Mapping: Configuring port mappings for services.
Env Variables: Setting environment variables for services.
Docker Networking:
Bridge: Default network driver.
Host: Using the host’s networking stack.
Volume Mounting: Persisting data using volumes.
Efficient Caching in Layers: Optimizing Dockerfile for caching.
Docker Multi-Stage Builds: Using multi-stage builds to reduce image size.
Nginx
Setting Up
Launching an EC2 Instance:
Create and configure a virtual machine using EC2: Choosing an instance type and region.
Assign a static IP: Ensuring consistent access.
Set up security groups: Allowing HTTP and HTTPS traffic.
Configuration
Accessing the EC2 Instance: Connecting via SSH.
Updating and Installing Necessary Packages: Keeping everything up-to-date.
Cloning the Project Repository: Downloading my Node.js app.
Installing Project Dependencies: Using npm install.
Running the Node.js Application: Managing with pm2.
Setting Up a Domain: Registering and pointing a domain to my Elastic IP.
Configuring Nginx: Proxying requests to the Node.js app.
Setting Up SSL with Let’s Encrypt: Using Certbot for SSL certificates.
Kafka
Key Concepts
High Throughput and Less Storage: Optimized for large data streams.
Components:
Producers and Consumers: Sending and receiving messages.
Topics and Partitions: Organizing messages.
Consumer Groups: Managing multiple consumers.
Models
Queue and Pub/Sub: Handling different messaging patterns.
Zookeeper: Managing Kafka infrastructure.
Admin, Producers, and Consumers: Setting up and using Kafka.
Serverless
Overview
No Server Management: Focusing on code, not servers.
Event-Driven Execution: Functions triggered by events.
Automatic Scaling: Scaling based on load.
Pay-per-Invocation: Billing based on function usage.
Practical Example
Creating a Lambda Function: Deploying a function to AWS Lambda.
Trigger Setup: Using API Gateway to invoke the function.
Testing: Verifying with a browser and Postman.
What’s Next: My Learning Plan for the Next 4 Days
In the next four days, I plan to dive deeper into the following areas:
More AWS Services: Expanding my knowledge of various AWS services beyond the basics.
Azure: Getting familiar with Microsoft’s cloud platform and its unique features.
Terraform: Learning infrastructure as code to manage cloud resources efficiently.
Ansible: Exploring configuration management and automation.
CI/CD: Strengthening my understanding of continuous integration and continuous deployment practices.
GitHub Workflows: Refining my skills in creating and managing workflows on GitHub.
Conclusion
So in these days, my free time goes to learning about DevOps and I will be sharing more about what I have learned, and in a new post, I will share the resources too.
For the DevOps community: Do let me know your thoughts and what should I need to put more focus on in this DevOps realm?
Stay curious, keep learning, and happy coding!