Posted on Leave a comment

Learning Infrastructure as Code: What You Need to Know for Cloud Native Engineering

As a new engineer, understanding Infrastructure as Code (IAC) is important for several reasons.

First, IAC is a key component of cloud native application development. It is the practice of managing and provisioning infrastructure using code, rather than manual configuration. By understanding how IAC works, you can build, deploy, and manage cloud-native applications more effectively.

Second, IAC allows for greater consistency and reproducibility. By using code to manage and provision infrastructure, it ensures the same configuration is used across different environments and that the infrastructure can be easily recreated if necessary. This makes it easier to handle increasing demand for computing power and storage.

Third, IAC promotes better collaboration and a DevOps culture. By using code to manage and provision infrastructure, it becomes easier for different teams and developers to work together on the same application.

Fourth, IAC allows for better tracking and version control of infrastructure changes. By keeping the infrastructure definition in code, it allows for tracking changes in the same way as code changes and reverting to previous versions if necessary.

In summary, understanding IAC is important because it is a key component of cloud native application development, allows for greater consistency and reproducibility, promotes better collaboration and DevOps culture, and allows for better tracking and version control of infrastructure changes. It is a powerful tool for building and deploying applications in a cloud environment and is essential for any engineer working in the field today.

Learning Materials

Here’s a list to get you started learning about Infrastructure as code (IAC). Note that some of these links may not be free and may require a subscription or payment. I receive no affiliate payments for these links.

Beginner:

Intermediate:

Advanced:

Videos to Watch

Cloud Native Summit – Five ways to manage your Infrastructure as Code at Scale / Ryan Cartwright

This document provides an overview of the challenges of cloud native engineering and the solutions available, such as remote state management, avoiding manual state changes, using CI tools, and implementing a reliable SAS offering. It also covers the features and security essentials that must be included in a terraform CI platform.

Possible Learning Path

Hands-on experience: Start by setting up a simple Kubernetes cluster and experimenting with different IAC tools such as Terraform, Ansible, and Helm. This can be done by following tutorials and guides and deploying these tools on a cloud platform like AWS, Azure, or GCP.

Theoretical learning: Once you have a basic understanding of IAC, you can begin to explore the underlying concepts and technologies such as configuration management, version control, and automation. This can be done through online resources such as tutorials, courses, and documentation provided by IAC tools, as well as books and blogs on the topic.

Understanding the principles and best practices: IAC is an important aspect of modern infrastructure management, so it’s important to understand the key principles and best practices of IAC, such as versioning, testing, and rollback.

Joining a community: Joining a community of IAC enthusiasts will help you connect with other people who are learning and working with IAC for Kubernetes. This can be done through online forums, meetups, and social media groups.

Practice, practice, practice: As with any new technology, the best way to learn is by doing. The more you practice deploying and using IAC tools in a Kubernetes cluster, the more comfortable and proficient you will become with the technology.

A Note from the Architect

Infrastructure as Code (IaC) is one of the most exciting developments in cloud deployments. It is a way of describing and provisioning infrastructure using code, instead of manual configuration. This makes it easier to manage and maintain over time, as well as enabling faster scaling, testing, and deploying of cloud native solutions.

Version control is essential for modern operations teams, as it allows them to track changes to the infrastructure over time and roll back to a previous version if something goes wrong. Developers should also learn it, as it allows them to collaborate more easily with operations teams and to understand the infrastructure that their code is running on.

IaC helps to ensure quality by allowing for automated provisioning and configuration of infrastructure. It also helps to ensure security, as it enables more controlled and automated access to infrastructure, making it easier to identify and isolate any malicious activity.

In conclusion, IaC is a great way to deploy cloud native solutions, as it makes it easier to manage and maintain over time. Version control is essential for modern operations teams, and developers should also learn it. Writing IaC helps to ensure quality and can help with security by allowing for more controlled and automated access to infrastructure.

Connect with Shawn
Connect with Shawn

Connect with me on LinkedIn. It’s where I’m most active, and it’s the easiest way to connect with me.

Posted on Leave a comment

An Introduction to Continuous Integration and Continuous Deployment (CI/CD): Understanding the Benefits, Learning Materials, Videos to Watch and a Possible Learning Path

As a new engineer, understanding the concept of continuous integration and continuous deployment (CI/CD) is important for several reasons.

First, CI/CD is a key component of cloud native application development. It is the process of automatically building, testing, and deploying code changes as soon as they are committed to the code repository. By understanding how CI/CD works, you will be able to build, deploy, and manage cloud-native applications more effectively.

Second, CI/CD allows for faster development and deployment. By automating the build, test, and deployment process, it enables developers to make changes to the code and have them deployed to production faster. This facilitates faster innovation and time-to-market for new features.

Third, CI/CD promotes better collaboration and DevOps culture. By automating the process of building, testing, and deploying code changes, it becomes easier for different teams and developers to work together on the same application.

Fourth, CI/CD allows for better quality and reliability of the software. By automating the testing process, it ensures that code changes are tested as soon as they are made, which helps to catch any bugs or errors early in the development cycle.

In summary, as a new engineer, understanding the concept of CI/CD is important because it is a key component of cloud native application development, allows for faster development and deployment, promotes better collaboration and DevOps culture, and allows for better quality and reliability of the software. It is a powerful tool for building and deploying applications in a cloud environment and is essential for any engineer working in the field today.

Learning Materials

Here’s a list to get you started learning about CI/CD. Note that some of these links may not be free and may require a subscription or payment. I receive no affiliate payments for these links.

Beginner:

Intermediate:

Advanced:

Videos to Watch

The Foundations of Continuous Delivery

Continuous Delivery is a revolutionary approach to software development that focuses on efficient feedback, strong engineering discipline, reducing the amount of work, and cycle time reduction. Automation is essential to reducing cycle time and the deployment pipeline is used to prove that changes are fit for production.

Possible Learning Path

Hands-on experience: Start by setting up a simple Kubernetes cluster and experimenting with different CI/CD tools such as Jenkins, Travis CI, and GitLab CI/CD. This can be done by following tutorials and guides and deploying these tools on a cloud platform like AWS, Azure, or GCP.

Theoretical learning: Once you have a basic understanding of CI/CD, you can begin to explore the underlying concepts and technologies such as pipeline management, version control, and testing. This can be done through online resources such as tutorials, courses, and documentation provided by CI/CD tools, as well as books and blogs on the topic.

Understanding the principles and best practices: CI/CD is an important aspect of modern software development, so it’s important to understand the key principles and best practices of CI/CD such as automation, testing, and deployment.

Joining a community: Joining a community of CI/CD enthusiasts will help you connect with other people who are learning and working with CI/CD for Kubernetes. This can be done through online forums, meetups, and social media groups.

Practice, practice, practice: As with any new technology, the best way to learn is by doing. The more you practice deploying and using CI/CD tools in a Kubernetes cluster, the more comfortable and proficient you will become with the technology.

A Note from the Architect

I’m about to tell you how I used to publish my websites way back in the day. You see, back then, many of us actually kept a really powerful server under our desks. I had such a server. This server had a network card with two different IP addresses bound to it. One was a Public IP address. Yes, I had a public IP address bound directly onto the network card of the server sitting under my desk. I also had a private IP address so that I could share the website’s folder on the network for the whole company.

Ok, stop laughing, you’re making me feel bad. I haven’t even mentioned the fact that I edited my Active Server Pages directly from that folder. That’s right, changes went directly from development to the internet with no steps in between. I had lots of files that were named things like, “about-us.asp.old, about-us.asp.older, about-us.asp.donotuse.’

Well, luckily those days are behind us. Today we use CICD (Continuous Integration and Continuous Deployment).

CICD is a software development practice that involves automatically building, testing, and deploying code changes. The basic idea behind CICD is to catch and fix errors as early as possible, which helps to prevent bugs and other issues from making it into production. This is accomplished by integrating the code changes into a central repository and then running a series of automated tests and builds.

It’s more popular now because it helps to improve software quality, increase collaboration among developers, and reduce time to market for new features. It also helps to ensure that software is always in a releasable state, which makes it easier to roll out new features and bug fixes.

One of the key enablers of CICD is version control. Version control is a necessity for modern development because it allows developers to track changes to the codebase over time, collaborate with other developers, and roll back to a previous version if something goes wrong. There’s no longer a need to append extra extensions onto files you might want to keep as backup.

Pipelines help to ensure quality by automating the process of building, testing, and deploying code changes. This makes it easier to catch and fix errors early in the development process, which helps to prevent bugs and other issues from making it into production. It can also help with security by establishing a software supply chain. When code changes are automatically built, tested and deployed, it’s easier to track, identify and isolate any malicious code that may have been introduced in the codebase.

Basically, CICD is a software development practice that involves automatically building, testing, and deploying code changes. It helps to improve software quality, increase collaboration among developers, and reduce time to market for new features. Version control is a necessity for modern development, and pipelines help to ensure quality and can help with security by establishing a software supply chain.

Connect with Shawn
Connect with Shawn

Connect with me on LinkedIn. It’s where I’m most active, and it’s the easiest way to connect with me.

Posted on Leave a comment

Understand Auto-Scaling to Maximize Cloud Native Application Development

As a new engineer, understanding auto-scaling is important for several reasons. It is a key component of cloud native application development, allowing for greater scalability and cost efficiency, better collaboration and DevOps culture, and better availability and resilience. Auto-scaling automatically adjusts the number of resources used by an application based on current demand, ensuring the system can handle a large number of requests while minimizing cost. It also makes it easier for different teams and developers to work together on the same application. Auto-scaling is a powerful tool for building and deploying applications in a cloud environment, and is essential for any engineer working in the field today.

As a new engineer, understanding the concept of auto-scaling is important for several reasons.

First, auto-scaling is a key component of cloud native application development. It is the process of automatically adjusting the number of resources (such as servers) used by an application based on the current demand. By understanding how auto-scaling works, you will be able to build, deploy, and manage cloud-native applications more effectively.

Second, auto-scaling allows for greater scalability and cost efficiency. By automatically adjusting the number of resources used by an application, it ensures that the system can handle a large number of requests while minimizing the cost of running the application. This makes it easy to handle the increasing demand for more computing power and storage.

Third, auto-scaling allows for better collaboration and DevOps culture. By automating the process of scaling resources, it becomes easier for different teams and developers to work together on the same application.

Fourth, auto-scaling allows for better availability and resilience, by automatically adjusting resources when traffic increases, it ensures that the application is always available to handle requests, and when traffic decreases, it reduces the resources which allows to save cost.

In summary, as a new engineer, understanding the concept of auto-scaling is important because it is a key component of cloud native application development, allows for greater scalability and cost efficiency, better collaboration and DevOps culture, and better availability and resilience. It is a powerful tool for building and deploying applications in a cloud environment and is essential for any engineer working in the field today.

Learning Materials

Here’s a list to get you started learning about auto-scaling. Note that some of these links may not be free and may require a subscription or payment. I receive no affiliate payments for these links.

Beginner:

Intermediate:

Advanced:

Videos to Watch

Kubernetes cluster autoscaling for beginners

Kubernetes is a powerful tool for deploying applications, but it’s important to understand the resource requirements of the applications and set resource requests and limits to allow the scheduler to make informed decisions when placing pods onto nodes. This will help ensure that the nodes are not over-utilized and that applications are given the resources they need.

A Possible Learning Path

Hands-on experience: Start by setting up a simple Kubernetes cluster and experimenting with different auto-scaling mechanisms such as Kubernetes Horizontal Pod Autoscaler and Cluster Autoscaler. This can be done by following tutorials and guides and deploying these services on a cloud platform like AWS, Azure, or GCP.

Theoretical learning: Once you have a basic understanding of auto-scaling, you can begin to explore the underlying concepts and technologies such as Kubernetes Horizontal Pod Autoscaler and Cluster Autoscaler. This can be done through online resources such as tutorials, courses, and documentation provided by Kubernetes, as well as books and blogs on the topic.

Understanding the principles and best practices: Auto-scaling is an important aspect of a microservices architecture, so it’s important to understand the key principles and best practices of auto-scaling, such as scaling policies, monitoring, and alerting.

Joining a community: Joining a community of Kubernetes enthusiasts will help you connect with other people who are learning and working with auto-scaling for Kubernetes. This can be done through online forums, meetups, and social media groups.

Practice, practice, practice: As with any new technology, the best way to learn is by doing. The more you practice deploying and using auto-scaling mechanisms in a Kubernetes cluster, the more comfortable and proficient you will become with the technology.

A Note from the Architect

Before I explain an auto-scaler, let me quickly tell you the story of the Porsches crashing into walls every 15 minutes.

Back when I was a newer developer working for the e-commerce department of an electronics parts seller, we had a web outage. We had no idea why the webserver was down. This was in the olden days when the best monitoring tool we had was named ELMA. It was better for debugging and development than anything you would want to put into production.

The e-commerce website was down and we developers were scrambling to find out why. The president of the company was standing in our cubicles, shaking his head and looking at his watch. Every few minutes he would proclaim loudly, “There goes another one.”

After a while, one of our more senior developers asked, “’Another one,’ what, sir?”

He replied, “You just crashed a brand new Porsche into a brick wall.”

That’s how much money we were losing every 15 minutes while the site was down.

We found out that the problem had nothing to do with our code. It was an issue with our servers. We didn’t have enough. We had recently opened up to new markets overseas and this added traffic was crashing our old Internet Information Server systems. We didn’t have auto-scaling.

Auto-scaling is like having a personal trainer for your infrastructure. It makes sure that your infrastructure is always in tip-top shape by automatically adjusting the number of resources (like servers or containers) based on the current demand.

In traditional IT environments, auto-scaling is often done manually, which can be time-consuming and error-prone. But in a cloud-native environment like Kubernetes, auto-scaling is built into the platform and can be easily configured with Kubernetes resources. This makes it a lot more efficient and reliable.

With Kubernetes, you can set up auto-scaling rules that specify how many resources you want to have available for a given service. For example, you can set a rule that says “if the CPU usage goes above 80% for more than 5 minutes, then add another server.” And when the demand goes down, the system will also automatically scale down the resources. This way, you can ensure that you always have the right amount of resources to handle the current load and also save money by not having unnecessary resources running.

Another benefit of using auto-scaling in a cloud-native environment is that it allows you to handle unexpected traffic spikes, such as a viral social media post or a news article. This way, you don’t have to worry about your service going down because of a sudden increase in traffic.

So, using auto-scaling in a cloud-native environment has many benefits, including increased efficiency, reliability and cost savings. Plus, it’s like having a personal trainer that makes sure your infrastructure is always ready for action. It might also save on the number of Porsches you crash into brick walls.

Connect with Shawn
Connect with Shawn

Connect with me on LinkedIn. It’s where I’m most active, and it’s the easiest way to connect with me.