1. ก่อนเริ่มต้น
Cloud Run เป็นแพลตฟอร์มคำนวณที่มีการจัดการซึ่งทำให้คุณเรียกใช้คอนเทนเนอร์แบบไม่เก็บสถานะที่เรียกใช้ผ่านคำขอ HTTP ได้ Cloud Run เป็นแบบ Serverless ทำให้ไม่จำเป็นต้องจัดการโครงสร้างพื้นฐาน คุณจึงมีเวลาไปทุ่มเทกับสิ่งที่สำคัญที่สุด นั่นก็คือการสร้างแอปที่ยอดเยี่ยม ซึ่งสร้างขึ้นจาก Knative ซึ่งให้คุณเลือกที่จะเรียกใช้คอนเทนเนอร์ด้วย Cloud Run (จัดการครบวงจร) หรือ Cloud Run สำหรับ Anthos ได้ เป้าหมายของ Codelab นี้คือการสร้างอิมเมจคอนเทนเนอร์และทำให้ใช้งานได้กับ Cloud Run
ข้อกำหนดเบื้องต้น
ไม่มี
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID
ในภายหลัง
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานใน Google Cloud
เครื่องเสมือนแบบ Debian นี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก ซึ่งหมายความว่าสิ่งที่คุณต้องมีสำหรับ Codelab นี้คือเบราว์เซอร์ (ใช่แล้ว ทั้งหมดนี้ทำงานได้บน Chromebook)
- หากต้องการเปิดใช้งาน Cloud Shell จาก Cloud Console เพียงคลิกเปิดใช้งาน Cloud Shell (จะใช้เวลาเพียงไม่นานในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม)
เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าตนเองผ่านการตรวจสอบสิทธิ์แล้วและโปรเจ็กต์ได้รับการตั้งค่าเป็น PROJECT_ID
แล้ว
gcloud auth list
เอาต์พุตจากคำสั่ง
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
เอาต์พุตจากคำสั่ง
[core] project = <PROJECT_ID>
หากโปรเจ็กต์ไม่ได้ตั้งค่าไว้ด้วยเหตุผลบางประการ ให้ใช้คำสั่งต่อไปนี้
gcloud config set project <PROJECT_ID>
กำลังมองหา PROJECT_ID
ของคุณอยู่ใช่ไหม ตรวจสอบรหัสที่คุณใช้ในขั้นตอนการตั้งค่าหรือดูในแดชบอร์ด Cloud Console
Cloud Shell ยังตั้งค่าตัวแปรสภาพแวดล้อมโดยค่าเริ่มต้นด้วย ซึ่งอาจเป็นประโยชน์เมื่อคุณเรียกใช้คำสั่งในอนาคต
echo $GOOGLE_CLOUD_PROJECT
เอาต์พุตจากคำสั่ง
<PROJECT_ID>
- สุดท้าย ให้ตั้งค่าโซนและการกำหนดค่าโปรเจ็กต์เริ่มต้น
gcloud config set compute/zone us-central1-f
คุณเลือกโซนต่างๆ ได้หลากหลาย ดูข้อมูลเพิ่มเติมได้ที่ภูมิภาคและ โซน
เปิดใช้ Cloud Run API
เปิดใช้ Cloud Run API จาก Cloud Shell
gcloud services enable run.googleapis.com
การดำเนินการนี้ควรสร้างข้อความที่ประสบความสำเร็จที่มีลักษณะคล้ายกับข้อความนี้:
Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.
3. เขียนตัวอย่างแอป
คุณจะสร้างแอป Node.js แบบเร่งด่วนอย่างง่ายที่ตอบสนองต่อคำขอ HTTP ได้
หากต้องการสร้างแอป ให้ใช้ Cloud Shell เพื่อสร้างไดเรกทอรีใหม่ชื่อ helloworld-nodejs
และเปลี่ยนไดเรกทอรีลงในไดเรกทอรีดังกล่าว
mkdir helloworld-nodejs cd helloworld-nodejs
สร้างไฟล์ package.json
ที่มีเนื้อหาต่อไปนี้
{
"name": "cloudrun-helloworld",
"version": "1.0.0",
"description": "Simple hello world sample in Node",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"author": "",
"license": "Apache-2.0",
"dependencies": {
"express": "^4.17.1"
}
}
สิ่งสำคัญที่สุดคือ ไฟล์ด้านบนมีคำสั่งเริ่มต้นสคริปต์และขึ้นอยู่กับเฟรมเวิร์กเว็บแอปของ Express
จากนั้นให้สร้างไฟล์ index.js
ในไดเรกทอรีเดียวกันและคัดลอกเนื้อหาต่อไปนี้ลงในไฟล์
const express = require('express');
const app = express();
app.get('/', (req, res) => {
console.log('Hello world received a request.');
const target = process.env.TARGET || 'World';
res.send(`Hello ${target}!`);
});
const port = process.env.PORT || 8080;
app.listen(port, () => {
console.log('Hello world listening on port', port);
});
โค้ดดังกล่าวจะสร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รอฟังพอร์ตซึ่งกำหนดโดยตัวแปรสภาพแวดล้อม PORT
ตอนนี้แอปของคุณพร้อมที่จะสร้างด้วยคอนเทนเนอร์ ทดสอบ และอัปโหลดไปยัง Container Registry แล้ว
4. สร้างคอนเทนเนอร์แอปและอัปโหลดไปยัง Container Registry
หากต้องการสร้างคอนเทนเนอร์ตัวอย่างแอป ให้สร้างไฟล์ใหม่ชื่อ Dockerfile
ในไดเรกทอรีเดียวกับไฟล์ต้นฉบับ และคัดลอกเนื้อหาต่อไปนี้ลงในไฟล์
# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:12-slim
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# A wildcard is used to ensure both package.json AND package-lock.json are copied.
# Copying this separately prevents re-running npm install on every code change.
COPY package*.json ./
# Install production dependencies.
RUN npm install --only=production
# Copy local code to the container image.
COPY . ./
# Run the web service on container startup.
CMD [ "npm", "start" ]
ตอนนี้ ให้สร้างอิมเมจคอนเทนเนอร์โดยใช้ Cloud Build โดยเรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีที่มี Dockerfile
gcloud builds submit --tag gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
$GOOGLE_CLOUD_PROJECT
เป็นตัวแปรสภาพแวดล้อมที่มีรหัสโปรเจ็กต์ Google Cloud เมื่อเรียกใช้ใน Cloud Shell หรือเรียกใช้ gcloud config get-value project
ก็ได้
เมื่อพุชไปยังรีจิสทรีแล้ว คุณจะเห็นข้อความ SUCCESS
ที่มีชื่อรูปภาพ (gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
) ระบบจะจัดเก็บอิมเมจไว้ใน Container Registry และนํากลับมาใช้ใหม่ได้หากต้องการ
คุณแสดงรายการอิมเมจคอนเทนเนอร์ทั้งหมดที่เชื่อมโยงกับโปรเจ็กต์ปัจจุบันได้โดยใช้คำสั่งนี้
gcloud container images list
หากต้องการเรียกใช้และทดสอบแอปจาก Cloud Shell ในเครื่อง คุณสามารถเริ่มใช้งานได้โดยใช้คำสั่ง docker
มาตรฐานนี้
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
ใน Cloud Shell ให้คลิกตัวอย่างเว็บ แล้วเลือกแสดงตัวอย่างบนพอร์ต 8080
ระบบจะเปิดหน้าต่างเบราว์เซอร์ที่มีข้อความ Hello World!
หรือคุณจะใช้ curl localhost:8080
ก็ได้
5. ทำให้ใช้งานได้กับ Cloud Run
การทำให้แอปที่สร้างโดยใช้คอนเทนเนอร์ใช้งานได้กับ Cloud Run นั้นทำได้โดยใช้คำสั่งต่อไปนี้ (อย่าลืมปรับแอปเป็นชื่อรูปภาพที่ถูกต้องสำหรับแอปที่คุณสร้างหรือใช้อิมเมจ gcr.io/cloudrun/hello
ที่สร้างไว้ล่วงหน้า)
gcloud run deploy helloworld \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld \ --platform managed \ --region us-central1 \ --allow-unauthenticated
ตัวเลือกการปรับใช้ --allow-unauthenticated
ช่วยให้คุณเข้าถึงแอปได้โดยไม่ต้องตรวจสอบสิทธิ์ ตัวเลือกการทำให้ใช้งานได้ของ --platform managed \
หมายความว่าคุณกำลังขอสภาพแวดล้อมที่มีการจัดการครบวงจร (ไม่ใช่โครงสร้างพื้นฐาน Kubernetes ผ่าน Anthos)
รอสักครู่จนกว่าการติดตั้งใช้งานจะเสร็จสมบูรณ์ เมื่อดำเนินการเสร็จสิ้น บรรทัดคำสั่งจะแสดง URL ของบริการ
Service [helloworld] revision [helloworld-00001] has been deployed and is serving traffic at https://helloworld-wdl7fdwaaa-uc.a.run.app
ตอนนี้คุณจะไปที่คอนเทนเนอร์ที่ทำให้ใช้งานได้แล้วโดยเปิด URL บริการในเว็บเบราว์เซอร์ ดังนี้
Cloud Run จะปรับขนาดอิมเมจคอนเทนเนอร์โดยอัตโนมัติและในแนวนอนเพื่อจัดการคำขอที่ได้รับ จากนั้นจึงลดขนาดลงเมื่อความต้องการลดลง คุณจะจ่ายเฉพาะ CPU, หน่วยความจำ และเครือข่ายที่ใช้ในระหว่างการจัดการคำขอเท่านั้น
6. ล้างข้อมูล
แม้ว่า Cloud Run จะไม่เรียกเก็บเงินเมื่อไม่ได้ใช้งานบริการ แต่คุณก็ยังอาจเรียกเก็บเงินสำหรับการจัดเก็บอิมเมจคอนเทนเนอร์ที่สร้าง
คุณสามารถลบโปรเจ็กต์ Google Cloud เพื่อหลีกเลี่ยงการเรียกเก็บเงินได้ ซึ่งจะเป็นการหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้สำหรับโปรเจ็กต์นั้น หรือเพียงลบอิมเมจ Helloworld โดยใช้คำสั่งนี้
gcloud container images delete gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
หากต้องการลบบริการ Cloud Run ให้ใช้คำสั่งนี้
gcloud run services delete helloworld \ --platform managed \ --region us-central1
7. ขอแสดงความยินดี
ยินดีด้วย คุณทำให้แอปที่อยู่ในอิมเมจคอนเทนเนอร์ใช้งานได้กับ Cloud Run แล้ว
ดูข้อมูลเพิ่มเติม
ขั้นตอนต่อไปที่ดีคือการดูการเริ่มต้นอย่างรวดเร็ว: ทำให้ใช้งานได้กับ Cloud Run สำหรับ Anthos บน Google Cloud
โปรดดูแหล่งข้อมูลต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคอนเทนเนอร์ HTTP แบบไม่เก็บสถานะที่เหมาะสำหรับ Cloud Run จากแหล่งที่มาของโค้ดและการพุชไปยัง Container Registry
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Knative ซึ่งเป็นโปรเจ็กต์โอเพนซอร์สที่สำคัญได้ที่ Knative