Building CI/CD on AWS
- #AWS
 - #CI/CD
 - #GitHub
 
- 
2019/10/28 I recently set up a CI/CD pipeline using only AWS services, so here are my notes. I used:
 - 
CodePipeline
 - 
CodeBuild
 - 
CodeDeploy
 
(CodeCommit would make it all-AWS, but I used GitHub.)
Steps
I wanted GitHub code to be tested, built, and deployed to EC2. Commit your code to GitHub (I used master, but you can choose any branch). In CodePipeline, create a pipeline via the console. For the Source stage, connect GitHub via a webhook (simple through the UI).
For the Build stage I used CodeBuild, so I added a buildspec.yml to the repo root, e.g.:
version: 0.2
run-as: root
phases:
  build:
    commands:
      - # run tests/builds here
artifacts:
  files:
    - '**/*'
Create a build project, point its input artifact to the source output, and pick either an AWS-provided Docker image or your own (push custom images to ECR). Store build artifacts in S3.
For deployment I used CodeDeploy, so I added appspec.yml:
version: 0.0
os: linux
files:
  - source: /
    destination: /var/src
hooks:
  BeforeInstall:
    - location: code_deploy/before_install.sh
      timeout: 300
      runas: root
  AfterInstall:
    - location: code_deploy/after_install.sh
      timeout: 300
      runas: root
This example extracts files to /var/src and lets you run scripts before/after install (e.g., adjust permissions). Create a deploy group and set the pipeline to use the artifact produced by CodeBuild.
Takeaways
Even without Jenkins or CircleCI you can build CI/CD purely on AWS. The benefits include consolidated cost management, tight service integration, and pay-as-you-go pricing for CodeBuild. At Japan IT Week I heard someone stress how crucial CI/CD automation is for fast development cycles—I completely agree.