มาทำ Cloud Run และ Secret Manager ด้วย Nodejs กัน

Cloud Run คือ Serverless ของฝั่ง Google ซึ่งมีหลายตัวอยู่เหมือนกันไม่ว่าจะเป็น Cloud Funtions หรืออีกชื่อก็คือ Firebase Functions แล้วทำไมต้อง Cloud Run ก็เพราะ Cloud Run เป็น Serverless ที่จะเขียนภาษาอะไรขึ้นไปก็ได้เพราะเราทำการ Build Image ขึ้นไปผ่าน Google Container Registry (GCR) เป็นตัวเก็บ Image ของทาง Google แล้ว Cloud Run จะไปทำการ Run Image แล้วทำเป็น Container ให้เราใช้งานได้แบบทันที

Secret Manager คือตัวที่เอาไว้จัดการ Secret ต่างๆของเรา ยกตัวอย่างเช่น หลายโปรเจคจะเอา Secret ไว้ใน Config หรือ ทำเป็น .env ขึ้นมาซึ่งมันดูไม่ปลอดภัยใช่ไหมถ้ามีคนเจาะเข้าคอมเราได้หรือ Code หลุดบน Git ซึ่งตัว Secret Manager เนี่ยมันจะถูกรักษาความปลอดภัยโดย Cloud ที่เราเลือกใช้ซึ่งที่บทความเลือกใช้ Secret Manager ของ Google

ก่อนอื่นเลยเราก็มาติดตั้งตัว GCloud CLI กันก่อน โดย Download ได้จาก Link นี้
https://cloud.google.com/sdk/docs/install อันนี้ลงเองได้เลยเพราะแต่ละระบบปฏิบัติการจะลงไม่เหมือนกัน

หลังจากติดตั้งเสร็จเรียบร้อยแล้วก็ต้อง Login ให้เรียบร้อย

gcloud auth login

จะได้ URL มาเพื่อทำการ Login Copy URL แล้วไปใส่ใน Browser ที่ต้องการทำ Login

หน้าตา URL จะได้ประมาณนี้

หลังจากนั้นมันจะให้เราเลือก Project ที่เรากำลังจะทำ

ต่อมาขั้นตอนติดตั้งก็เสร็จแล้วลองมาทำการ Code ง่ายๆเพื่อจะเอาโปรเจคขึ้นไปบน Cloud Run กัน

mkdir dodohandsome-cloud-run
cd dodohandsome-cloud-run
npm init
npm i express dotenv
code .
หน้าตาก็จะได้ประมาณนี้

หลังจากนั้นจะทำการสร้าง File index.js ขึ้นมาและ Copy Code ด้านล่างไปวางใน File index.js ได้เลย

จะเห็นได้ว่า Code จะเรียก env มาเป็น response ลองมาสร้าง File .env กัน

หน้าตาจะประมาณนี้

จากนั้นลองมา Run ดูกันนะครับ

ก็จะได้ Response ตามที่เราต้องการ

ต่อมาลองมา deploy ขึ้น Cloud Run ดีกว่าสร้าง Fiel . yaml ขึ้นมาแล้วทำการ Copy Script ด้านล่างไปวาง

เปลี่ยนชื่อเป็น Project ที่สร้างบน Gcloud ได้เลย
หน้าตาก็จะประมาณนี้

Step แรกคือการ Build Image ให้ไปที่ Path ไหนซึ่งเราก็ต้องชี้ไปที่ Path ของ GCR Step สองคือการ Push Image ไปที่ Path ของ GCR
Step สุดท้ายคือการ Deploy Cloud Run
ซึ่งทั้งหมดนี้จะเกิดขึ้นบน Google ไม่ใช่บนเครื่องเรา

ก่อน Run Script ต้องสร้าง Dockerfile ขึ้นมาด้วย

อันนี้แล้วแต่จะ Set กันเลยหรือใครแค่อยากลอง Concept ก็ Copy ไปใส่ไว้ก่อนได้
gcloud auth configure-docker
gcloud builds submit --project your-project-name --config cloud-build.yaml .

มาทำการ Run Command นี้ดูซึ่ง Project ก็คือ Project ที่สร้างบน Google Cloud

ซึ่งมันฟ้อง Error แน่นอนซึ่งสิ่งที่ต้องทำผมจะสรุปให้เลยไม่งั้นมันจะ Error เยอะมากกว่าจะ Set เสร็จ ซึ่งจาก Error ข้างบนเรายังไม่ได้ Enable Cloud Run มี2 วิธีคือจะไปเปิดผ่านหน้า Console ของ Google หรือ พิมพ์ ตามข้างล่างบน Terminal ได้เลย

gcloud services enable run.googleapis.com
ลอง Run Script Deploy อีกรอบรอบนี้จะเห็นว่ามันฟ้องว่าสิทธิไม่ถึง

ให้เข้าไปที่ Project ที่สร้างแล้วไปที่ Iam โดย Checkbox Include Google-provided role grants ถึงจะเห็น 2 Rows นี้ขึ้นมา

โดยเราจะเพิ่มสิทธิให้กับ Cloudbuild ดังนี้

Cloud Build Service Account

Cloud Build WorkerPool User

Cloud Run Admin

Service Account User

กด Save แล้วลองไป Deploy อีกรอบ

เสร็จเรียบร้อย Easy
จากนั้นเข้า Google ไปที่ Cloud Run
Click เข้าไปก็จะเห็น URL ของ API เราแล้วลองเอาไป Run บน Browser ดู
เหมือนใน Local เลย Easy

จบในส่วนของการ Deploy จะเห็นว่า Return มาตาม .env ที่เราเอาใส่แต่… ถ้าเราไม่อยากเอา .env ขึ้น Git หรือส่งผ่าน File กันไปกันมาหล่ะเพราะมันดูไม่ปลอดภัยเลย … เราเลยใช้ Secret Manager มาช่วยยังไงหล่ะซึ่งขั้นตอนก็ง่ายมาก

เราก็กลับไปที่ Project แล้วเข้าไปที่ตัว Secret Manager แล้วทำการ Enable
จากนั้นก็ทำการ Create Secret

โดยผมจะให้ Secret Name มีชื่อว่า dodohandsome และ Secret Value มีค่าเป็น dodohandsome555555555555555555555555566666666666666

แค่นี้ก็ได้มาแล้ว 1 ตัวจบแล้วนะหวานเจี๊ยบ

จากนั้นเราจะไปแก้ File .yaml เพื่อใส่ Secret นี้ลงไปใน Script

ผมทำการ Copy URL ที่ได้มาใส่จบแล้ว

ลองกด Deploy Script ได้เลย

ซึ่งมันติดแน่นอนเพราะตัว Deploy เรายังเข้าไม่ถึงตัว Secret Manager

เราก็กลับไปที่ IAM แล้วเพิ่มสิทธิให้เรียบร้อยก่อน

โดยเราจะมาเพิ่มสิทธิให้ Develop

โดยเราจะเพิ่ม Permission

Secret Manager Secret Accessor

จากนั้นกด Deploy อีกรอบได้เลย

ได้แล้ว
จากนั้นลอง Refesh URL เราก็จะได้ Key ใหม่แล้ว

จบแล้วกับบทความนี้เป็นยังไงครับง่ายๆเลยแถวยังมีเรื่อง Secure ของตัว Secret ที่ไม่อยากให้อยู่บน Git หรือบน Code แค่นี้ก็เพิ่มความปลอดภัยให้ได้แล้วอีกระดับนึง รอติดตามบทความใหม่ๆได้อนาคตนะหวานเจี๊ยบอ่ะเธอ

( CR. ธำรงค์ ไชยวงค์ )

--

--

No responses yet