ValueLogic was recently preparing technical solutions for a new product called Movello. This is a mobile application that encourages people to move (more precisely, to take some steps with a mobile phone), cumulate steps, and then exchange them for real money that is being transferred to different charity initiatives. The idea is easy, powerful, and has great potential.
We decided to fully build a backend infrastructure in the cloud environment to tackle traffic peaks without much trouble. The product was also being created in a rapid development process. giving us just two months from the concept to a reliable version for production. For cases like this one, I believe the cloud environment is suited perfectly. It allows us to quickly model scalable and solid infrastructure and deploy an application as soon as possible.
Today, I would like to talk a little about a CI/CD service called AWS Pipeline that was used in the project. AWS CodePipeline is a response for those who would like to model, visualize and integrate more or less complicated building and deployment processes. From our perspective, that was a natural choice as the application is fully running in the cloud.
The concept of a pipeline is pretty easy. It divides a process into stages. Between stages, by default, there is a transition that runs the next stage after the previous one is finished. Inside a stage, we define what actions should be executed. There are several types of actions to build, test or deploy a code; they can be run one after the other or simultaneously. The product of action, an artefact, can be also an input for other action. That easily lets us reuse it in the next action or stage.
AWS CodePipeline Integrations
CodePipeline is straightforward to integrate with other services like CodeBuild, CodeDeploy, Lambda and many others. Of course, it’s not necessary to use only internal services (you can lean towards third-party services like Jenkins, TeamCity, or XebiaLabs, for example). We gained a great advantage especially with CodeDeploy and its CloudFormation integration because the whole application infrastructure is managed with that.
CodeBuild and CodeDeploy services in themselves are attractive and may be used even outside of CodePipeline. They organize build and deployment processes, breaking them into steps opened for customization with our code. CodeDeploy supports in-place and blue-green deployment styles and is easily integrable with AutoScaling, which was a killer feature for us. As a new instance is created with an AutoScaling group, the last successful revision is deployed on that instance as well.
The price we paid for all those features will no doubt come as a surprise… just $0.67 for August 2018 (with between two and five full pipeline executions per day). CodePipeline is free for the first month, then it costs $1 a month. CodeDeploy is absolutely free for EC2 instances. For CodeBuild, we pay as we go, only for the time needed to build and test, so we don’t manage our own infrastructure for that. Our application is written in Golang, so compilation and tests execution time are very low.
Using AWS CodePipeline with other services was fun but, most importantly, it was time-efficient to dig into. I would highly recommend this e repository as a starting point with a demonstration of main features and integrations.