AWS Code Deploy
Teknologi

Tutorial Bahasa Indonesia AWS Code Deploy dengan Bitbucket

Dalam tutorial ini kita akan belajar cara setup agar koding yang kita commit ke repository terdeploy otomatis ke server kita. Tutorial CICD ini menggunakan Amazon Web Services Code Deploy dan Bitbucket. Berikut langkah-langkahnya:

1. Create IAM: Group, User, Role

A. Langkah pertama create IAM Group dengan 3 permissions di bawah ini:

  • AmazonS3FullAccess
  • AWSCodeDeployFullAccess
  • AmazonEC2FullAccess

B. Setelah itu create IAM User dan pilih programmatic access serta assign ke IAM Group di atas. Jangan lupa untuk menyimpan credentials (Access Key, Secret Access Key), karena akan dibutuhkan nantinya.

C. Kemudian Create IAM Role dan pilih EC2 dengan 3 permissions berikut:

  • AmazonS3FullAccess
  • AWSCodeDeployFullAccess
  • AmazonEC2FullAccess

Setelah itu edit Trust Relationship seperti berikut:

{
 "Version": "2012-10-17",
 "Statement": [
   {
     "Effect": "Allow",
     "Principal": {
       "Service": [
           "ec2.amazonaws.com",
           "codedeploy.ap-southeast-1.amazonaws.com"
       ]
     },
     "Action": "sts:AssumeRole"
   }
 ]
}

Jangan lupa untuk mengubah regionnya sesuai dengan kebutuhan.

 

2. Create S3 Bucket

Create S3 Bucket, untuk settingannya semua default saja.

 

3. Create Instance (EC2)

Create Instance sesuai kebutuhan, yang perlu diperhatikan adalah saat Configure Instance Details pilih IAM Role dengan Role yang kita buat sebelumnya.

 

4. Install Code Deploy Agent

Masuk ke instance/server yang dibuat sebelumnya dengan SSH. Kemudian jalankan command berikut:

>sudo apt-get update
>sudo apt-get install ruby
>sudo apt-get install wget
>cd /home/ubuntu
>wget https://aws-codedeploy-ap-southeast-1.s3.ap-southeast-1.amazonaws.com/latest/install
>chmod +x ./install
>sudo ./install auto
>sudo service codedeploy-agent start
>sudo service codedeploy-agent status

Ingat ganti ap-southeast-1 sesuai region yang kalian gunakan. Untuk lebih jelas tentang command di atas silahkan lihat dokumentasi resmi AWS di link ini.

 

5. Create Code Deploy Application

Pada service CodeDeploy create application dengan Compute platform EC2/On-premises

 

6. Create Deployment Group

Setelah itu buat Deployment Group, misalkan kita punya Application project-xyz, maka kita bisa membuat 2 deployment group untuk project ini. Contohnya project-xyz-backend dan project-xyz-frontend. Berikut konfigurasi yang harus dipilih saat membuat deployment group

  • Input nama deployment group
  • Pilih role sesuai IAM Role yang kita buat sebelumnya
  • Deployment type: in-place
  • Environment configuration: Amazon EC2 instances
  • Pilih key Name and value project dari instance yang kita buat sebelumnya
  • Deployment settings: CodeDeployDefault.OneAtATime
  • Load Balancer: disabled

Selesai dan langkah berikutnya adalah setting Pipeline di Bitbucket. Untuk script pipeline nya berbeda untuk tiap project sesuai kebutuhan. Pada step berikutnya saya akan memberi contoh script pipeline untuk aplikasi NodeJS.

 

7. Setting Bitbucket Pipeline

Berikut adalah contoh pipeline untuk project NodeJS. Jangan lupa input variable berikut pada settingan repository Bitbucket:

  • AWS_ACCESS_KEY_ID : xxx (didapat saat create IAM User langkah 1)
  • AWS_SECRET_ACCESS_KEY : xxx (didapat saat create IAM User langkah 1)
  • AWS_DEFAULT_REGION : ap-southeast-1 (sesuaikan dengan region yang digunakan pada langkah di atas)
  • APPLICATION_NAME : application_name (sesuaikan pada apllication name code deploy pada langkah 5)
  • S3_BUCKET : bucket_name (sesuaikan pada nama bucket pada langkah 2)
  • DEPLOYMENT_GROUP : deployment_group_nama (sesuaikan pada nama deployment group langkah 6)

Kemudian tambahkan file code berikut pada project NodeJs:

1. bitbucket-pipelines.yml

image: node:10.16

pipelines:
  default:
    - step:
        caches:
          - node
        script:
          - apt-get update
          - apt-get install -y zip
          - zip -r application.zip .
          - pipe: atlassian/aws-code-deploy:0.2.5
            variables:
              AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              APPLICATION_NAME: $APPLICATION_NAME
              S3_BUCKET: $S3_BUCKET
              COMMAND: 'upload'
              ZIP_FILE: 'application.zip'
              VERSION_LABEL: 'my-app-1.0.0'
          - pipe: atlassian/aws-code-deploy:0.2.5
            variables:
              AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION
              AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
              AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
              APPLICATION_NAME: $APPLICATION_NAME
              DEPLOYMENT_GROUP: $DEPLOYMENT_GROUP
              S3_BUCKET: $S3_BUCKET
              COMMAND: 'deploy'
              WAIT: 'true'
              VERSION_LABEL: 'my-app-1.0.0'
              IGNORE_APPLICATION_STOP_FAILURES: 'true'
              FILE_EXISTS_BEHAVIOR: 'OVERWRITE'

2. appspec.yml

version: 0.0
os: linux 
files:
  - source: /
    destination: /home/ubuntu/project-name
hooks:
  BeforeInstall:
    - location: scripts/before_install.sh
      timeout: 300
      runas: ubuntu
  AfterInstall:
    - location: scripts/after_install.sh
      timeout: 300
      runas: ubuntu
  ApplicationStart:
    - location: scripts/application_start.sh
      timeout: 300
      runas: ubuntu

3. before_install.sh

#!/bin/bash
#Install node.js and Forever.js
sudo apt-get update
sudo apt-get install nodejs-legacy -y
sudo apt-get install npm  -y
sudo npm install forever -g

4. after_install.sh

#!/bin/bashmkdir
/home/ubuntu/project_name
/home/ubuntu/project_name npm install

5. application_start.sh

#!/bin/bash# Stop all servers and start the server
forever stopall
forever start /home/ubuntu/project_name/app.js

Silahkan dicoba dan jangan sungkan untuk bertanya dengan berkomentar di article ini. Jangan lupa untuk langkah 7 disesuaikan dengan kebutuhan project masing-masing.

Referensi:

https://levelup.gitconnected.com/set-up-a-continuous-delivery-pipeline-from-bitbucket-to-aws-ec2-using-aws-code-deploy-a9777a3cbcad

Leave a Reply