@hmquan08011996
trên tinh thần xây dựng đóng góp thì mình xin share terraform của codebuild & pipeline dựa trên refer code của bạn nhé ^^ (đã chạy OK, trừ phần add thêm policy của codebuild's role thì phải sửa tay ^^)
có thể do mình hơi chậm hiu, nhg mình thấy part này khá phức tạp, dễ loạn vì nó bị chồng chéo staging & production giữa API GW và repo's branch (chưa kể phần alias trong Lambda nữa)
nhờ bạn giải thích thì mình hiu rồi, nhg mình nghĩ nên note thêm vô bài cho rõ hơn, chứ user làm theo chắc sẽ loạn như mình á ^^
@tquangdo à à, này bạn phải làm theo flow là merge từ staging lên nha, nếu mình thay đổi thẳng từ main branch thì nó sẽ không nhận nha. Do bản chất của CI/CD nhánh main nó không có build lại code, mà chỉ lấy version hiện tại của nhánh staging để làm production. Này thì tùy theo luồng CI/CD nha, bạn có thể xây dựng luồng khác
này ở bài 2 mình có nói á, lúc bạn chọn lambda function cho một endpoint thì khi bạn nhấn OK, nó sẽ hiện lên một modal hỏi bạn có muốn thêm quyền vào vào không, bạn xem kĩ lại chỗ đó nha
@hmquan08011996
thanks, phần đó mình đã làm step by step theo OK rồi! ^^
vấn đề bây giờ là mình đang bị như vầy, "Kiểm tra log thử" như bạn ghi thì OK rồi, nhưng chưa bit phải check KQ production ở đâu cả! (mình check bằng hình phải thì thấy KO phản ánh!)
chỉ phản ánh OK staging (trái), còn production (phải) KO phản ánh!
phải sửa lại value của REACT_APP_API_URL trong .env-cmdrc
sau khi CICD rồi chạy cloudfront domain trên browser thì sẽ bị lỗi CORS, sửa bằng cách hoặc Enable CORS trong AWS console API GW hoặc thêm phần CORS trong list/main.go rồi build lại!
Từ hệ thống ở bài trước, ta sẽ có API Gateway với hai Stage là staging và production,
=> repo bai-8 terraform KO auto create cái này (chỉ auto create alias "production" Lambda), phải create lại bằng tay. Nếu có time bạn up lại code terraform thì tốt quá ^^
Oke, vậy là CI/CD cho Lambda function của ta đã chạy thành công. Kiểm tra log thử
=> mình làm chỉ phản ánh OK staging (trái), còn production (phải) KO phản ánh! Mình vẫn chưa hiu chỗ nào là trigger để map với việc phản ánh CICD từ branch main lên URL production of API GW?
Sau khi cập nhật xong thì ta chạy câu lệnh để cấp quyền cho API Gateway có thể thực hiện được books_list:production
=> books_list:1 cũng cần chạy CMD dài ngoằng này, phiền nhỉ! tại sao staging KO cần mà production lại cần? sao API GW trigger Lambda mà phải cần add permission nghe lạ nhỉ, chưa thấy bao giờ ^^
ý nghĩa permission này map với chỗ nào trong AWS console vậy? sao mình xem trong lambda_role > lambda_policy KO phản ánh permission mới dc add này?
@tquangdo chỗ này thì tương lai sẽ dùng os.GetEnv() để lấy giá trị ra nha bạn, mình sẽ update trong code để lấy env được setting từ Lambda ra. Luồng của terraform sẽ là khi tạo Cognito xong, sẽ lấy ClientId đó để gán vào biến env của Lambda function. Này cũng do mình chưa mò tới, với do bài 6 cũng không có xài Lambda liên quan tới Cognito mà chỉ xài CloudFront + S3 nên mình mới tạm thời để vậy nha 😂
repo bai-6KO có code này, chỉ có login.zip đã dc build rồi thôi
=>
mình chưa bit login.zip bạn setting ClientId nào, nhg mình đoán là value cũ của bai-5, nên nếu ai cứ thế mà dùng thì sẽ KO login được, do ClientId bị khác với thực tế AWS console!
mình hiu vậy đúng hem? Hay là login.zip bạn đã set variable auto bắt đúng ClientId luôn rồi? (do bạn KO up code main.go nên ko bit được ^^)
để tiện cho user có thể terraform 1 phát chạy luôn, thì mình suggest bạn nên push code login vô bai-6, và note thêm cách update ClientId rồi build lại
(đây chỉ là suggest của riêng mình, với mục đích làm sao tiện nhất cho user khi bị bug ^^)
THẢO LUẬN
good job nha bạn!!!!!!
@hmquan08011996 trên tinh thần xây dựng đóng góp thì mình xin share terraform của codebuild & pipeline dựa trên refer code của bạn nhé ^^ (đã chạy OK, trừ phần add thêm policy của codebuild's role thì phải sửa tay ^^)
mình đã cập nhật lại file Terraform rồi nhé
@hmquan08011996 uh đúng rồi, vì lỗi nên mình buôc phải chạy CMD đó, thấy CMD dài quá mình lười ^^
@tquangdo ok, mình đã thêm note r nhé, sẽ cập nhật lại code của Terraform sau, quên mất vụ API Gateway có 2 Stage trong Terraform 🤣
@hmquan08011996 à ra là vậy, OK mình hiu rồi ^^
này bạn test thử không cần phải chạy câu CMD thêm quyền, thì nó sẽ báo lỗi á
@tquangdo à à, này bạn phải làm theo flow là merge từ staging lên nha, nếu mình thay đổi thẳng từ main branch thì nó sẽ không nhận nha. Do bản chất của CI/CD nhánh main nó không có build lại code, mà chỉ lấy version hiện tại của nhánh staging để làm production. Này thì tùy theo luồng CI/CD nha, bạn có thể xây dựng luồng khác
này ở bài 2 mình có nói á, lúc bạn chọn lambda function cho một endpoint thì khi bạn nhấn OK, nó sẽ hiện lên một modal hỏi bạn có muốn thêm quyền vào vào không, bạn xem kĩ lại chỗ đó nha
@hmquan08011996 thanks, phần đó mình đã làm step by step theo OK rồi! ^^
này bạn xem kĩ phần Lambda alias với Stage Variables ở API Gateway á
series này vẫn còn vài bài nha bạn. Mấy lỗi này do code Terraform thiếu, này mình cũng không để ý kĩ nữa 🤣, mình sẽ fix lại sau nha
@hmquan08011996 thanks bạn vì series rất hay, cuối cùng mình cũng đã done ^^
REACT_APP_API_URLtrong.env-cmdrcEnable CORStrong AWS console API GW hoặc thêm phần CORS trong list/main.go rồi build lại!@hmquan08011996 cho mình confirm 2đ:
1
bai-8terraform KO auto create cái này (chỉ auto create alias "production" Lambda), phải create lại bằng tay. Nếu có time bạn up lại code terraform thì tốt quá ^^2
https://viblo.asia/p/serverless-series-golang-bai-8-cicd-with-codepipeline-automatic-update-lambda-and-s3-spa-RQqKLBWNl7z#_create-pipeline-for-branch-main-10
mainlên URL production of API GW?totalhttps://github.com/tquangdo/codepipeline-list-function/blob/main/main.gohay
2
mình làm theo guide thì KQ OK đúng như guide nhg vô lambda
books_listthì thấy ERR này@hmquan08011996 cho mình hỏi 2 câu nha ^^
1
books_list:1cũng cần chạy CMD dài ngoằng này, phiền nhỉ! tại sao staging KO cần mà production lại cần? sao API GW trigger Lambda mà phải cần add permission nghe lạ nhỉ, chưa thấy bao giờ ^^lambda_role>lambda_policyKO phản ánh permission mới dc add này?@tquangdo chỗ này thì tương lai sẽ dùng os.GetEnv() để lấy giá trị ra nha bạn, mình sẽ update trong code để lấy env được setting từ Lambda ra. Luồng của terraform sẽ là khi tạo Cognito xong, sẽ lấy ClientId đó để gán vào biến env của Lambda function. Này cũng do mình chưa mò tới, với do bài 6 cũng không có xài Lambda liên quan tới Cognito mà chỉ xài CloudFront + S3 nên mình mới tạm thời để vậy nha 😂
@hmquan08011996 cho mình confirm lại nhận thức nhé ^^ bạn nói là:
bai-6/terraform-start/gateway_method.tfđã có sẵn setting Authorizer của user poolClientIdcủa user pool trong src code sau:bai-6KO có code này, chỉ cólogin.zipđã dc build rồi thôilogin.zipbạn settingClientIdnào, nhg mình đoán là value cũ củabai-5, nên nếu ai cứ thế mà dùng thì sẽ KO login được, doClientIdbị khác với thực tế AWS console!loginvôbai-6, và note thêm cách updateClientIdrồi build lạiCảm ơn bạn và chúc mừng năm mới nha