Next-gen Cloud Operations

Moving from a traditional Operations Role to a Cloud/DevOps Engineer Role

If you are in an infrastructure or operations role and want to make the move to a new role perhaps Cloud/DevOps engineer or an SRE role,  maybe your company is making changes which means your role is evolving then this article may help to identify some of the skills you need to make this move.  

As you read about some of these tools and skills you need to learn you will see many that you may feel fit with a developer role not a operations engineer but keep reading and embrace the code. 

It is worth noting that you have a lots of valuable and important knowledge you will bring with you to any new role. All the areas we cared about before, as shown in the operabilty diagram below, we still care about now, you may be managing similar solutions and some new ones just with some new tools and methods.

I will be talking about some of the tools I use and what I found useful.  Not all of it may apply to you but I hope you find some of it useful.  I come from a background of using Microsoft platforms and I specialize in Azure so this will be reflected in some of the tools I mention.  This is not aimed as a technical guide but just to highlight some of the tools and working patterns I use and how I built up these skills over the years.  While I may mention tools/cloud specific information this can be replaced with your tools/providers of choice.

Hopefully you are already writing scripts to help automate some of those mundane and repetitive tasks you have to carry out in your daily role.  If you aren't, start NOW, the best time to start was yesterday the next best time to start is now!  Many years back I started to use PowerShell and got involved with an initiative to improve our support experience by identifying opportunities to save time and effort through automation.

Learning scripting tools like PowerShell will give you some great transferable skills you can use as we move onto other tools for Infrastructure as Code (IaC).  There is some great learning material online from Microsoft and other platforms.  One of the resources I found most useful was Learn PowerShell in a month of Lunches.
If you are writing code and it is useful to you it will be useful to your team and the wider community, so share it.  The best way to do this is by using some kind of version control. A lot of people use GitHub but other options are available.  I would recommend signing up to GitHub and create your first repository.  There is a lot of material to help get you started and GitHub have their own Learning Labs
 
By initially just saving these scripts to a repository that is accessible either privately or publicly it means it is not just stuck in a file on your computer. Using a version control system you are learning valuable skills you will need for the next steps in your journey.  At first you may just be adding and updating your own code.  As you advance you can start contributing and collaborating with others to update and maintain this code.
 
In addition as we use this code in production environments we get the other key benefit which is the version control itself, the ability to see changes and rollback changes to previous versions if needed. 

Feel free to checkout my github account.
View of Cityscape 
 Most companies have or will be thinking about moving services to a Cloud Platform whether this is AWS, Azure or Google Cloud Platform GCP.  There are certifications and plenty of training material available from the providers themselves and other companies like Pluralsight, A Cloud Guru and Udemy .  The Microsoft Learn Platform is really good and provides sandbox environments in labs to let you test your skills in Azure without even having an account.   Following a learning path for one of the Cloud providers exams and sitting the exam if you wish is one of the best ways to get a good understanding of the fundamentals and a good overview of the services they provide.

Moving to a Cloud role has some interesting challenges.  In my previous roles we had a team for Windows, Linux, Network Security and Storage meaning as a Windows Engineer I had some understanding but no day-to-day experience with Storage and NetSec.   When you move to a cloud role you will be responsible for Networking and Storage so these are areas you may need to brush up on. 
 
As you make the move to cloud you will find it opens new opportunities to use new services.  Rather than using traditional Infrastructure as a Service (IaaS) you can start to explore some of the Platform as a Service(PaaS) and Software as a Service(SaaS) offerings which can evolve the kind of solutions you can design and provide to customers.
 
When you start using a cloud platform and even if you have used it for a while the portal is a great way to quickly deploy resources and to get an understanding of the configuration requirements by stepping through a deployment. 
 
A big advantage of the cloud is the ability to spin up resources quickly and easily, you can then delete them when done to reduce the cost.  With Azure if you have Visual studio subscriptions you can get some free monthly credits which allow you to learn and deploy resources without spending money.  Check if your company have any platform benefits like this one from Microsoft that you can leverage. 
 
Below are some key resources when deploying resources to AWS, Azure and Google.  Each resource type will come with different best practices you should famliarize yourself with when you come to deploy production ready solutions.

AWS
Azure
GCP
DevOpsGroup 
As you scale and you need to deploy lots of resources and environments like dev, test, prod using the portal will be slow and prone to errors when trying to repeat the processes. This is where we turn to Infrastructure as Code (IaC) this is where we write scripts or templates which contain the configurations to deploy resources to our chosen platform.  These templates provide a way to deploy resources in a reliable and repeatable way.  There are functions in the templates like 'count' which allow us to deploy multiple instances of resources easily. 
 
Each platform has its own IaC offering;


or 

Terraform
Terraform has providers for many platforms not just the cloud platforms checkout the list of providers to see just how many services you can manage through Terraform.
 
 
Straight away you can see one advantage for Terraform, if you need to work with multiple cloud platforms you can use one tool for deployment.  Just to make this clear this does not mean you can write your templates and deploy your resources to any platform. The resources and APIs are very different on each platform and require specific configuration templates.  What it does mean is you only need to learn one language to deploy to all platforms.

I use Azure and have a lot of experience using ARM templates, they are written in JSON and can be quite difficult to work with and to learn.  I prefer working with Terraform (this is a blog in itself) for the general deployment method of multiple resources in separate files easily, the ability to plan and review changes for deployment and the modules. I think as a beginner Terraform is easier to read and learn.  We won't go into this here with and there are some other nice features which make it For a lot of work now I prefer to use

You should make sure you are saving this code to your version control platform.  This will allow you to share your work, collaborate with others and importantly for our Infrastructure changes provide a way to roll back changes if we see any issues.

Once you have created your IaC templates you can deploy from your desktop but this has many issues, much like storing your code on your desktop this will not be a good way to work as part of a team and you hit issues like if others try to run it they may get a different experience from their desktops due to differences in platforms and software.  These pipelines tools provide a common deployment platform.

Tools like Terraform have specific features like the backend state which allow us to store the desired state of our configurations in a central location on the cloud so we can each work from the same source of truth.  This makes it easy to use as a team via your chosen pipeline platform.
 
Using a pipeline tool allows you to deploy resources in a consistent reliable way using the code we have stored in our repositories.  I have experience with deploying resources using Azure DevOps and GitHub Actions but there are plenty of pipeline tools like Jenkins, Octopus and others where you can achieve the same thing.

Continuous Integration means every change we make to an application is built and tested continuously.  In an ideal world we have tests in place that all changes have to pass before we can deploy resources.

Continuous delivery is the next step where not only is my code built and tested when checked in but we deploy this continuously.  We can deploy out code automatically through our environments.  Many of the pipeline tools include 
 
As your solutions grow you will find you have many different resources and it can get quite large.  using a pipeline tool allows you to deploy your resources in stages in a logical fashion to build your end solution.
I like many people now mainly use Visual Studio Code for all my code editing. It is free and works on all platforms Windows, Linux and Mac. There is a vast marketplace of addons to help improve the experience depending on what you are using it for. I use the extensions for Terraform, ARM and PowerShell.

 
Over the years I have found one of the best motivators is to pair up with someone or a group who you can work with on all these areas we have covered.  I find it introduces a bit of healthy competition and also means you have someone to bounce ideas off and you can learn from each other as you use these various new tools and platforms.  
 
As you come to work on projects that will be used in production environments you will also want to introduce more quality controls and guard rails to ensure you can deploy safely.  Having a team working together you can ensure good quality code through the use of scripting guidelines and peer reviews/programming.  Through this process you will come to learn more and improve you own code.  As new people join the team it is a good way to mentor others and ensure they can learn in a safe environment with good support.
Don't get fixated on sticking to one toolset.  Find the right tool for the job.  Learning all the core skills above help make it easier to adapt and learn new tools as they come along or the need arises. I find my pipelines for deploying resources to Azure are often a mix of Terraform, ARM, PowerShell and Azure CLI.  For deployment we have customers that use different tools like Azure DevOps, Jenkins, Octopus and we often have to adapt to work within existing tools.  As I mentioned before, having an understanding in one one tool set provides transferable skills for working with other tools and applications.
By going down this path you are now coding, using version control and using pipelines for CI/CD  . . . . you sound a lot like a developer to me!  I have found that by using these methods and learning these skills which are close to what developers are using has made it easier for me to work with and collaborate with developers.  This understanding helps close the gap between dev and ops.  This allows for closer collaboration for the deployment of infrastructure and applications.

Developing these skills you will be more attractive to the job market, it may help with internal promotions but ultimately I hope you will find working in this way more rewarding and challenging. I know I am now using tools and learning code which I find more enjoyable than previous roles.

Best of luck of luck with learning these new tools, services and happy coding.    

Comments

Popular posts