AWS DevOps engineers cover a lot of ground. The good ones maintain a cross-disciplinary skill set that touches upon a cloud, development, operations, continuous delivery, data, security, and more.
Here are the skills that AWS DevOps Engineers need to master to rock their role.
- Continuous delivery
For this role, you’ll need a deep understanding of continuous delivery (CD) theory, concepts, and real-world application. You’ll not only need experience with CD tools and systems, but you’ll need intimate knowledge of their inner workings so you can integrate different tools and systems together to create fully functioning, cohesive delivery pipelines. Committing, merging, building, testing, packaging, and deploying code all come into play within the software release process.
If you’re using the native AWS services for your continuous delivery pipelines, you’ll need to be familiar with AWS CodeDeploy, AWS CodeBuild, and AWS CodePipeline. Other CD tools and systems you might need to be familiar with include GitHub, Jenkins, GitLab, Spinnaker, Travis, or others.
An AWS DevOps engineer is expected to be a subject matter expert on AWS services, tools, and best practices. Product development teams will come to you with questions on various services and ask for recommendations on what service to use and when. As such, you should have a well-rounded understanding of the varied and numerous AWS services, their limitations, and alternate (non-AWS) solutions that might serve better in particular situations.
With your expertise in cloud computing, you’ll architect and build cloud-native systems, wrangle cloud systems’ complexity, and ensure that best practices are followed when utilizing a wide variety of cloud service offerings. When designing and recommending solutions, you’ll also weigh the pros and cons of using IaaS services versus PaaS and other managed services. If you want to go beyond this blog and master the skill, you must definitely visit AWS DevOps Training and get certified!
Logging, monitoring, and alerting, oh my! Shipping a new application to production is great, but it’s even better if you know what it’s doing. Observability is a critical area of work for this role. An AWS DevOps engineer should ensure that an application and its systems implement appropriate monitoring, logging, and alerting solutions. APM (Application Performance Monitoring) can help unveil critical insights into an application’s inner workings and simplify debugging custom code. APM solutions include New Relic, AppDynamics, Dynatrace, and others. On the AWS side, you should have deep knowledge of Amazon CloudWatch (including CloudWatch Agent, CloudWatch Logs, CloudWatch Alarms, and CloudWatch Events), AWS X-Ray, Amazon SNS, Amazon Elasticsearch Service, and Kibana. You might utilize tools and systems in this space, including Syslog, logrotate, Logstash, Filebeat, Nagios, InfluxDB, Prometheus, and Grafana.
- Infrastructure as code
An AWS DevOps Engineer will ensure that the systems under her purview are built repeatedly, using Infrastructure as Code (IaC) tools such as CloudFormation, Terraform, Pulumi, and AWS CDK (Cloud Development Kit). Using IaC ensures that cloud objects are documented as code, version controlled, and can be reliably replaced using an appropriate IaC provisioning tool.
- Configuration Management
On the IaaS (Infrastructure as a Service) side for virtual machines, once ec2 instances have been launched, their configuration and setup should be codified with a Configuration Management tool. Some of the more popular options in this space include Ansible, Chef, Puppet, and SaltStack. For organizations with most of their infrastructure running Windows, you might find Powershell Desired State Configuration (DSC) as the tool of choice in this space.
Many modern organizations are migrating away from the traditional deployment models of apps being pushed to VMs and to a containerized system landscape. In the containerized world, configuration management becomes much less important, but there is also a whole new world of container-related tools that you’ll need to be familiar with. These tools include Docker Engine, Docker Swarm, systemd-nspawn, LXC, container registries, Kubernetes (which includes dozens of tools, apps, and services within its ecosystem), and many more.
IT operations are most often associated with logging, monitoring, and alerting. You need to have these things in place to properly operate, run, or manage production systems. We covered these in our observability section above. Another large facet of the Ops role is responding to, troubleshooting, and resolving issues as they occur. To effectively respond to issues and resolve them quickly, you’ll need to have experience working with and troubleshooting operating systems like Ubuntu, CentOS, Amazon Linux, RedHat Enterprise Linux, and Windows. You’ll also need to be familiar with common middleware software like web servers (Apache, Nginx, Tomcat, Nodejs, and others), load balancers, and other application environments and runtimes.
Database administration can also be an important function of a (Dev)Ops role. To be successful here, you’ll need to have knowledge of data stores such as PostgreSQL and MySQL. You should also be able to read and write some SQL code. And increasingly, you should be familiar with NoSQL data stores like Cassandra, MongoDB, AWS DynamoDB, and possibly even a graph database or two!
- Collaboration and communication
Last (but not least) is the cultural aspect of DevOps. While the term “DevOps” can mean a dozen different things to a dozen people, one of the best starting points for talking about this shift in our industry is CAMS: culture, automation, measurement, and sharing. DevOps is all about breaking down barriers between IT operations and development. In this modern DevOps age, we no longer have developers throwing code “over the wall” to operations. We now strive to be one big happy family, with every role invested in the success of the code, the applications, and the value delivered to customers. This means that (Dev)Ops engineers must work closely with software engineers. This necessitates excellent communication and collaboration skills for any person who wishes to fill this keystone role of a DevOps engineer.