สวัสดีชาวโลก 👋 ยินดีต้อนรับสู่ Software Engineering with Go ในส่วนของ Workshop
brew install terraform(หรือติดตั้งตาม terraform install-cli)brew install kubectlbrew install awscli- Install Container Management (Rancher Desktop, Docker Desktop, Minikube, etc.)
- Fork repository นี้ไปที่ Github ของตัวเอง
- 1 ทีม 1 Fork 1 คนเท่านั้นพอ เราจะเพิ่มเพื่อนใน Step ถัดๆไปไม่ต้องกังวัล
เพื่อให้ Access AWS ได้เราจะกำหนด Credential เข้าไปให้ Shell ของเราก่อน หรือ set ใน .bashrc, .zshrc ก็ได้
export AWS_ACCESS_KEY_ID=<KEY>
export AWS_SECRET_ACCESS_KEY=<SECRET>1.ติดตั้ง Terraform ให้เรียบร้อย
-
cdไปที่infra/terraformจากนั้นรัน -
สั่งเริ่มต้น Terraform
terraform init- สั่งสร้าง Terraform สร้าง Resource ใน AWS
terraform apply -var group_name="group-<ID>" --auto-approve- ตอบ
yesกด enter แล้วรอไปกดกินข้าวก่อน
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yesเรา Deploy ด้วย ArgoCD ที่อยู่บน AWS EKS ผ่าน Terraform เพื่อให้ใช้งานได้ ต้องเตรียมของดังนี้
หลังจากที่ Fork repository ไปแล้ว จะให้ CI/CD ทำงานได้ จะต้องเซ็ตค่า WORKFLOW_TOKEN ด้วย โดยเอามาจาก PAT ของ Github จากนั้นเอาไปใส่ที่ Secret
- สร้าง Personal Access Token ของ Github
- ไปที่ Personal Access Token
- กด
Generate new token (classic)เอา classic นะ - ตั้งชื่อ Note เป็น ชื่อกลุ่มตัวเอง เช่น
group-1 - กดเลือกทีละอัน ทั้งหมด ทุกอัน แล้วกด
Generate token - เสร็จแล้ว copy ไว้ มันจะไม่แสดงอีกแล้ว copy ได้แค่ครั้งเดียว ห้ามทำหาย
- set ค่า
WORKFLOW_TOKENใน Github ของทีม - กลับไปที่ Repository workshop ของเรา ที่เรา fork มา (e.g. <https://github.com//workshop>)
- ไปที่ Settings > Secrets and variables > Actions
- กด
New repository secret - ใส่ชื่อ Name เป็น
WORKFLOW_TOKENแล้วใส่ค่า Personal Access Token ที่เรา copy ไว้ใน ใส่เข้าไปในช่องSecret - กด
Add secret - จบแล้ว
References:
- แก้ไข CI/CD ให้เป็นชื่อ repository ของทีม
- ไปที่ Github Repository ของทีม แล้วไป tab Actions ดูว่า CI/CD ทำงานได้ไหม
- กด
I understand my workflows, go ahead and enable themถ้าเป็นครั้งแรกที่ใช้งาน - เปิดโปรเจคของเราด้วย VSCode แล้ว find and replace
<your-github-account>ให้เป็นชื่อ github account ของคุณคนที่ fork มา ( MUST be lowercase) - git add -> git commit -> git push
-
find and replace
<DB_CONNECTION_DEV>ให้เป็น database url DEV connection ของทีม -
find and replace
<DB_CONNECTION_HOTFIX>ให้เป็น database url HOTFIX connection ของทีม -
find and replace
<DB_CONNECTION_PRD>ให้เป็น database url PRODUCTION connection ของทีม
- ทำการเพิ่มสมาชิกใน Github ของทีมเพื่อให้สามารถเข้าถึง Repository ได้
- ไปที่ Settings > Collaborators and teams > Manage access
- กด
Add People - เลือก Role เป็น
Adminทุกคนเลย
1.ติดตั้ง AWS CLI ให้เรียบร้อย
2.ติดตั้ง Kubernetes CLI ให้เรียบร้อย
3.เนื่องจากเราใช้ AWS EKS เป็น Kubernetes Cluster ดังนั้นเราต้องเอา Kubernetes Context จาก AWS EKS โดยสั่ง (มั่นใจว่าเรา run command ที่ terminal เดียวกันกับเรา export AWS_ACCESS_KEY_ID และ AWS_SECRET_ACCESS_KEY)
aws eks update-kubeconfig --region ap-southeast-1 --name "eks-group-<ID>"4.ลองสั่ง kubectl
kubectl get nsถ้าได้ผลลัพธ์ประมาณนี้เป็นอันใช้ได้
NAME STATUS AGE
default Active 3d
kube-system Active 3d
kube-public Active 3d
kube-node-lease Active 3d1.รันคำสั่งสร้าง Namespace
kubectl create namespace argocd2.รันคำสั่งติดตั้ง ArgoCD
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml3.หารหัสผ่าน ArgoCD ของ admin ไว้ก่อน
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo4.Forword Port เพื่อใช้งาน ArgoCD
kubectl port-forward svc/argocd-server -n argocd 8080:443-
ไปที่ ArgoCD http://localhost:8080 แล้วใส่ Username
adminและ Password ที่ได้จากข้อ 3. -
setup gitops สำหรับ development env
- กด
+ New Appแล้วใส่ข้อมูลดังนี้ - Application Name:
dev - Project Name:
default - SYNC POLICY:
Automatic - ✅ PRUNE RESOURCES
- Repository URL:
https://github.com/<your-account>/workshop - Revision:
main - Path:
infra/gitops/dev - Cluster URL:
https://kubernetes.default.svc - กด
Createมุมบนซ้าย
note: ตรวจสอบให้แน่ใจว่าที่ https://github.com/?tab=packages ที่ workshop เป็น public (ไม่มีคำว่า private แสดงอยู่)
- setup gitops สำหรับ production env
- กด
+ New Appแล้วใส่ข้อมูลดังนี้ - Application Name:
prod - Project Name:
default - SYNC POLICY:
Automatic - ✅ PRUNE RESOURCES
- Repository URL:
https://github.com/<your-account>/workshop - Revision:
main - Path:
infra/gitops/prd - Cluster URL:
https://kubernetes.default.svc - กด
Createมุมบนซ้าย
- สามารถหา endpoint ของ api ได้จาก ArgoCD -> ในกล่อง svc api เราจะเห็น HOSTNAMES url ที่ deploy ไปใน aws
- ก่อนจะ Destroy ด้วย Terraform ควรจะลบ Applicaton ใน Argo ทิ้งก่อน
- สั่งรัน Terraform Destroy
terraform destroy -var group_name="group-<ID>" --auto-approveใน Repository นี้เราใช้ Makefile ในการทำงานได้ ดังนั้นสามารถสั่งรันง่ายๆ ผ่าน make ได้เลย
1.เริ่มต้นลองสั่งติดตั้ง dependencies ของ Go มาก่อน
make install2.จากนั้นสั่งรันได้เลย
make devเมื่อ Server ทำงานได้ควรจะสามารถเรียกจาก http://localhost:1323
โปรเจกนี้มี 3 ระดับคือ unit, integration ระดับของ Go และ end-to-end ในระดับ Backend รันได้ดังนี้
make test-unitmake test-integrationmake test-e2eusername: admin
password: secret