From Code to Cloud: A Comprehensive Guide to Deploy Your Code on the Cloud

Photo by Joshua Aragon on Unsplash

Introduction

In this blog post, we will walk you through the process of writing a simple LaTeX service, pushing it to GitHub, and then using Jenkins and AWS CDK to deploy it on the cloud.

Prerequisites

Before we start, make sure you have the following:

  • A GitHub account
  • Jenkins installed and configured
  • AWS CDK installed and configured
  • Basic knowledge of Python, Docker, and AWS

Step 1: Writing the Code

First, we need to write the code for our LaTeX service. We will use Python and Flask for this. The service will accept LaTeX code via a POST request and compile it into a PDF document.

# app.py
from flask import Flask, request
import subprocess

app = Flask(__name__)

@app.route('/compile', methods=['POST'])
def compile_latex():
latex = request.data.decode()
with open('document.tex', 'w') as f:
f.write(latex)
subprocess.run(['pdflatex', 'document.tex'])
return send_file('document.pdf', as_attachment=True)

if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)

Step 2: Containerizing the Application

To make our application ready for the cloud, we need to containerize it. We will use Docker for this. Here’s the Dockerfile for our application:

# Dockerfile
FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]

Step 3: Pushing the Code to GitHub

After writing and containerizing the code, the next step is to push it to GitHub. Here’s how you can do it:

  1. Initialize a new repository: git init
  2. Add your files to the repository: git add .
  3. Commit your changes: git commit -m “Initial commit”
  4. Push your changes to GitHub: git push origin master

Step 4: Setting Up Jenkins

Now that our code is on GitHub, we can set up Jenkins to automatically deploy our code whenever we push a new commit.Install the necessary plugins

  1. Create a new Jenkins job
  2. Configure the job to pull from your GitHub repository
  3. Set up a build trigger to start a new build whenever a change is pushed to GitHub

Here’s a Jenkinsfile for our CI/CD pipeline:

// Jenkinsfile
pipeline {
agent any

stages {
stage(‘Build’) {
steps {
sh ‘docker build -t latex-service .’
}
}
stage(‘Push’) {
steps {
sh ‘docker tag latex-service:latest myregistry/latex-service:latest’
sh ‘docker push myregistry/latex-service:latest’
}
}
stage(‘Deploy’) {
steps {
sh ‘aws ecs update-service --cluster mycluster --service latex-service --force-new-deployment’
}
}
}
}

Step 5: Using AWS CDK to Create the Necessary Services

With Jenkins set up, we can now use AWS CDK to create the necessary services for our code to run on the cloud.

// stack.ts
import * as cdk from '@aws-cdk/core';
import * as ecs from '@aws-cdk/aws-ecs';
import * as ec2 from '@aws-cdk/aws-ec2';

export class MyStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);

const vpc = new ec2.Vpc(this, 'MyVpc', { maxAzs: 2 });
const cluster = new ecs.Cluster(this, 'Ec2Cluster', { vpc });

const taskDefinition = new ecs.Ec2TaskDefinition(this, 'TaskDef');
const container = taskDefinition.addContainer('DefaultContainer', {
image: ecs.ContainerImage.fromRegistry('myregistry/latex-service:latest'),
memoryLimitMiB: 512,
});
container.addPortMappings({ containerPort: 80 });

new ecs.Ec2Service(this, 'Service', {
cluster,
taskDefinition,
});
}
}

Step 6: Deploying the Code

Finally, we can deploy our code. In the Jenkins job we created earlier, add a build step to deploy your code using AWS CDK.

Conclusion

And that’s it! You have successfully written a LaTeX service, containerized it, pushed it to GitHub, and deployed it on the cloud using Jenkins and AWS CDK. This process can be applied to any other service you want to deploy.

Happy coding!

I really appreciate your readership and support. For more insightful updates and tips, don’t forget to follow us and stay connected on our journey through the ever-evolving world of security and cloud computing.

--

--

THE HOW TO BLOG |Siddhanth Dwivedi

Siddhanth Dwivedi | Senior Security Engineer & AWS Community Builder 👨🏾‍💻