1. บทนำ
Cloud Run เป็นแพลตฟอร์มคำนวณที่มีการจัดการซึ่งทำให้คุณเรียกใช้คอนเทนเนอร์แบบไม่เก็บสถานะที่เรียกใช้ผ่านคำขอ HTTP ได้ ซึ่งสร้างขึ้นในโปรเจ็กต์โอเพนซอร์ส Knative ซึ่งทำให้ถ่ายโอนภาระงานข้ามแพลตฟอร์มได้ Cloud Run เป็นแบบ Serverless ด้วยการตัดการจัดการโครงสร้างพื้นฐานทั้งหมดออก คุณจึงมุ่งเน้นไปที่การสร้างแอปพลิเคชันที่ยอดเยี่ยม ซึ่งเป็นสิ่งที่สำคัญที่สุดได้
เป้าหมายของบทแนะนำนี้คือการสร้างเว็บแอปพลิเคชันอย่างง่ายและทำให้ใช้งานได้ใน Cloud Run
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตวิธีการชำระเงินได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID
) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้ใช้งานหรือไม่ คุณจะเปลี่ยนแปลงหลังจากขั้นตอนนี้ไม่ได้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าเหล่านี้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้จะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อหลีกเลี่ยงการเรียกเก็บเงินที่นอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบโปรเจ็กต์ได้ ผู้ใช้ Google Cloud ใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่ในบทแนะนำนี้ คุณจะได้ใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมของบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell จาก Cloud Console
หากเริ่มต้นใช้งาน Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอตรงกลางที่อธิบายว่านี่คืออะไร หากระบบแสดงหน้าจอตรงกลาง ให้คลิกต่อไป
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก หรืองานส่วนใหญ่ใน Codelab นี้ก็สามารถทำได้ผ่านเบราว์เซอร์
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นข้อความตรวจสอบสิทธิ์และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
เอาต์พุตจากคำสั่ง
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้เกี่ยวกับโปรเจ็กต์ของคุณ
gcloud config list project
เอาต์พุตจากคำสั่ง
[core] project = <PROJECT_ID>
หากไม่ใช่ ให้ตั้งคำสั่งด้วยคำสั่งนี้
gcloud config set project <PROJECT_ID>
เอาต์พุตจากคำสั่ง
Updated property [core/project].
3. เปิดใช้ API
จาก Cloud Shell ให้เปิดใช้ API ของ Artifact Registry, Cloud Build และ Cloud Run ดังนี้
gcloud services enable \ artifactregistry.googleapis.com \ cloudbuild.googleapis.com \ run.googleapis.com
ระบบจะแสดงข้อความดำเนินการสำเร็จที่คล้ายกับข้อความต่อไปนี้
Operation "operations/..." finished successfully.
ตอนนี้คุณพร้อมที่จะเริ่มทำงานและเขียนแอปพลิเคชันของคุณแล้ว...
4. เขียนแอปพลิเคชัน
ในขั้นตอนนี้ คุณจะสร้างแอปพลิเคชัน Python ที่ใช้ Flask แบบง่ายๆ ที่ตอบสนองต่อคำขอ HTTP
ไดเรกทอรีการทำงาน
ใช้ Cloud Shell เพื่อสร้างไดเรกทอรีที่ใช้งานได้ชื่อ helloworld-python
และเปลี่ยนไปใช้:
mkdir ~/helloworld-python cd ~/helloworld-python
main.py
สร้างไฟล์ชื่อ main.py
:
touch main.py
แก้ไขไฟล์ด้วยตัวแก้ไขบรรทัดคำสั่งที่ต้องการ (nano, vim หรือ emacs) หรือโดยคลิกปุ่ม Cloud Shell Editor
หากต้องการแก้ไขไฟล์โดยตรงด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้
cloudshell edit main.py
main.py
from flask import Flask, request
app = Flask(__name__)
@app.get("/")
def hello():
"""Return a friendly HTTP greeting."""
who = request.args.get("who", default="World")
return f"Hello {who}!\n"
if __name__ == "__main__":
# Development only: run "python main.py" and open http://localhost:8080
# When deploying to Cloud Run, a production-grade WSGI HTTP server,
# such as Gunicorn, will serve the app.
app.run(host="localhost", port=8080, debug=True)
โค้ดนี้จะสร้างบริการเว็บพื้นฐานที่ตอบกลับคำขอ HTTP GET ด้วยข้อความที่เป็นมิตร
requirements.txt
เพิ่มไฟล์ชื่อ requirements.txt
เพื่อกำหนดทรัพยากร Dependency ต่อไปนี้
touch requirements.txt
หากต้องการแก้ไขไฟล์โดยตรงด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้
cloudshell edit requirements.txt
requirements.txt
# https://pypi.org/project/flask
Flask==3.0.2
# https://pypi.org/project/gunicorn
gunicorn==21.2.0
Procfile
สุดท้าย ให้เพิ่มไฟล์ชื่อ Procfile
เพื่อระบุวิธีแสดงผลแอปพลิเคชัน:
touch Procfile
หากต้องการแก้ไขไฟล์โดยตรงด้วย Cloud Shell Editor ให้ใช้คำสั่งนี้
cloudshell edit Procfile
Procfile
web: gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app
ตรวจสอบว่าไฟล์ทั้งหมดอยู่ในไดเรกทอรีที่ใช้งานอยู่ ดังนี้
ls
ซึ่งควรแสดงไฟล์ต่อไปนี้
main.py Procfile requirements.txt
แอปพลิเคชันของคุณพร้อมที่จะทำให้ใช้งานได้แล้ว แต่มาทดสอบกันก่อน...
5. ทดสอบแอปพลิเคชัน
หากต้องการทดสอบแอปพลิเคชัน ให้สร้างสภาพแวดล้อมเสมือน ดังนี้
virtualenv venv
เปิดใช้งานสภาพแวดล้อมเสมือน
source venv/bin/activate
ติดตั้งการอ้างอิง:
pip install -r requirements.txt
คุณควรได้รับข้อความยืนยันดังต่อไปนี้
... Successfully installed Flask ... gunicorn ...
เริ่มต้นแอปพลิเคชัน:
python main.py
บันทึกแสดงว่าคุณอยู่ในโหมดการพัฒนา:
* Serving Flask app 'main' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://localhost:8080 Press CTRL+C to quit ...
ในหน้าต่าง Cloud Shell ให้คลิกไอคอน Web Preview
แล้วเลือก Preview on port 8080
:
ระบบจะเปิดหน้าต่างเบราว์เซอร์ที่แสดงข้อความ Hello World!
นอกจากนี้คุณยังเปิดเซสชัน Cloud Shell อีกเซสชันหนึ่ง (แท็บเทอร์มินัลใหม่) ได้โดยคลิกที่ไอคอน +
แล้วส่งคำขอเว็บไปยังแอปพลิเคชันที่ทำงานภายในเครื่อง โดยทำดังนี้
curl localhost:8080
คุณควรได้รับคำตอบต่อไปนี้
Hello World!
เมื่อทำเสร็จแล้ว ให้กลับไปที่เซสชัน Cloud Shell หลัก แล้วหยุดคำสั่ง python main.py
ด้วย CTRL+C
ออกจากสภาพแวดล้อมเสมือน
deactivate
สุดท้าย ให้นำไดเรกทอรีสภาพแวดล้อมเสมือนออกดังนี้
rm -r venv/
แอปพลิเคชันของคุณทำงานได้ตามที่คาดไว้: มาทำให้ใช้งานได้กัน...
6. ทำให้ใช้งานได้กับ Cloud Run
Cloud Run เป็นแบบภูมิภาค ซึ่งหมายความว่าโครงสร้างพื้นฐานที่เรียกใช้บริการ Cloud Run จะอยู่ในภูมิภาคเฉพาะและได้รับการจัดการโดย Google เพื่อให้ใช้งานได้ซ้ำซ้อนกันในทุกโซนภายในภูมิภาคนั้น ระบุภูมิภาคที่คุณจะใช้สำหรับการทำให้ใช้งานได้ เช่น
REGION="europe-west9"
ตรวจสอบว่าคุณยังอยู่ในไดเรกทอรีที่ใช้งานอยู่ โดยทำดังนี้
ls
ซึ่งควรแสดงไฟล์ต่อไปนี้
main.py Procfile requirements.txt
ทำให้แอปพลิเคชันใช้งานได้กับ Cloud Run ด้วยคำสั่งต่อไปนี้
gcloud run deploy helloworld-python \ --source . \ --platform managed \ --region $REGION \ --allow-unauthenticated
- คุณกำหนดภูมิภาคเริ่มต้นได้ด้วยคำสั่งนี้
gcloud config set run/region $REGION
- นอกจากนี้ คุณยังทำให้ Cloud Run ได้รับการจัดการโดยค่าเริ่มต้นได้ด้วยคำสั่งนี้:
gcloud config set run/platform managed
- ตัวเลือก
--allow-unauthenticated
จะทำให้บริการพร้อมใช้งานแบบสาธารณะ โปรดใช้--no-allow-unauthenticated
แทนเพื่อหลีกเลี่ยงคำขอที่ไม่ผ่านการตรวจสอบสิทธิ์
คุณจะได้รับข้อความแจ้งให้สร้างที่เก็บ Artifact Registry เป็นครั้งแรก แตะ Enter เพื่อตรวจสอบข้อมูลต่อไปนี้
Deploying from source requires an Artifact Registry Docker repository to store built containers. A repository named [cloud-run-source-deploy] in region [REGION] will be created. Do you want to continue (Y/n)?
การดำเนินการนี้จะเริ่มการอัปโหลดซอร์สโค้ดของคุณไปยังที่เก็บ Artifact Registry และบิลด์ของอิมเมจคอนเทนเนอร์:
Building using Buildpacks and deploying container ... * Building and deploying new service... Building Container. OK Creating Container Repository... OK Uploading sources... * Building Container... Logs are available at ...
จากนั้นรอสักครู่จนกว่าการติดตั้งใช้งานจะเสร็จสมบูรณ์ เมื่อทำสำเร็จ บรรทัดคำสั่งจะแสดง URL ของบริการดังนี้
... OK Building and deploying new service... Done. OK Creating Container Repository... OK Uploading sources... OK Building Container... Logs are available at ... OK Creating Revision... Creating Service. OK Routing traffic... OK Setting IAM Policy... Done. Service [SERVICE]... has been deployed and is serving 100 percent of traffic. Service URL: https://SERVICE-PROJECTHASH-REGIONID.a.run.app
คุณจะได้รับ URL ของบริการโดยใช้คำสั่งนี้
SERVICE_URL=$( \ gcloud run services describe helloworld-python \ --platform managed \ --region $REGION \ --format "value(status.url)" \ ) echo $SERVICE_URL
ซึ่งควรแสดงข้อมูลต่อไปนี้
https://helloworld-python-PROJECTHASH-REGIONID.a.run.app
ตอนนี้คุณสามารถใช้แอปพลิเคชันของคุณได้โดยเปิด URL บริการในเว็บเบราว์เซอร์ ดังนี้
คุณยังเรียกใช้แอปพลิเคชันจาก Cloud Shell ได้อีกด้วย
curl $SERVICE_URL?who=me
ซึ่งจะให้คำทักทายที่คาดไว้ดังนี้
Hello me!
ยินดีด้วย คุณเพิ่งทำให้แอปพลิเคชันใช้งานได้ใน Cloud Run Cloud Run จะปรับขนาดอิมเมจคอนเทนเนอร์โดยอัตโนมัติและในแนวนอนเพื่อจัดการคำขอที่ได้รับ จากนั้นจึงลดขนาดลงเมื่อความต้องการลดลง คุณจะจ่ายเฉพาะ CPU, หน่วยความจำ และเครือข่ายที่ใช้ในระหว่างการจัดการคำขอเท่านั้น
7. ล้างข้อมูล
แม้ว่า Cloud Run จะไม่เรียกเก็บเงินเมื่อไม่ได้ใช้งานบริการ คุณอาจยังคงมีการเรียกเก็บเงินสำหรับการจัดเก็บอิมเมจคอนเทนเนอร์ใน Artifact Registry คุณสามารถลบที่เก็บหรือลบโปรเจ็กต์ระบบคลาวด์เพื่อหลีกเลี่ยงค่าใช้จ่ายได้ การลบโปรเจ็กต์ที่อยู่ในระบบคลาวด์จะหยุดการเรียกเก็บเงินสำหรับทรัพยากรทั้งหมดที่ใช้ในโปรเจ็กต์นั้น
วิธีลบที่เก็บอิมเมจคอนเทนเนอร์
gcloud artifacts repositories delete cloud-run-source-deploy \ --location $REGION
วิธีลบบริการ Cloud Run
gcloud run services delete helloworld-python \ --platform managed \ --region $REGION
หากต้องการลบโปรเจ็กต์ Google Cloud ให้ทำดังนี้
- เรียกดูรหัสโปรเจ็กต์ปัจจุบัน:
PROJECT_ID=$(gcloud config get-value core/project)
- ตรวจสอบว่านี่คือโปรเจ็กต์ที่คุณต้องการลบ
echo $PROJECT_ID
- ลบโปรเจ็กต์:
gcloud projects delete $PROJECT_ID
8. ยินดีด้วย
คุณสร้างเว็บแอปพลิเคชันแบบง่ายๆ และทำให้ใช้งานได้ใน Cloud Run แล้ว
ดูข้อมูลเพิ่มเติม
- ดูเอกสารประกอบ Cloud Run
- ทำการพัฒนาเป็นเวอร์ชันที่ใช้งานจริงใน 3 ขั้นตอนง่ายๆ ด้วย Cloud Run เพื่อสำรวจตัวเลือกเพิ่มเติม
- ดำเนินการ Django บน Cloud Run ให้เสร็จสมบูรณ์เพื่อสร้าง Cloud SQL DB จัดการข้อมูลเข้าสู่ระบบด้วย Secret Manager และติดตั้งใช้งาน Django
- ดู Codelab ของ Cloud Run...
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0