What is AWS DevOps?
DevOps is a culture, as well as a set of practices and technologies that help organizations deliver software faster and with higher quality. The key tenet of DevOps is strong cooperation between developers and operations specialists, with shared responsibility for the successful deployment and operation of software services.
Some of the important practices of DevOps are automating infrastructure using infrastructure as code (IaC), continuous integration (CI) which involves automating the build cycle, and continuous delivery (CD), which automates deployment of new releases to production.
It is increasingly common to build DevOps infrastructure on the public cloud. Amazon Web Services (AWS) is a common choice. We’ll review Amazon services and features, and best practices that can help your team build your DevOps platform in the cloud.
In this article, you will learn:
AWS DevOps Tools
Continuous Integration
Software developers use continuous integration (CI) in preparation for running automated builds and tests. By regularly merging code changes into a central code repository, they can locate and fix bugs quicker, thereby improving software quality and minimizing validation time ahead of a new software release.
AWS offers a suite of CI services, which includes:
- AWS CodeCommit
A managed source control service for hosting private git repositories, which is scalable and secure. Instead of implementing a dedicated source control system, you can use CodeCommit as a managed service, with no need to install, configure and operate software.
Use CodeCommit to store code, binaries, and everything in between. It fully supports standard Git functionality, integrating with all your existing Git-based tools. CodeCommit also provides online tools for browsing and editing code to foster collaboration.
- AWS CodeBuild
A fully managed service for continuous integration, CodeBuild compiles source code, executes tests, and helps create ready-to-deploy software packages. Instead of provisioning, managing, and scaling your own build servers, CodeBuild gives you access a complete build infrastructure that can include AWS CodeCommit, Atlassian BitBucket, Github, and Amazon S3.
Due to its scalability, CodeBuild can process several builds at the same time, using pre-configured Windows and Linux environments. It integrates with Jenkins, Spinnaker, and other common open source tools, and lets you use Docker containers or other customized build environments.
- AWS CodeArtifact
An artifact repository service that is fully managed, enabling storage, publication, and sharing of software packages used in software development projects.
Software development teams increasingly rely on open-source packages for common application packaging tasks. It is critical to ensure that these open source tools are updated and free of vulnerabilities. CodeArtifact provides built-in controls to ensure that the latest versions are in use for all tools.
Required software packages and dependencies can be fetched from public repositories automatically using predetermined rules.
Continuous Delivery
Continuous delivery has become a mainstream practice in software development, enabling teams to rapidly deliver software releases and deploy them to production automatically. This enables vastly improved development velocity, and improves quality by responding to customer requirements in small, incremental releases.
AWS provides continuous delivery DevOps tools that can automatically prepare code changes for release to production. After the build stage, code changes are deployed to a testing environment, extending the continuous integration process, and subsequently deployed to production.
The process ensures that all build artifacts have been tested and verified to be deployment-ready, according to standardized parameters.
AWS continuous delivery tools include:
- AWS CodeDeploy
Automates software deployments and handles complex application updates, minimizing errors due to manual operations. CodeDeploy is a fully managed deployment service, which scales dynamically based on deployment requirements. It can deploy to on-premises servers, Amazon EC2 compute instances, AWS Fargate, AWS Lambda, and other compute services.
- AWS CodePipeline
Allows modeling, visualizing, and automating software release pipelines. Lets you define the entire release process, including pre-production environment deployment, application testing, and production releases.
Based on the defined workflows, CodePipeline builds, tests and deploys the application each time code is changed. You can integrate tools from the AWS Partner Network (APN), as well as your own proprietary tools, into any stage of the release process, to create an end-to-end delivery solution.
Performing Common DevOps Tasks Using Amazon Services
The following best practices can help you make the most of your DevOps infrastructure on AWS.
Deploying Microservices
Microservices are a key component of most DevOps architectures. Building applications as small, decoupled components makes them easier to test, deploy, and maintain. On AWS there are two primary ways to deploy microservices:
- Containers—Amazon Elastic Container Service (ECS) is an easy to use orchestrator that can help you set up and manage containers. For larger deployments, use Elastic Kubernetes Service (EKS) to run clusters of containers fully compatible with the Kubernetes project.
- Serverless—you can use AWS Lambda to run serverless functions and pay per execution time, without having to manage servers. Lambda functions are perfect for smaller microservices that perform processing on event streams.
Many microservices applications are stateful and require persistent storage. You can leverage a range of AWS database managed services, both SQL and NoSQL, or other storage options such as Amazon S3 and cloud-based file shares using Elastic File Storage (EFS).
Monitoring and Logging
DevOps teams set up monitoring and alerting, and also proactively collect and analyze logs, to understand utilization, measure the impact of changes to software services, and troubleshoot problems.
Amazon CloudWatch is the central AWS monitoring tool designed for DevOps and site reliability engineering teams. It collects logs from all Amazon services, and can collect data from your custom services and workloads. It lets you easily visualize data using dashboards and notify teams of important changes using alerts and notifications.
Leveraging Infrastructure as Code
DevOps teams use infrastructure as code (IaC) to set up environments automatically based on predefined, tested configurations. The IaC model thrives on the cloud, and makes it possible to automate virtually any deployment task, and simulate production-like environments for development and testing purposes.
CloudFormation is Amazon’s central IaC platform, which allows DevOps teams to define simple, human-readable templates that can model complex environments, provision them consistently, and manage them over time.
Conclusion
Amazon provides a variety of DevOps tools and technologies:
CI tools
- AWS CodeCommit
- AWS CodeBuild
- AWS CodeArtifact
CD tools
- AWS CodeDeploy
- AWS CodePipeline
Microservices
- Amazon ECS
- Amazon EKS
- AWS Lambda
Monitoring and logging
- AWS CloudWatch
Infrastructure as Code
- Amazon CloudFormation
We hope this brief review of the Amazon toolset will be of help as you set up your DevOps environment in the public cloud.
Interested in Microservices? Learn more about microservices and security here