AWS Coding Tech

Setting up a Basic Code Pipeline for Static Websites on AWS

Setting up a Basic Code Pipeline for Static Websites on AWS

AWS provides an immense array of options for deploying and managing complicated websites. There are nevertheless numerous use instances the place you need to shortly setup a simple to make use of pipeline for deploying static web sites (and not using a construct course of). I’m going to cowl how one can get began utilizing AWS to setup a primary no-frills net server utilizing an easy-to-use deployment setup by way of AWS code repository and deployment providers.

Earlier than we get began, there are a few pre-requisites wanted to be able to comply with alongside:

  1. AWS account with EC2,  S3, CodePipeline, CodeDeploy, and CodeCommit permissions. Should you don’t have an AWS account, you possibly can join the free tier for one yr.
  2. Git shopper: For Mac, I like to recommend Homebrew (brew set up git). On the PC, you should use Git SCM.

There are a selection of steps we have to full with a purpose to setup our code pipeline with a brand new net server. These steps embrace creating a brand new safety group, establishing a key pair, which we’ll use to entry our AWS EC2 occasion, provisioning a brand new EC2 occasion, and establishing our code pipeline for Steady Integration/Steady Supply (CI/CD).

Roles and Permissions

When establishing a CodeDeploy (later on this article), we might want to use service roles for to offer wanted permissions for each the CodeDeploy service (service position) in addition to for our EC2 occasion that we’re deploying code to (occasion position). Let’s go forward and set these up. There are extra detailed instructions obtainable inside AWS documentation and I’ve offered hyperlinks do you have to need to study extra.

CodeDeploy Service Position

  • Utilizing the AWS console, browse to IAM Administration and choose Roles – Create Position.
  • Subsequent choose CodeDeploy and beneath Use Case select ‘CodeDeploy’.
  • Click on ‘Subsequent: Permissions’ leaving defaults and ‘Subsequent: Tags’ leaving clean.
  • Click on ‘Subsequent: Evaluate’.

CodeDeploy Service RoleCodeDeploy Service Role

Right here you possibly can present a reputation on your service position. I’m utilizing the identify carnaghan-codedeploy. Hold a notice of the identify you select as you will want this later.

For extra info, see: Create a Service Position for AWS CodeDeploy.

IAM EC2 Occasion Position

To ensure that our EC2 server to work with CodeDeploy, we have to create an IAM occasion position. In IAM Administration choose ‘Create Position’. Underneath service choose ‘EC2’ after which click on ‘Subsequent: Permissions’. Underneath ‘Filter Insurance policies’ sort ‘S3’ after which choose ‘AmazonS3ReadOnlyAccess’. Choose ‘Subsequent: Tags’ after which ‘Subsequent: Assessment’. Present a reputation in your position, I used carnaghan-dev. Maintain a word of no matter identify you select for later.

Notice: for simplicity I selected AmazonS3ReadOnlyAccess’, nevertheless for higher safety you possibly can create your personal coverage and select solely these elements of S3 wanted for CodeDeploy.

For extra info see: CodeDeploy: Create an IAM Occasion Profile for Your Amazon EC2 Situations.

Creating our EC2 Safety Group and Key Pair

Earlier than we will setup a brand new EC2 occasion which can function our net server, we have to create a safety group. The safety group will decide ingoing and outgoing visitors. Safety teams in AWS are merely firewalls on the server degree. They’ll allow us to permit visitors from numerous sources entry to our server. To maintain issues easy, I’m going to allow all incoming visitors for HTTP and SSH connections, which we’ll want for our setup. Ideally, SSH visitors ought to be restricted to your personal set of IP addresses which you’ll entry the EC2 occasion from for safety functions. Inside the AWS Console, choose EC2 beneath the Compute group. Underneath Community and Safety choose ‘Safety Teams’. Choose ‘Create Safety Group’ and supply a reputation. In my instance, I’m utilizing carnaghan-dev. Subsequent we’ll configure the inbound visitors our safety group will allow. Underneath the Inbound tab, choose Add Rule. It is best to add two guidelines (one for SSH and one for HTTP) with IP handle, ::/zero for every (which permits all incoming visitors for that protocol by default). Click on Create to save lots of your new safety group. We’ll now have the ability to use this when provisioning our new EC2 occasion.

Subsequent we have to create a key pair. This can be a set of credentials we’ll use to entry our EC2 occasion as soon as it’s setup.Underneath the identical Community and Safety part we accessed Safety Teams, choose Key Pairs. Click on on Create Key Pair and supply a reputation. In my instance I’m utilizing the identify carnaghan-dev. As soon as created, you’ll obtain a obtain file with a .pem extension. That is your personal RSA key, which can be used later to SSH into our server. For now retailer this in a protected place.

Creating our EC2 Occasion

Subsequent we’re going to provision our net server. From the AWS console, choose Providers -> Compute -> EC2. Subsequent click on the Launch Occasion button. We’re going to select Amazon Linux 2 AMI (HVM), SSD Quantity Sort, which must be the very first entry underneath Amazon Machine Pictures (AMIs).

Amazon LinuxAmazon Linux

Click on Choose. On the subsequent display as an example sort, select t2.micro (free tier eligible). Click on Subsequent – Configure Occasion Particulars. Scroll right down to Superior and click on to broaden. Beneath Consumer Knowledge, paste the next code:

sudo yum replace -y
sudo yum set up -y httpd
sudo service httpd begin
sudo chkconfig httpd on

sudo yum set up ruby -y
sudo yum set up wget -y
cd /residence/ec2-user
chmod +x ./set up
sudo ./set up auto

AWS supplies Consumer Knowledge to permit us to move one time instructions to our server as soon as it’s provisioned, or booted up for the primary time. The primary a part of the above code runs updates on the working system, adopted by putting in and operating our Apache net server. The second set of instructions provisions our CodeDeploy agent, which we will probably be utilizing afterward for our Steady Deployment. Click on Subsequent – Add Storage and depart all defaults as is. AWS routinely provisions an 8Gb Elastic Block Storage (EBS) quantity for our occasion, which can act as our onerous drive or storage. Click on Subsequent – Add Tags and add a Identify tag in your occasion. In my instance I’m utilizing Identify: carnaghan-dev as under.


Click on Subsequent – Configure Safety Group. Right here you’ll select the safety group you setup above. Be sure you full this step appropriately or chances are you’ll not be capable of entry your occasion.

After you might have chosen your safety group, click on Evaluate and Launch and on the next display choose Launch. You may be prompted to create or select a key pair to entry your server. Choose the important thing pair you created above after which click on launch occasion.

At this stage you’ve gotten accomplished all steps to launch your EC2 occasion. It’s going to take a number of minutes to provision and run our consumer knowledge instructions specified above. To view the standing of your EC2 occasion choose View Situations on the affirmation web page. After a number of minutes have handed, the standing of your occasion ought to change from Initializing to Operating. Presently, copy the general public DNS handle, it ought to look one thing like Paste this handle into your net browser. If the whole lot is operating as anticipated together with your new Apache webserver, you must see the check web page under.

In the event you don’t see the check web page, give your occasion one other jiffy to completely initialize.

Establishing Code Commit

There are two fundamental methods you’ll be able to handle CodeCommit repositories:

  • Set up the AWS Command Line Interface (CLI) and supply CodeCommit to your AWS account
  • Create a public SSH Key which you’ll be able to then add to your repository (in an analogous means you’d handle a Github repository)

For this setup, I’m going to advocate utilizing the CLI because it offers much more choices out of the field and the extra you’re employed with AWS the extra you’ll come to make use of this device. To be able to set up the CLI, comply with this information: Putting in the AWS CLI. In the event you want to make use of a public key, see Setup for SSH Customers Not Utilizing the AWS CLI.

Subsequent we’ll setup our code repository, which can allow us to replace our web site. Utilizing the AWS console, head over to CodeCommit and create a brand new repository.


I’m once more utilizing the identify carnaghan-dev for consistency. Upon getting setup your repository you will want to clone an area copy. For those who don’t have a git shopper, please see the hyperlinks I offered initially of this text (Homebrew for Mac, GitSCM for PC). As soon as your shopper is setup and you’ve got put in the AWS CLI or uploaded your public key, you need to have the ability to clone your repository. In your command line / terminal, run the next command changing ‘your-repo-name’:

git clone

As soon as cloned it is possible for you to to start including new information. We’re going to create two totally different information wanted for our code deployment, a check index file, and a file referred to as appspec.yml.



Upon getting added these information to your empty repository listing we might want to commit them.

git add -A
git commit -m “Preliminary commit”
git push

Subsequent, head again over to your repository within the AWS console to verify your information have been uploaded.

gitcommit filesgitcommit files

You might have accomplished the primary steps in our code pipeline by initializing your CodeCommit repository and including our appspec.yml and index.html information.

What’s appspec.yml?

You could be questioning what appspec.yml is required for? This can be a primary yaml file that defines the place our code might be deployed. Since that is going to be a easy static file deployment, we simply have to specify our server path, which by default with Apache is /var/www/html/. AWS CodeDeploy will use this file as soon as deploying the newest updates to our website. For a greater overview of appspec.yml, check out AWS CodeDeploy AppSpec File Reference.


Now that we have now our code repository setup with our primary file construction, the subsequent step is to setup our CodeDeploy software. To do that, navigate to CodeDeploy inside the AWS console and choose ‘Create Software’. Fill out the shape together with your software identify and select EC2/On-Premesis.


Subsequent, you will want to pick ‘Create Deployment Group’ and supply the next info:

  • Deployment group identify (I selected carnaghan-dev-group)
  • Service Position (Select the service position you created earlier)
  • Deployment Sort (In-place)
  • Surroundings configuration (EC2 Occasion / Key: Identify, Worth: your-ec2-instance)
  • Deployment Settings (CodeDeployDefault.AllAtOnce)
  • Load Balancer (Uncheck this feature)


Now that we have now outlined our supply (CodeCommit) and our goal (CodeDeploy), let’s tie all of it collectively utilizing CodePipeline. Observe that often in bigger purposes that require construct processes we might additionally use CodeBuild. For the sake of simplicity and since we’re coping with a small static web site, we solely want CodeCommit and CodeDeploy for our pipeline. From the AWS console, choose CodePipeline after which choose ‘Create Pipeline’. You will want to offer the next info:

  • Pipeline Identify (I’m utilizing the identify carnaghan-pipeline)
  • Select ‘New Service Position’ and depart the brand new default position identify (Observe that is totally different from the CodeDeploy service position you created originally of this text).
  • Be sure that ‘Permit AWS CodePipeline to create a service position so it may be used with this new pipeline’ is checked
  • Select Default Location – AWS will create an S3 Bucket in your revisions to deploy
  • Choose Subsequent after which select CodeCommit for Supply Supplier, select your repository and choose ‘Grasp’ department
  • Depart Amazon CloudWatch Occasions chosen and choose ‘Subsequent’
  • Choose Skip Construct Stage
  • Select AWS CodeDeploy for Deployment Supplier and choose your software and deployment group
  • Evaluate every thing after which choose ‘Create Pipeline’

After you have accomplished these steps you have to be returned to the primary CodePipeline display and a brand new deployment will run. If every part was setup appropriately you must see a display just like the one under.

CodeDeploy SuccessCodeDeploy Success

To confirm every part labored as deliberate, go to your EC2 server homepage. When you forgot the URL, go to EC2 within the AWS Console, click on ‘Operating Situations’ and choose your occasion to assessment the Public DNS handle. It is best to now see a brand new HTML web page displaying:

CodeDeploy TestCodeDeploy Test

Testing The Pipeline

Congratulations, you’ve got setup a primary CodePipeline in your webpage. Let’s attempt one last item. Replace your HTML web page by including the sentence ‘AWS CodePipeline full’.

Add this file to Git and push your modifications.

git add -A
git commit -m “Modifying index.html”
git push

In case you go to the CodePipeline web page you need to see it momentarily operating a brand new deployment. Your last modifications will seem as soon as deployment has been accomplished.

CodeDeploy UpdateCodeDeploy Update

For extra info on CodePipeline and one other tutorial on establishing a primary pipeline, go to Create a Easy Pipeline (AWS CodeCommit Repository). Additionally be sure you learn the documentation on CodeCommit, CodeDeploy, and CodePipeline. When you’ve got a extra complicated software that requires construct processes, the AWS CodeBuild Documentation is a superb place to start out. Hopefully you discovered this useful.

Picture Credit: Photograph by Jason Blackeye on Unsplash.

Ian Carnaghan

I’m a software program developer and on-line educator who likes to maintain up with all the newest in know-how. I additionally handle cloud infrastructure, steady monitoring, DevOps processes, safety, and steady integration and deployment. In my spare time I train undergraduate courses in net improvement.

Newest posts by Ian Carnaghan (see all)

About the author