AWS DevOps engineers cover a lot of ground. The good ones maintain a cross-disciplinary skill set that touches upon cloud, development, operations, continuous delivery, data, security and more.
Here are the skills that AWS DevOps Engineers need to master in order to rock their role.
1. Continuous delivery
For this role, you’ll need a deep understanding of continuous delivery (CD) theory, concepts and real-world application of them. 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 in order 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 to 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. You’ll also weigh the pros and cons of using IaaS services versus PaaS and other managed services when designing and recommending solutions.
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 actually doing. Observability is a critical area of work for this role. An AWS DevOps Engineer should ensure that an application and the systems it runs on implement appropriate monitoring, logging and alerting solutions. APM (Application Performance Monitoring) can help unveil critical insights into an application’s inner workings and make debugging custom code much easier. 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. Other tools and systems that you might utilize in this space include syslog, logrotate, Logstash, Filebeat, Nagios, InfluxDB, Prometheus and Grafana.
4. Infrastructure as code
An AWS DevOps Engineer will ensure that the systems under her purview are built in a repeatable manner, 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 that they can be reliably replaced using an appropriate IaC provisioning tool.
5. 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 that have a majority 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 VM’s, and over 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. Some of 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 is most often associated with logging, monitoring and alerting. These are the things you need to have in place in order 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. In order 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 on 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!
9. 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 different 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 being delivered to customers. This means that (Dev)Ops engineers need to work very 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.
Find out how you stack up against others in the DevOps Engineer role by getting your Role IQ.