Cloud Run เป็นแพลตฟอร์มการประมวลผลที่มีการจัดการซึ่งทําให้คุณเรียกใช้คอนเทนเนอร์แบบไม่เก็บสถานะที่เรียกใช้ผ่านคําขอ HTTP ได้ Cloud Run เป็นแบบ Serverless ซึ่งจะช่วยให้คุณไม่จําเป็นต้องจัดการโครงสร้างพื้นฐาน เพื่อโฟกัสกับสิ่งที่สําคัญที่สุดคือการสร้างแอปที่ยอดเยี่ยม การดําเนินการนี้สร้างจาก Knative ซึ่งช่วยให้คุณเรียกใช้คอนเทนเนอร์ด้วย Cloud Run (มีการจัดการครบวงจร) หรือ Cloud Run สําหรับ Anthos ได้ เป้าหมายของ Codelab นี้คือเพื่อให้คุณสร้างอิมเมจคอนเทนเนอร์และทําให้ใช้งานได้กับ Cloud Run
ข้อกำหนดเบื้องต้น
ไม่มีข้อมูล
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
หากยังไม่มีบัญชี Google (Gmail หรือ Google Apps) คุณต้องสร้างบัญชี ลงชื่อเข้าใช้คอนโซล Google Cloud Platform (console.cloud.google.com) และสร้างโปรเจ็กต์ใหม่ ดังนี้
โปรดทราบว่ารหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ํากันสําหรับโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อข้างต้นมีผู้อื่นนําไปใช้แล้ว ขออภัยในความไม่สะดวก) และจะเรียกใน Codelab นี้ว่า PROJECT_ID
ในภายหลัง
จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากรของ Google Cloud
การเรียกใช้ Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่อาจมากกว่านั้นหากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทํางาน (ดู "cleanup" ในตอนท้ายของเอกสารนี้)
ผู้ใช้ใหม่ของ Google Cloud Platform มีสิทธิ์รับช่วงทดลองใช้ฟรี $300
Cloud Shell
แม้ว่า Google Cloud จะทํางานจากแล็ปท็อปได้จากระยะไกล แต่คุณใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคําสั่งที่ทํางานใน Google Cloud
เครื่องเสมือนบน Debian นี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหน้าแรกขนาด 5 GB ถาวรและทํางานอยู่ใน Google Cloud ซึ่งช่วยปรับปรุงประสิทธิภาพและการตรวจสอบสิทธิ์ของเครือข่ายได้อย่างมาก ซึ่งหมายความว่า เพียงแค่ใช้ Codelab นี้ คุณก็สามารถใช้เบราว์เซอร์ได้ (ใช่บนอุปกรณ์ Chromebook)
หากต้องการเปิดใช้งาน Google Cloud Shell เพียงคลิกปุ่มด้านขวาบนของคอนโซลของนักพัฒนาซอฟต์แวร์ (ใช้เวลาเพียงไม่กี่นาทีในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม) โดยทําดังนี้
คลิกปุ่ม "เริ่ม Cloud Shell"
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว ให้ตรวจสอบว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว และมีการตั้งค่าโปรเจ็กต์เป็น PROJECT_ID
แล้ว:
gcloud auth list
เอาต์พุตจากคําสั่ง
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
เอาต์พุตจากคําสั่ง
[core] project = <PROJECT_ID>
นอกจากนี้ Cloud Shell จะตั้งค่าตัวแปรสภาพแวดล้อมโดยค่าเริ่มต้นด้วย ซึ่งอาจเป็นประโยชน์เมื่อเรียกใช้คําสั่งในอนาคต
echo $GOOGLE_CLOUD_PROJECT
เอาต์พุตจากคําสั่ง
<PROJECT_ID>
หากไม่ได้ตั้งค่าโปรเจ็กต์ไว้ด้วยเหตุผลบางประการ เพียงใช้คําสั่งต่อไปนี้
gcloud config set project <PROJECT_ID>
กําลังมองหา 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.
คุณจะสร้างแอป 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 แล้ว
หากต้องการคอนเทนเนอร์แอปตัวอย่าง ให้สร้างไฟล์ใหม่ชื่อ 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
) รูปภาพจะเก็บอยู่ในรีจิสทรีคอนเทนเนอร์และนํามาใช้ซ้ําได้ หากต้องการ
คุณแสดงรายการรูปภาพคอนเทนเนอร์ทั้งหมดที่เชื่อมโยงกับโปรเจ็กต์ปัจจุบันได้โดยใช้คําสั่งนี้
gcloud container images list
หากคุณต้องการเรียกใช้และทดสอบแอปในเครื่องจาก Cloud Shell คุณสามารถเริ่มทดสอบได้โดยใช้คําสั่ง docker
มาตรฐานดังนี้
docker run -d -p 8080:8080 gcr.io/$GOOGLE_CLOUD_PROJECT/helloworld
ใน Cloud Shell ให้คลิกแสดงตัวอย่างเว็บ แล้วเลือกแสดงตัวอย่างบนพอร์ต 8080
ที่เปิดหน้าต่างเบราว์เซอร์ที่ระบุว่าสวัสดีโลก
หรือจะใช้ curl localhost:8080
ก็ได้เช่นกัน
การทําให้แอปที่มีคอนเทนเนอร์ใช้งานได้บน 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, หน่วยความจํา และเครือข่ายที่ใช้ระหว่างการจัดการคําขอเท่านั้น
แม้ว่า 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
ยินดีด้วย คุณทําให้แอปที่อยู่ในแพ็กเกจคอนเทนเนอร์ใช้งานได้กับ Cloud Run แล้ว
ดูข้อมูลเพิ่มเติม
ขั้นตอนถัดไปที่ดีคือการอัปเดต Quickstart: Deploy to Cloud Run for Anthos ใน Google Cloud
ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคอนเทนเนอร์ HTTP แบบไม่เก็บสถานะซึ่งเหมาะสําหรับ Cloud Run จากแหล่งที่มาโค้ด แล้วพุชไปยัง Container Registry ได้ในแหล่งข้อมูลต่อไปนี้
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Knative ซึ่งเป็นโปรเจ็กต์โอเพนซอร์สแบบโอเพนซอร์สได้ที่Knative