Pages

Monday, March 4, 2024

github action notes

ci / integration :


build

test 

merge




cd / delivery :


auto release to repository




cd / deployment :


auto deploy to production



=====


ci = pass test

cd = deliver code to production




======



## gitactions





1 create workflow = superlinter.yml



// linter = run check codes that meet specific criteria or standard




=======


## workflow



terdiri dari 5 :


1 event

2 jobs 

3 runner 

4 steps

5 actions




1 event = trigger for workflow 

- example: when someone push new code 




// contoh event di yaml file :

on: push 



^ bakal jalanin isi dari jobs 



2 jobs = jobs todo 



jobs:

super-lint:

    name: Lint code base

    runs-on : ubuntu-latest         // runner => container 

    steps:

- name: checkout code

    uses: actions/checkout@v2        // check our code


- name: Run Super-Linter

  uses: github/super-linter@v3      // run linter 

  env:

    DEFAULT_BRANCH: main





3 runner = container yg buat jalanin obs


runs-on : ubuntu-latest 



## by default github runs our code in github environtment 

## ada ubuntulinux / windows / mac 





4 steps = declare berapa jumlah step yg akan dijalankan 


stepnya jalanin linter**






=========



superlinter support multiple linter ( understand multiple language )



===========



awal bikin workflow penamaan penting




mygitactions/.github/workflows/superlinter.yml     // in main 




## trs di commit ke main branch




=========



## msk ke <> code 

## check status icon 




check pass = turn green 

check fail = turn red




atau ke actions tab 





=============

CD



klo udah ci pipeline selesai dan image dipush ke registry saatnya bikin cd.



create new repo.



isinya config repo :

- kubernetes manifest / docker compose



push ke test/QA env --> dimonitor pake prometheus / grafana 




prometheus = script metric from app

grafana = qa bs visualize change, check latency, check kpi 





biasanya ada 3 cd stage:


test/qa

staging  : pretend as production. testing live stage

production : customer access 



==============


push model:


registry -> dipush ke 3 stage ( kubectl apply ) -> dimonitor pake prometheus / grafana





pull model:


argoCD diinstall di tiap kubernetes cluster 



argoCD = cek state repository, cek state masing2 cluster ( di pull ) 


klo di cluster ada perubahan lgsng ngecek dan ngasih tau klo out of sync



bs otomatis di sync sama si agro atau manually triggered






otomatis sync test/qa env dengan staging env via argo CD





fungsi argoCD : sync dan ngecek state

============



// argo rollout canary deployment





user --- loadbalancer --- app ( kubernetes pod ).




90% traffic

user --- loadbalancer --- app v1

|

|        10% traffic

--------- app v2




90%

10%


80%

20%




**mindahin traffic ke versi baru sampe smuanya pindah ke versi release yg baru



podnya** jg dari aplikasi yg lama dipindah ke app yg baru 




==============

Monday, January 8, 2024

Route 53 DNS Note

 



// dns 


translate domain names to ip address



===========


// domain registrar.


domain di register via interNIC == service provided by ICANN / internet corp for assigned names and number



- klo udah diregister nanti datanya masuk di WhoIS database




contoh domain registrar:

- hostgator

- godaddy

- domain.com

- aws 

- namecheap 




- bs bayar service tambahan biar dnsnya ke private

============



// top leveldomain



- word  terakhir di domain name 

contoh : .com  .ac .academy .aaa   .abb


bs dicek di availability database:

www.iana.org/domains/root/db 



^ aws cuma top level domain .aws



===========


// second level domain 


- 2nd word  setelah domain name


contoh:


toro.co.id  //  co = 2nd level domain 



===========


// Start of authority  



tiap domain hrs punya SOA record yg bs provide informasi tentang domain.

contoh: 


- seberapa sering diupdate

- admin email 



1 zone file cuma bs contain 1 SOA Record.


format:


[authority-domain] ---- [domain-of-zone-admin] ----- [  zone-SN ] ----

[refresh-time]    ---- [ retry-time] ---- [ expire-time ] ----

[negative caching TTL]



contoh:


ns.example.com. hostmaster.example.com. 1

7200 900 1209600 86400



aws example:

ns-415.awsdnns-51.com. awsdns-hostmaster.amazon.com. 1

7200 900 1209600 86400





===========



// A Record



A record :  buat convert nama domain directly ke ip address.


{

"ResourceRecordSets":[

{

"TTL":300,

"Type": "A",

"Name": "testing-domain.com",

"ResourceRecords" : [

{ "Value": "202.169.228.1" }

]

}

]





}



===========



// cname

- resolve one domain  name to another rather than ip address

- klo dipasang cname, kita bs ubah A record tp pointing cnamenya tetep sama.



{

"ResourceRecordSets":[

{

"TTL":300,

"Type": "CNAME",

"Name": "testing-domain.com",

"ResourceRecords" : [

{ "Value": "wwww.testing-domain.com" }

]

}

]





}



=========



// NS 

digunakan oleh top  level domain buat direct traffic ke dns server yg merupakan

authoritative DNS record. 


- bs bikin multiple name server buat redundancy 


- klo kita bikin dns record pake route53, NS Record buat domain kita bakal pointing ke AWS  Servers.




{

"Type": "NS",

"ResourceRecordSets":[

{

"Name": "testing-domain.com",

"TTL":172800,

"ResourceRecords" : [

{ "Value": "ns-245.awsdns-30.com." },

{ "Value": "ns-523.awsdns-30.net." },

{ "Value": "ns-1586.awsdns-30.co.uk." },

{ "Value": "ns-1373.awsdns-43.org." },

]

}

]





}





========



// TTL


waktu yg diperbolehkah oleh dns record buat di  cached di server / user local machine 


semakin pendek nilai ttl,  semakin cepet changes  dns record propagate accross internet




=========



// route 53


- high available and scalable  cloud DNS.

- register and manage domain

- create dns routing rules / failover 




- lebih ke sinergy ddengan  aws services


- bs register and manage domain

- create various record set on domain

- implement complex traffic flows

- continous monitor record via health checks

- resolve vpc diluar AWS



=========


// route 53 record sets


- buat pointing  naked domain dan subdomain via domain record


A record => pointing ke spesifik ip 


===========


// alias record aws


- extends dns functionality

- route traffic to  specific AWS Resources

- alias record bs detect  change ip addr dan keep state ip  dari endpoint pointed to correct resources


- dipake kl mau ngeroutingin traffic kedalem AWS Services


==========



//  routing policies



ada 7:


1 simple routing

- default. multiple address = result in random selection


2 weighted routing

- routing berdasarkan weight buat split traffic

- misal : 80% traffic to server 1 , 20% to server 2 


3 latency based routing

- routing traffic ke region dengan lowest latency

- ga peduli geographicnya adda dimana, yg penting ms terkecil yg dipilih 




4 failover routing

- route traffic klo primary endpoint = unhealthy  => lempar ke secondary endpoint

- buat bikin active - passive situation

- auto monitor health check from primary 





5 geolocation routing

- route traffic based on location  of users


6 geo-proximity  routing

- route traffic berdasarkan lokasi resource and optionally  shift traffic from resource in  one location to resources in anothers


7 multi-value answer routing

- respond dns queries up to 8 healthy record ( random selection ) 


- mirip kyk simple routing policies tp ditambahin ++ health check


=========


// route 53 - traffic flow



- visual editor. lets u  create multiple routing config for ur resource using existing routing types

- support versioning for rollback


- 50$ per policy record per month


=========


// health check


- tiap 30s by default. bs dicustom tiap 10s.



- kita  bs  pasang cloudwatch alarm buat alert status unhealthy




- health check bs di chaining. bs monitor other health  check to create a chain of reactions. up to 50 single aws account 



=======



// route 53 resolver  ( .2 resolver )


- regional service yg bs route dns queries between vpc and network 


- dns resolution buat hybrid environtment ( on prem dan cloud )



ada 3 

-  inbound and outbound

-  inbound only

-  outbound only



=======