I recently passed my AWS Developer Associate exam and learned a tremendous amount about AWS code tools in the process. I refer specifically to the following services:
Egads! So much “code”… you may be confused already. Luckily for you, we’re going to look at brief overviews of these services, how they are used, and how they relate with each other. Let’s dive in!
This service is used to store source-code (called a “repository”) and provide version control – very similar to GitHub, with which you are already likely familiar. In fact, CodeCommit integrates with open-source Git – so any existing Git deployments can likely be utilized with, or migrated to, CodeCommit without any issues. In addition, CodeCommit supports the wildly popular Jenkins – so if your organization is already entrenched with Jenkins, no problem.
CodeCommit has limitless storage and accepts files of up to 2GB in size – which is vastly more headroom than 99.9% of developers will ever need for a code repo. AWS S3 is used for backend storage – as well as IAM for all user access and KMS for encryption purposes. This allows you to maintain a security posture consisent with you existing AWS assets, which can be especially helpful under unique compliance situations.
CI/CD stands for “Continuous Integration / Continuous Delivery”, which are vital concepts in today’s DevOps environment. The idea is to make code testing and deployment as efficient as possible in order to catch errors before going live and prevent unecessary downtime. To that end, AWS offers CodeBuild – a native Continuous Integration service. (Continuous Delivery is handled by CodePipeline, which we’ll look at next.)
You may have heard of Jenkins (mentioned above) – CodeBuild takes the place of Jenkins in the grand scheme of things. This does not automatically make CodeBuild an ideal replacement in every case for organizations which already leverage Jenkins – as the latter has a rich support and integration base not yet held by CodeBuild. But where appropriate – such as in cases of standing up completely new CI/CD pipelines – CodeBuild carries some significant advantages over Jenkins, like limitless scalability with no need to manage servers running CI/CD software.
This is the Continuous Delivery half of the CI/CD model. Where CodeBuild is concerned with individual specific segments of code, CodePipeline is more of an orchestration of all CodeBuild jobs (or Jenkins, etc) performed in specific overarching workflows important to the application – known as a “pipeline”.
To utilize CodePipeline, we define different stages of a pipeline – like Source, Test, and Deploy. The pipeline moves code jobs through each stage, ensuring that all defined tests and tasks complete successfully before finally pushing out production code in the Deploy stage. This allows us to use CodePipeline to efficiently push code through all necessary stages of testing and keep delivery as up-to-date as possible.
This service is where inter-AWS integration starts to really shine. CodeDeploy works with AWS compute services (EC2, Lambda, and ECS) to make code deployment as quick and seamless as possible. Using CodeDeploy to deliver updated code to applications running on these services offers a number of serious benefits, such as fully automated deployment on basically limitless numbers of instances with very little downtime – or even zero downtime, depending on your deployment model.
If you’re running applications on AWS compute services, CodeDeploy is definitely a top-tier deployment tool of choice.
One of the most important aspects of application development is a trackable project process that makes sense and vectors efforts in useful directions. AWS introduced CodeStar to meet this need as a comprehensive project platform for tracking software development. The UI is very concise and meant for absolute ease-of-use, allowing for managers to focus less on fiddling with multiple platforms and focus more on actual project management across.
Modern software/application developers require access to a number of tools and software libraries in the course of production. When working in collaborative settings, it becomes crucial that all team members are utilizing the same libraries, dependencies, metadata, etc.
CodeArtifact helps teams achieve this goal by providing singular repository of all such software packages for use by development teams with the abilitiy to introduce granular permissions and workflows. This is similar in operation to other famous artifact repository platforms like Nexus and Artifactory, with the advantage of being fully integrated with AWS services and IAM permissions.
Rounding out the suite of code tools, AWS released CodeGuru in late 2019 as a code analysis tool which can intelligently assess code and offer recommendations to developers in terms of security, operation, efficiency, etc. Utilizing machine learning trained over tens of thousands of different coding scenarios, CodeGuru is meant to provide a little extra oomph in helping developers catch the small things and sharpen their code to be as good as it can be. One great example of such opportunity lies in cost optimization – CodeGuru can assess your code’s utilization of AWS resources and make suggestions how to more efficiently utilize services for greater cost savings – and the utility of CodeGuru continues to be expanded over time.
This is just a basic rundown of each service – for the full in-depth explanation of each as provided by AWS, select the service below to visit Amazon’s official documentation. Happy coding!