แอปพลิเคชันสแต็ก MEAN แบบ Serverless ใน MongoDB Atlas และ Cloud Run

1. บทนำ

ในโพสต์นี้ เราจะมาดูกันว่า Cloud Run และ MongoDB ทำงานร่วมกันเพื่อมอบประสบการณ์การพัฒนาแอปพลิเคชัน MEAN แบบ Serverless อย่างสมบูรณ์ได้อย่างไร เราจะได้เรียนรู้วิธีสร้างแอปพลิเคชัน MEAN แบบ Serverless ด้วย Cloud Run และ MongoDB Atlas ซึ่งเป็นแพลตฟอร์มข้อมูลแอปพลิเคชันแบบมัลติคลาวด์จาก MongoDB

Cloud Run คืออะไร

Cloud Run ช่วยให้คุณสร้างและทำให้แอปที่สร้างโดยใช้คอนเทนเนอร์ที่รองรับการปรับขนาดซึ่งเขียนในภาษาใดก็ได้ (รวมถึง Go, Python, Java, Node.js, .NET และ Ruby) บนแพลตฟอร์มที่มีการจัดการครบวงจร Cloud Run โดดเด่นกว่าทีมอื่นๆ เนื่องจากช่วยให้เราสามารถทำสิ่งต่อไปนี้

  • โค้ดแพ็กเกจในคอนเทนเนอร์แบบไม่เก็บสถานะหลายรายการที่รับรู้คำขอและใช้งานผ่านคำขอ HTTP
  • ระบบจะเรียกเก็บเงินตามทรัพยากรที่คุณใช้เท่านั้น
  • รองรับภาษาโปรแกรมหรือไลบรารีระบบปฏิบัติการที่คุณเลือก หรือไบนารีใดก็ได้

ไปที่ลิงก์นี้เพื่อดูฟีเจอร์เพิ่มเติมในบริบทฉบับเต็ม

ฐานข้อมูล Serverless ที่มี MongoDB Atlas

MongoDB ได้เปิดตัวอินสแตนซ์แบบ Serverless ซึ่งเป็นการทำให้ใช้งานได้ของฐานข้อมูลแบบ Serverless แบบใหม่ที่มีการจัดการครบวงจรใน Atlas เพื่อแก้ปัญหานี้ อินสแตนซ์แบบ Serverless จะทำให้คุณไม่ต้องกังวลเกี่ยวกับโครงสร้างพื้นฐาน เพียงทำให้ฐานข้อมูลใช้งานได้ ระบบก็จะปรับขนาดขึ้นและลงได้อย่างราบรื่นตามความต้องการ โดยไม่จำเป็นต้องจัดการโดยตรง และที่ดีที่สุดคือ คุณจะถูกเรียกเก็บเงินสำหรับการดำเนินการที่คุณดำเนินการเท่านั้น เราจะรวมความสามารถของ Cloud Run และ MongoDB Atlas เข้าด้วยกันเพื่อให้สถาปัตยกรรมของเราเป็นแบบ Serverless อย่างแท้จริง

สแต็ก MEAN

สแต็ก MEAN คือสแต็กเทคโนโลยีสำหรับสร้างเว็บแอปพลิเคชันแบบเต็มสแต็กด้วย JavaScript และ JSON สแต็ก MEAN ประกอบด้วยคอมโพเนนต์หลัก 4 รายการ ได้แก่ MongoDB, Express, Angular และ Node.js

  • MongoDB มีหน้าที่รับผิดชอบในการจัดเก็บข้อมูล
  • Express.js เป็นเฟรมเวิร์กเว็บแอปพลิเคชัน Node.js สำหรับ API อาคาร
  • Angular เป็นแพลตฟอร์ม JavaScript ฝั่งไคลเอ็นต์
  • Node.js เป็นสภาพแวดล้อมรันไทม์ของ JavaScript ฝั่งเซิร์ฟเวอร์ เซิร์ฟเวอร์ใช้ไดรเวอร์ MongoDB Node.js เพื่อเชื่อมต่อกับฐานข้อมูล รวมทั้งเรียกและจัดเก็บข้อมูล

สิ่งที่คุณจะสร้าง

คุณจะต้องเขียนแอปพลิเคชันบทบาทพนักงาน-งานของสแต็กทั้งหมดใน MongoDB, Express JS, Angular JS และ Node JS ซึ่งประกอบด้วย

  • แอปพลิเคชันเซิร์ฟเวอร์ใน Node JS และ Express JS ที่สร้างโดยใช้คอนเทนเนอร์
  • แอปพลิเคชันไคลเอ็นต์ที่สร้างใน AngularJS ซึ่งมีคอนเทนเนอร์
  • ระบบทำให้แอปพลิเคชันทั้ง 2 แอปใช้งานได้ใน Cloud Run แล้ว
  • แอปเซิร์ฟเวอร์เชื่อมต่อกับอินสแตนซ์ MongoDB แบบ Serverless โดยใช้ไดรเวอร์ NodeJS ของ MongoDB
  • Server API จะทำการโต้ตอบแบบอ่านและเขียนกับฐานข้อมูล
  • แอปพลิเคชันไคลเอ็นต์เป็นอินเทอร์เฟซผู้ใช้สำหรับแอปพลิเคชันบทบาทพนักงาน-งาน

สิ่งที่คุณจะได้เรียนรู้

  • วิธีสร้างอินสแตนซ์ MongoDB แบบ Serverless
  • วิธีตั้งค่าโปรเจ็กต์ Cloud Run
  • วิธีทำให้เว็บแอปพลิเคชันใช้งานได้ใน Google Cloud Run
  • วิธีสร้างและทำให้แอปพลิเคชันสแต็ก MEAN ใช้งานได้

2. ข้อกำหนด

  • เบราว์เซอร์ เช่น Chrome หรือ Firefox
  • โปรเจ็กต์ Google Cloud Platform ที่มีอินสแตนซ์ Cloud Run และ MongoDB Atlas
  • ส่วนถัดไปมีรายการขั้นตอนในการสร้างแอปพลิเคชันสแต็ก MEAN

3. สร้างอินสแตนซ์และฐานข้อมูล MongoDB Serverless

e5cc775a49f2fb0.png

  • เมื่อลงชื่อสมัครใช้แล้ว ให้คลิก "สร้างฐานข้อมูล" เพื่อสร้างอินสแตนซ์แบบ Serverless ใหม่ เลือกการกำหนดค่าต่อไปนี้

fca10bf6f031af7a.png

  • เมื่อจัดสรรอินสแตนซ์แบบ Serverless แล้ว คุณควรเห็นว่าอินสแตนซ์พร้อมใช้งาน

d13c4b8bdd9569fd.png

  • คลิกลิงก์ "เชื่อมต่อ" ปุ่มสำหรับเพิ่มที่อยู่ IP ของการเชื่อมต่อและผู้ใช้ฐานข้อมูล
  • สำหรับ Codelab นี้ เราจะใช้ "อนุญาตการเข้าถึงจากทุกที่" การตั้งค่า MongoDB Atlas มาพร้อมกับชุดฟีเจอร์การรักษาความปลอดภัยและการเข้าถึง โปรดดูข้อมูลเพิ่มเติมในบทความเอกสารเกี่ยวกับฟีเจอร์ความปลอดภัย
  • ใช้ข้อมูลเข้าสู่ระบบที่ต้องการสำหรับชื่อผู้ใช้และรหัสผ่านของฐานข้อมูล เมื่อทําตามขั้นตอนเหล่านี้เสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้

bffeef16de1d1cd2.png

  • ดำเนินการต่อโดยคลิก "เลือกวิธีการเชื่อมต่อ" แล้วเลือก "Connect your application"

75771e64427acd5e.png

  • คัดลอกสตริงการเชื่อมต่อที่คุณเห็น แล้วเปลี่ยนรหัสผ่านของคุณเอง เราจะใช้สตริงนี้เพื่อเชื่อมต่อกับฐานข้อมูลของเราในส่วนต่อไปนี้

4. สร้างโปรเจ็กต์ Cloud Run

  • ขั้นแรก ให้ลงชื่อเข้าใช้ Cloud Console สร้างโปรเจ็กต์ใหม่ หรือใช้โปรเจ็กต์ที่มีอยู่อีกครั้ง
  • จำรหัสโปรเจ็กต์ของโปรเจ็กต์ที่คุณสร้าง
  • ด้านล่างนี้คือรูปภาพที่แสดงหน้าโปรเจ็กต์ใหม่ ซึ่งคุณจะเห็นรหัสโปรเจ็กต์ในขณะที่สร้าง

f32dbd4eb2b7501e.png

  • จากนั้นเปิดใช้ Cloud Run API จาก Cloud Shell ดังนี้
  • เปิดใช้งาน Cloud Shell จาก Cloud Console เพียงคลิก "เปิดใช้งาน Cloud Shell"
  • เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าคุณผ่านการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัส PROJECT แล้ว หากโปรเจ็กต์ไม่ได้ตั้งค่าไว้ด้วยเหตุผลบางประการ ให้ใช้คำสั่งต่อไปนี้
gcloud config set project PROJECT_ID

3da173210a016316.png

  • ใช้คำสั่งต่อไปนี้
gcloud services enable run.googleapis.com
  • เราจะใช้ Cloud Shell และ Cloud Shell Editor สำหรับการอ้างอิงโค้ด หากต้องการเข้าถึง Cloud Shell Editor ให้คลิก "เปิดเครื่องมือแก้ไข" จาก Cloud Shell Terminal:

83793a577f08e4d4.png

5. โคลนโปรเจ็กต์สแต็ก MEAN

  • เราจะทำให้เว็บแอปพลิเคชันสำหรับการจัดการพนักงานใช้งานได้ REST API สร้างขึ้นด้วย Express และ Node.js อินเทอร์เฟซเว็บด้วย Angular และข้อมูลจะถูกจัดเก็บไว้ในอินสแตนซ์ MongoDB Atlas ที่เราสร้างขึ้นก่อนหน้านี้
  • โคลนที่เก็บโปรเจ็กต์โดยเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล Cloud Shell
git clone https://github.com/mongodb-developer/mean-stack-example.git

6. ทำให้ Express และ Node.js REST API ใช้งานได้

ไฟล์การกำหนดค่า Docker

  • ก่อนอื่น เราจะทำให้บริการ Cloud Run ใช้งานได้สำหรับ Express REST API ไฟล์ที่สำคัญที่สุดสำหรับการทำให้ใช้งานได้ของเราคือไฟล์การกำหนดค่า Docker เรามาดูกันเลย

mean-stack-example/server/Dockerfile

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:17-slim
 
WORKDIR /usr/app
COPY ./ /usr/app
 
# Install dependencies and build the project.
RUN npm install
RUN npm run build
 
# Run the web service on container startup.
CMD ["node", "dist/server.js"]
  • การกำหนดค่านี้จะตั้งค่า Node.js จากนั้นจึงคัดลอกและสร้างโปรเจ็กต์ เมื่อคอนเทนเนอร์เริ่มทำงาน คำสั่งด้านล่างจะเริ่มบริการ
node dist/server.js
  • หากต้องการเริ่มการทำให้ Cloud Run ใช้งานได้ใหม่ ให้คลิกไอคอน Cloud Run บนแถบด้านซ้าย ดังนี้

48c73bda3aa4ea02.png

  • จากนั้น คลิกไอคอน "ทำให้ใช้งานได้กับ Cloud Run" ดังต่อไปนี้

cde124ba8ec23b34.png

  • กรอกการกำหนดค่าบริการดังนี้
  • ชื่อบริการ: Node-express-api
  • แพลตฟอร์มการทำให้ใช้งานได้: Cloud Run (จัดการครบวงจร)
  • ภูมิภาค: เลือกภูมิภาคที่อยู่ใกล้กับภูมิภาคฐานข้อมูลของคุณเพื่อลดเวลาในการตอบสนอง
  • การตรวจสอบสิทธิ์: อนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์
  • ภายใต้ การตั้งค่าการแก้ไข ให้คลิก แสดงการตั้งค่าขั้นสูง เพื่อขยาย:
  • พอร์ตคอนเทนเนอร์: 5200
  • ตัวแปรสภาพแวดล้อม เพิ่มคู่คีย์-ค่าต่อไปนี้และตรวจสอบว่าได้เพิ่มสตริงการเชื่อมต่อสำหรับการติดตั้งใช้งาน MongoDB Atlas เองแล้ว
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
  • สำหรับสภาพแวดล้อมของบิลด์ ให้เลือก Cloud Build
  • สุดท้าย ในส่วนการตั้งค่าการสร้าง ให้เลือก:
  • เครื่องมือสร้าง: Docker
  • Docker: Mean-stack-example/server/Dockerfile
  • คลิกปุ่ม "ทำให้ใช้งานได้" จากนั้นเลือก "แสดงบันทึกโดยละเอียด" เพื่อติดตามการทำให้บริการ Cloud Run แรกใช้งานได้
  • หลังจากบิลด์เสร็จสมบูรณ์แล้ว คุณควรเห็น URL ของบริการที่ทำให้ใช้งานได้แล้ว

759c69ba52a85b10.png

  • เปิด URL แล้วต่อท้าย "/employees" ถึงตอนจบ
  • คุณควรเห็นอาร์เรย์ที่ว่างเปล่า เนื่องจากขณะนี้ไม่มีเอกสารในฐานข้อมูล

มาทำให้อินเทอร์เฟซผู้ใช้ใช้งานได้กัน เพื่อให้เราเพิ่มได้

7. ทำให้เว็บแอปพลิเคชันของ Angular ใช้งานได้

แอปพลิเคชัน Angular ของเราอยู่ในไดเรกทอรีไคลเอ็นต์ เราจะใช้เซิร์ฟเวอร์ Nginx และ Docker เพื่อติดตั้งใช้งาน ขอบอกว่ายังมีการใช้โฮสติ้งของ Firebase สำหรับการทำให้แอปพลิเคชัน Angular อีกด้วย เนื่องจากคุณจะแสดงเนื้อหาใน CDN (เครือข่ายนำส่งข้อมูล) ได้โดยตรง

ไฟล์การกำหนดค่า

มาดูไฟล์การกำหนดค่ากัน

mean-stack-example/client/nginx.conf

events{}
 
http {
   include /etc/nginx/mime.types;
   server {
       listen 8080;
       server_name 0.0.0.0;
       root /usr/share/nginx/html;
       index index.html;
 
       location / {
           try_files $uri $uri/ /index.html;
       }
   }
}
  • ในการกำหนดค่า Nginx เราจะระบุพอร์ตเริ่มต้น 8080 และไฟล์เริ่มต้น index.html

mean-stack-example/client/Dockerfile

FROM node:17-slim AS build
 
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
 
# Install dependencies and copy them to the container
RUN npm install
COPY . .
 
# Build the Angular application for production
RUN npm run build --prod
 
# Configure the nginx web server
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/client /usr/share/nginx/html
 
# Run the web service on container startup.
CMD ["nginx", "-g", "daemon off;"]
  • ในการกำหนดค่า Docker เราจะติดตั้งการอ้างอิง Node.js และสร้างโปรเจ็กต์ จากนั้นคัดลอกไฟล์ที่สร้างไปยังคอนเทนเนอร์ กำหนดค่า และเริ่มบริการ Nginx
  • สุดท้าย เราจำเป็นต้องกำหนดค่า URL ไปยัง REST API เพื่อให้แอปพลิเคชันไคลเอ็นต์ของเราสามารถส่งคำขอไปยัง URL ดังกล่าวได้ เนื่องจากเราใช้ URL เพียงไฟล์เดียวในโปรเจ็กต์ เราจะฮาร์ดโค้ด URL หรือจะแนบตัวแปรสภาพแวดล้อมกับออบเจ็กต์หน้าต่างและเข้าถึงจากที่นั่นก็ได้

mean-stack-example/client/src/app/employee.service.ts

...
@Injectable({
 providedIn: 'root'
})
export class EmployeeService {
 // Replace with the URL of your REST API
 private url = 'https://node-express-api-vsktparjta-uc.a.run.app'; 
...
  • เราพร้อมที่จะทำให้ใช้งานได้กับ Cloud Run แล้ว เริ่มการทำให้ใช้งานได้ใหม่ด้วยการตั้งค่าการกำหนดค่าต่อไปนี้
      - Service Settings: Create a service
    
  • ชื่อบริการ: angular-web-app
  • แพลตฟอร์มการทำให้ใช้งานได้: Cloud Run (จัดการครบวงจร)
  • การตรวจสอบสิทธิ์: อนุญาตการเรียกใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์
  • สำหรับสภาพแวดล้อมของบิลด์ ให้เลือก Cloud Build
  • สุดท้าย ในส่วนการตั้งค่าการสร้าง ให้เลือก:
  • เครื่องมือสร้าง: Docker
  • Docker: Mean-stack-example/client/Dockerfile
  • คลิกปุ่ม "ทำให้ใช้งานได้" อีกครั้ง และดูบันทึกเมื่อจัดส่งแอปไปยังระบบคลาวด์แล้ว เมื่อการทำให้ใช้งานได้เสร็จสมบูรณ์ คุณควรจะเห็น URL สำหรับแอปไคลเอ็นต์

5da1d7defc1082fc.png

  • เปิด URL และเล่นเกมกับแอปพลิเคชันของคุณ!

db154f1cd57e38f0.png

8. ล้างข้อมูล

โปรดทำตามขั้นตอนต่อไปนี้เพื่อเลี่ยงไม่ให้เกิดการเรียกเก็บเงินกับบัญชี Google Cloud สำหรับทรัพยากรที่ใช้ในโพสต์นี้

ยุติอินสแตนซ์ MongoDB

  1. ไปที่คลัสเตอร์อินสแตนซ์ MongoDB
  2. เลือกคลัสเตอร์ อินสแตนซ์ที่คุณสร้าง
  3. คลิกจุดไข่ปลาข้างชื่อคลัสเตอร์แล้วเลือก "สิ้นสุด" จากรายการ

ลบการทำให้ใช้งานได้ของ Cloud Run

  1. ไปที่หน้า Cloud Run ใน Google Cloud Console
  2. เลือกบริการ Cloud Run ที่ต้องการลบ
  3. คลิกไอคอนลบที่ด้านบนของคอนโซล

9. ขอแสดงความยินดี

ขอแสดงความยินดี คุณสร้างเว็บแอปพลิเคชันสแต็ก MEAN บน Cloud Run สำเร็จแล้ว