โมดูล 4: ย้ายข้อมูลจาก Google App Engine ไปยัง Cloud Run ด้วย Docker

1. ภาพรวม

ชุด Codelab นี้ (บทแนะนำแบบลงมือปฏิบัติด้วยตนเอง) มีจุดมุ่งหมายเพื่อช่วยให้นักพัฒนาแอป Google App Engine (มาตรฐาน) ปรับแอปให้ทันสมัยด้วยการแนะนำการย้ายข้อมูลหลายๆ ครั้ง เมื่อดำเนินการดังกล่าวเสร็จแล้ว ผู้ใช้จะทำให้แอปพกพาได้มากขึ้นด้วยการสร้างคอนเทนเนอร์อย่างชัดเจนสำหรับ Cloud Run ซึ่งเป็นบริการที่คล้ายกันของ Google Cloud ที่ให้บริการโฮสต์คอนเทนเนอร์สำหรับ App Engine และบริการโฮสต์คอนเทนเนอร์อื่นๆ

บทแนะนำนี้จะสอนวิธีสร้างคอนเทนเนอร์สำหรับแอป App Engine เพื่อนำไปใช้งานในบริการที่มีการจัดการเต็มรูปแบบของ Cloud Run โดยใช้ Docker ซึ่งเป็นแพลตฟอร์มที่รู้จักกันดีในอุตสาหกรรมสำหรับการพัฒนา จัดส่ง และเรียกใช้แอปพลิเคชันในคอนเทนเนอร์ สำหรับนักพัฒนาซอฟต์แวร์ Python 2 บทแนะนำนี้จะเริ่มต้นด้วยแอปตัวอย่าง Cloud NDB App Engine ในโมดูล 2 ส่วนนักพัฒนาซอฟต์แวร์ Python 3 จะเริ่มต้นด้วยตัวอย่าง Cloud Datastore ในโมดูล 3

คุณจะได้เรียนรู้วิธีต่อไปนี้

  • สร้างคอนเทนเนอร์ให้แอปโดยใช้ Docker
  • ทําให้อิมเมจคอนเทนเนอร์ใช้งานได้กับ Cloud Run

สิ่งที่คุณต้องมี

แบบสำรวจ

คุณจะใช้ Codelab นี้อย่างไร

อ่านอย่างเดียว อ่านและทำแบบฝึกหัดให้เสร็จ

2. ฉากหลัง

ระบบ PaaS เช่น App Engine และ Cloud Functions มอบความสะดวกมากมายให้กับทีมและแอปพลิเคชันของคุณ ตัวอย่างเช่น แพลตฟอร์มแบบไร้เซิร์ฟเวอร์เหล่านี้ช่วยให้ผู้ดูแลระบบ/DevOps มุ่งเน้นที่การสร้างโซลูชันได้ แอปของคุณสามารถปรับขนาดขึ้นโดยอัตโนมัติได้ตามต้องการ ปรับขนาดลงเป็น 0 ด้วยการเรียกเก็บเงินแบบจ่ายตามการใช้งานเพื่อช่วยควบคุมต้นทุน และใช้ภาษาการพัฒนาทั่วไปที่หลากหลาย

อย่างไรก็ตาม ความยืดหยุ่นของคอนเทนเนอร์ก็เป็นสิ่งที่น่าสนใจเช่นกัน นั่นคือความสามารถในการเลือกภาษา ไลบรารี หรือไบนารีใดก็ได้ Google Cloud Run มอบสิ่งที่ดีที่สุดจากทั้ง 2 โลกให้แก่ผู้ใช้ นั่นคือความสะดวกสบายของแบบไร้เซิร์ฟเวอร์ควบคู่ไปกับความยืดหยุ่นของคอนเทนเนอร์

การเรียนรู้วิธีใช้ Cloud Run ไม่อยู่ในขอบเขตของโค้ดแล็บนี้ แต่จะอยู่ในเอกสารประกอบของ Cloud Run เป้าหมายในที่นี้คือเพื่อให้คุณทราบวิธีสร้างคอนเทนเนอร์แอป App Engine สำหรับ Cloud Run (หรือบริการอื่นๆ) มีสิ่งที่คุณควรทราบก่อนดำเนินการต่อ ซึ่งหลักๆ คือประสบการณ์ของผู้ใช้จะแตกต่างออกไปเล็กน้อยและมีระดับต่ำลงเล็กน้อย เนื่องจากคุณจะไม่ใช้โค้ดแอปพลิเคชันและนำไปใช้งานอีกต่อไป

แต่คุณจะต้องเรียนรู้บางสิ่งเกี่ยวกับคอนเทนเนอร์ เช่น วิธีสร้างและติดตั้งใช้งาน นอกจากนี้ คุณยังเลือกได้ว่าจะใส่อะไรลงในอิมเมจคอนเทนเนอร์ ซึ่งรวมถึงเว็บเซิร์ฟเวอร์ด้วย เนื่องจากคุณจะไม่ใช้เว็บเซิร์ฟเวอร์ของ App Engine อีกต่อไป หากไม่ต้องการทำตามเส้นทางนี้ การเก็บแอปไว้ใน App Engine ก็ไม่ใช่ตัวเลือกที่ไม่ดี

ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีสร้างคอนเทนเนอร์ให้แอป โดยแทนที่ไฟล์กำหนดค่า App Engine ด้วยการกำหนดค่าคอนเทนเนอร์ กำหนดสิ่งที่อยู่ในคอนเทนเนอร์ แล้วระบุวิธีเริ่มแอป ซึ่ง App Engine จะจัดการหลายๆ อย่างเหล่านี้โดยอัตโนมัติ

การย้ายข้อมูลนี้มีขั้นตอนดังนี้

  1. การตั้งค่า/การเตรียมการ
  2. สร้างคอนเทนเนอร์แอปพลิเคชัน
    • แทนที่ไฟล์การกำหนดค่า
    • แก้ไขไฟล์แอปพลิเคชัน

3. การตั้งค่า/การเตรียมการ

ก่อนที่จะไปที่ส่วนหลักของบทแนะนำนี้ เรามาตั้งค่าโปรเจ็กต์ รับโค้ด แล้วจึงติดตั้งใช้งานแอปพื้นฐานเพื่อให้ทราบว่าเราเริ่มต้นด้วยโค้ดที่ใช้งานได้

1. ตั้งค่าโปรเจ็กต์

หากคุณทำ Codelab Module 2 หรือ Module 3 เสร็จแล้ว เราขอแนะนำให้ใช้โปรเจ็กต์ (และโค้ด) เดียวกันนั้นซ้ำ หรือจะสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์อื่นที่มีอยู่ซ้ำก็ได้ ตรวจสอบว่าโปรเจ็กต์มีบัญชีสำหรับการเรียกเก็บเงินที่ใช้งานอยู่และเปิดใช้ App Engine (แอป) แล้ว

2. รับแอปตัวอย่างพื้นฐาน

ข้อกำหนดเบื้องต้นอย่างหนึ่งของ Codelab นี้คือการมีแอปตัวอย่างของโมดูล 2 หรือโมดูล 3 ที่ใช้งานได้ หากคุณยังไม่มี ให้ทำตามบทแนะนำใดบทแนะนำหนึ่ง (ลิงก์ด้านบน) ให้เสร็จก่อนที่จะดำเนินการต่อที่นี่ แต่หากคุ้นเคยกับเนื้อหาอยู่แล้ว คุณก็เริ่มได้เลยโดยคัดลอกโค้ดโมดูลที่ 2 หรือ 3 ด้านล่าง

ไม่ว่าคุณจะใช้โค้ดของคุณเองหรือโค้ดของเรา โค้ดของโมดูลที่ 2 คือจุดเริ่มต้นของบทแนะนำนี้ในเวอร์ชัน Python 2 และโค้ดของโมดูลที่ 3 คือจุดเริ่มต้นของบทแนะนำนี้ในเวอร์ชัน Python 3 Codelab ของโมดูลที่ 4 นี้จะแนะนำแต่ละขั้นตอน และเมื่อเสร็จสมบูรณ์แล้ว คุณควรมีโค้ดที่คล้ายกับโฟลเดอร์ที่เก็บข้อมูลของโมดูลที่ 4 (FINISH) ทั้งนี้ขึ้นอยู่กับตัวเลือกของคุณ

ไดเรกทอรีของไฟล์เริ่มต้นของโมดูลที่ 2 ของ Python 2 (ของคุณหรือของเรา) ควรมีลักษณะดังนี้

$ ls
README.md               appengine_config.py     requirements.txt
app.yaml                main.py                 templates

หากใช้โค้ดโมดูล 2 (2.x) ของคุณเอง คุณจะมีโฟลเดอร์ lib ด้วย lib หรือ appengine_config.py ไม่ได้ใช้สำหรับ Python 3 ซึ่งโค้ดเริ่มต้นของโมดูล 3 (3.x) ควรมีลักษณะดังนี้

$ ls
README.md               main.py                 templates
app.yaml                requirements.txt

3. (อีกครั้ง) ทำให้แอปพื้นฐานใช้งานได้

ขั้นตอนการเตรียมความพร้อมที่เหลือที่คุณต้องดำเนินการตอนนี้มีดังนี้

  1. ทำความคุ้นเคยกับgcloudเครื่องมือบรรทัดคำสั่งอีกครั้ง
  2. ทำให้แอปตัวอย่างใช้งานได้อีกครั้งด้วย gcloud app deploy
  3. ยืนยันว่าแอปทำงานใน App Engine ได้โดยไม่มีปัญหา

เมื่อทำตามขั้นตอนเหล่านั้นเรียบร้อยแล้ว คุณก็พร้อมที่จะทำให้อยู่ในคอนเทนเนอร์

4. สร้างคอนเทนเนอร์แอปพลิเคชัน

ปัจจุบัน Docker เป็นแพลตฟอร์มการทำคอนเทนเนอร์มาตรฐานในอุตสาหกรรม ความท้าทายอย่างหนึ่งในการใช้งานคือคุณต้องพยายามดูแลจัดการ Dockerfile ซึ่งเป็นไฟล์การกำหนดค่าที่กำหนดวิธีสร้างอิมเมจคอนเทนเนอร์ให้มีประสิทธิภาพ ในทางกลับกัน Buildpack ไม่ต้องใช้ความพยายามมากนักเนื่องจากใช้การตรวจสอบภายในเพื่อระบุการขึ้นต่อกันของแอป ซึ่งทำให้คอนเทนเนอร์ Buildpack มีประสิทธิภาพมากที่สุดสำหรับแอป

คุณมาถูกที่แล้วหากรู้จักคอนเทนเนอร์และ Docker อยู่แล้ว และต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการทำคอนเทนเนอร์ของแอป App Engine สำหรับ Cloud Run คุณสามารถทำโค้ดแล็บโมดูลที่ 5 (เหมือนกับโค้ดแล็บนี้ แต่ใช้ Cloud Buildpacks) ได้ในภายหลัง แอปตัวอย่างแบบพื้นฐานของเรามีขนาดเล็กพอที่จะหลีกเลี่ยงDockerfileปัญหาบางอย่างที่กล่าวถึงข้างต้น

ขั้นตอนการย้ายข้อมูลรวมถึงการแทนที่ไฟล์การกำหนดค่า App Engine และการระบุวิธีที่แอปควรเริ่มต้น ตารางด้านล่างสรุปไฟล์การกำหนดค่าที่คาดไว้สำหรับแพลตฟอร์มแต่ละประเภท เปรียบเทียบคอลัมน์ App Engine กับคอลัมน์ Docker (และ Buildpack หากมี)

คำอธิบาย

App Engine

Docker

Buildpack

การกำหนดค่าทั่วไป

app.yaml

Dockerfile

(service.yaml)

ไลบรารีของบุคคลที่สาม

requirements.txt

requirements.txt

requirements.txt

การกำหนดค่าของบุคคลที่สาม

app.yaml (รวมถึง appengine_config.py และ lib [2.x เท่านั้น])

(ไม่มี)

(ไม่มี)

สตาร์ทอัพ

(ไม่มี) หรือ app.yaml (หากใช้ entrypoint)

Dockerfile

Procfile

ละเว้นไฟล์

.gcloudignore และ .gitignore

.gcloudignore, .gitignore และ .dockerignore

.gcloudignore และ .gitignore

เมื่อสร้างคอนเทนเนอร์ของแอปแล้ว คุณจะนำไปใช้งานใน Cloud Run ได้ ตัวเลือกแพลตฟอร์มคอนเทนเนอร์อื่นๆ ของ Google Cloud ได้แก่ Compute Engine, GKE และ Anthos

การกำหนดค่าทั่วไป

การย้ายข้อมูลจาก App Engine หมายถึงการแทนที่ app.yaml ด้วย Dockerfile ที่ระบุวิธีสร้างและเรียกใช้คอนเทนเนอร์ App Engine จะเริ่มแอปพลิเคชันโดยอัตโนมัติ แต่ Cloud Run จะไม่เริ่ม คำสั่ง Dockerfile ENTRYPOINT และ CMD มีไว้เพื่อการนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับ Dockerfile จากหน้าเอกสารประกอบ Cloud Run นี้ รวมถึงดูตัวอย่าง Dockerfile ที่สร้าง gunicorn

อีกทางเลือกหนึ่งแทนการใช้ ENTRYPOINT หรือ CMD ใน Dockerfile คือการใช้ Procfile สุดท้าย .dockerignore จะช่วยกรองไฟล์ที่ไม่ใช่แอปออกเพื่อลดขนาดคอนเทนเนอร์ โปรดติดตามข้อมูลเพิ่มเติมเกี่ยวกับฟีเจอร์เหล่านี้ในเร็วๆ นี้

ลบ app.yaml และสร้าง Dockerfile

ไม่ได้ใช้ app.yaml ในคอนเทนเนอร์ ดังนั้นลบออกเลย ไฟล์การกำหนดค่าคอนเทนเนอร์คือ Dockerfile และแอปตัวอย่างของเราต้องการเพียงไฟล์ขั้นต่ำ สร้าง Dockerfile ด้วยเนื้อหานี้ โดยแทนที่ NNN ด้วย 2 หรือ 3 ขึ้นอยู่กับเวอร์ชัน Python ที่คุณใช้

FROM python:NNN-slim
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
ENTRYPOINT ["python", "main.py"]

ส่วนใหญ่ของ Dockerfile จะระบุวิธีสร้างคอนเทนเนอร์ยกเว้น ENTRYPOINT ซึ่งระบุวิธีเริ่มคอนเทนเนอร์ ในกรณีนี้คือการเรียกใช้ python main.py เพื่อเรียกใช้เซิร์ฟเวอร์การพัฒนา Flask หากคุณเพิ่งเริ่มใช้ Docker คำสั่ง FROM จะระบุอิมเมจฐานที่จะเริ่มต้น และ "slim" หมายถึงการกระจาย Python ที่มีขนาดเล็กที่สุด ดูข้อมูลเพิ่มเติมได้จากหน้าอิมเมจ Docker Python

ชุดคำสั่งตรงกลางจะสร้างไดเรกทอรีการทำงาน (/app) คัดลอกไฟล์แอปพลิเคชัน แล้วเรียกใช้ pip install เพื่อนำไลบรารีของบุคคลที่สามไปยังคอนเทนเนอร์ WORKDIR รวมคำสั่ง mkdir และ cd ของ Linux เข้าด้วยกัน ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของ WORKDIR คำสั่ง COPY และ RUN มีความชัดเจนในตัวอยู่แล้ว

ไลบรารีของบุคคลที่สาม

ไฟล์ requirements.txt สามารถคงเดิมได้ Flask ควรอยู่ที่นั่นพร้อมกับไลบรารีไคลเอ็นต์ Datastore (Cloud Datastore หรือ Cloud NDB) หากต้องการใช้เซิร์ฟเวอร์ HTTP ที่เป็นไปตาม WSGI อื่น เช่น Gunicorn (เวอร์ชันปัจจุบัน ณ เวลาที่เขียนคือ 20.0.4) ให้เพิ่ม gunicorn==20.0.4 ลงใน requirements.txt

การกำหนดค่าของบุคคลที่สาม

นักพัฒนาแอป App Engine ใน Python 2 ทราบดีว่าไลบรารีของบุคคลที่สามจะได้รับการคัดลอกลงในโฟลเดอร์ lib อ้างอิงใน requirements.txt แสดงรายการใน app.yaml และรองรับโดย appengine_config.py คอนเทนเนอร์ เช่น แอป Python 3 App Engine จะใช้เฉพาะ requirements.txt ดังนั้นจึงสามารถทิ้งส่วนอื่นๆ ได้ ซึ่งหมายความว่าหากคุณมีแอป App Engine 2.x ให้ลบ appengine_config.py และโฟลเดอร์ lib ออกได้เลย

สตาร์ทอัพ

ผู้ใช้ Python 2 ไม่ได้เริ่มต้นเว็บเซิร์ฟเวอร์ของ App Engine แต่เมื่อย้ายไปยังคอนเทนเนอร์ คุณจะต้องทำเช่นนี้ โดยทำได้ด้วยการเพิ่มคำสั่ง CMD หรือ ENTRYPOINT ใน Dockerfile เพื่อระบุวิธีเริ่มต้นแอป ซึ่งอธิบายไว้ด้านล่างในลักษณะเดียวกับผู้ใช้ Python 3

ผู้ใช้ Python 3 มีตัวเลือกในการแปลงไฟล์ app.yaml ให้มี entrypoint แทนที่จะเป็นคำสั่ง script: auto ในส่วน handlers หากคุณใช้ entrypoint ใน app.yaml Python 3 จะมีลักษณะดังนี้

runtime: python38
entrypoint: python main.py

คำสั่ง entrypoint จะบอก App Engine วิธีเริ่มต้นเซิร์ฟเวอร์ คุณย้ายไฟล์นี้ไปยัง Dockerfile ได้เกือบโดยตรง (หรือ Procfile หากใช้ Buildpack [ดูโมดูลที่ 5] เพื่อจัดคอนเทนเนอร์แอป) สรุปตำแหน่งที่คำสั่ง Entrypoint จะอยู่ระหว่าง 2 แพลตฟอร์ม

  • Docker: บรรทัดใน Dockerfile: ENTRYPOINT ["python", "main.py"]
  • Buildpacks: บรรทัดใน Procfile: web: python main.py

การใช้เซิร์ฟเวอร์การพัฒนา Flask เหมาะสำหรับการทดสอบ แต่หากใช้เซิร์ฟเวอร์ที่ใช้งานจริง เช่น gunicorn สำหรับแอปพลิเคชัน โปรดตรวจสอบว่าได้ชี้คำสั่ง ENTRYPOINT หรือ CMD ไปยังเซิร์ฟเวอร์ดังกล่าวเหมือนในตัวอย่างการเริ่มต้นใช้งาน Cloud Run อย่างรวดเร็ว

ละเว้นไฟล์

เราขอแนะนำให้สร้างไฟล์ .dockerignore เพื่อลดขนาดคอนเทนเนอร์และไม่ให้รูปภาพคอนเทนเนอร์รกไปด้วยไฟล์ที่ไม่จำเป็น เช่น

*.md
*.pyc
*.pyo
.git/
.gitignore
__pycache__

ไฟล์แอปพลิเคชัน

แอปโมดูล 2 หรือโมดูล 3 ทั้งหมดจะเข้ากันได้กับ Python 2-3 อย่างเต็มรูปแบบ ซึ่งหมายความว่าจะไม่มีการเปลี่ยนแปลงคอมโพเนนต์หลักของ main.py เราจะเพิ่มโค้ดเริ่มต้นเพียงไม่กี่บรรทัดเท่านั้น เพิ่ม 2 บรรทัดที่ด้านล่างของ main.py เพื่อเริ่มเซิร์ฟเวอร์การพัฒนา เนื่องจาก Cloud Run กำหนดให้ต้องเปิดพอร์ต 8080 เพื่อให้เรียกแอปได้

if __name__ == '__main__':
    import os
    app.run(debug=True, threaded=True, host='0.0.0.0',
            port=int(os.environ.get('PORT', 8080)))

5. สร้างและติดตั้งใช้งาน

เมื่อกำหนดค่า Docker และอัปเดตไฟล์ต้นฉบับเสร็จแล้ว คุณก็พร้อมที่จะเรียกใช้ใน Cloud Run ก่อนอื่น มาพูดถึงบริการกันสั้นๆ

บริการเทียบกับแอป

แม้ว่า App Engine จะสร้างขึ้นเพื่อโฮสต์แอปพลิเคชันเป็นหลัก แต่ก็เป็นแพลตฟอร์มสำหรับโฮสต์บริการเว็บหรือแอปพลิเคชันที่ประกอบด้วยชุดไมโครเซอร์วิสด้วย ใน Cloud Run ทุกอย่างคือบริการ ไม่ว่าจะเป็นบริการจริงหรือแอปพลิเคชันที่มีอินเทอร์เฟซเว็บ ดังนั้นให้พิจารณาการใช้งานเป็นเหมือนการติดตั้งใช้งานบริการมากกว่าแอปพลิเคชัน

คุณไม่จำเป็นต้องตั้งชื่อใดๆ เมื่อทำให้แอปพลิเคชันใช้งานได้ เว้นแต่แอป App Engine ของคุณจะประกอบด้วยบริการหลายอย่าง แต่ใน Cloud Run คุณจะต้องตั้งชื่อบริการ ในขณะที่โดเมน appspot.com ของ App Engine จะมีรหัสโปรเจ็กต์ เช่น https://PROJECT_ID.appspot.com และอาจมีตัวย่อรหัสภูมิภาค เช่น http://PROJECT_ID.REGION_ID.r.appspot.com

อย่างไรก็ตาม โดเมนสำหรับบริการ Cloud Run จะมีชื่อบริการ ตัวย่อรหัสภูมิภาค และแฮช แต่ไม่มีรหัสโปรเจ็กต์ เช่น https://SVC_NAME-HASH-REG_ABBR.a.run.app สรุปคือ ให้เริ่มคิดชื่อบริการได้เลย

ติดตั้งใช้งานบริการ

เรียกใช้คำสั่งด้านล่างเพื่อสร้างอิมเมจคอนเทนเนอร์และทำให้ใช้งานได้กับ Cloud Run เมื่อได้รับข้อความแจ้ง ให้เลือกภูมิภาคและอนุญาตการเชื่อมต่อที่ไม่ได้รับการตรวจสอบสิทธิ์เพื่อให้ทดสอบได้ง่ายขึ้น แล้วเลือกภูมิภาคตามความเหมาะสมโดยที่ SVC_NAME คือชื่อบริการที่คุณกำลังติดตั้งใช้งาน

$ gcloud beta run deploy SVC_NAME --source .
Please choose a target platform:
 [1] Cloud Run (fully managed)
 [2] Cloud Run for Anthos deployed on Google Cloud
 [3] Cloud Run for Anthos deployed on VMware
 [4] cancel
Please enter your numeric choice:  1

To specify the platform yourself, pass `--platform managed`. Or, to make this the default target platform, run `gcloud config set run/platform managed`.

Please specify a region:
 [1] asia-east1
 [2] asia-east2
 [3] asia-northeast1
 [4] asia-northeast2
 [5] asia-northeast3
 [6] asia-south1
 [7] asia-southeast1
 [8] asia-southeast2
 [9] australia-southeast1
 [10] europe-north1
 [11] europe-west1
 [12] europe-west2
 [13] europe-west3
 [14] europe-west4
 [15] europe-west6
 [16] northamerica-northeast1
 [17] southamerica-east1
 [18] us-central1
 [19] us-east1
 [20] us-east4
 [21] us-west1
 [22] us-west2
 [23] us-west3
 [24] us-west4
 [25] cancel
Please enter your numeric choice: <select your numeric region choice>

To make this the default region, run `gcloud config set run/region REGION`.

Allow unauthenticated invocations to [SVC_NAME] (y/N)?  y

Building using Dockerfile and deploying container to Cloud Run service [SVC_NAME] in project [PROJECT_ID] region [REGION]
✓ Building and deploying new service... Done.
  ✓ Uploading sources...
  ✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds/BUILD-HASH?project=PROJECT_NUM].
  ✓ Creating Revision... Deploying Revision.
  ✓ Routing traffic...
  ✓ Setting IAM Policy...
Done.
Service [SVC_NAME] revision [SVC_NAME-00001-vos] has been deployed and is serving 100 percent of traffic.
Service URL: https://SVC_NAME-HASH-REG_ABBR.a.run.app

ไปที่ URL ที่ระบุด้วยเบราว์เซอร์เพื่อยืนยันว่าการติดตั้งใช้งานสำเร็จ

ตามที่คำสั่ง gcloud ระบุไว้ ผู้ใช้สามารถตั้งค่าเริ่มต้นต่างๆ เพื่อลดเอาต์พุตและการโต้ตอบได้ตามที่แสดงไว้ข้างต้น เช่น หากต้องการหลีกเลี่ยงการโต้ตอบทั้งหมด คุณสามารถใช้คำสั่งการติดตั้งใช้งานแบบบรรทัดเดียวต่อไปนี้แทนได้

$ gcloud beta run deploy SVC_NAME --source . --platform managed --region REGION --allow-unauthenticated

หากใช้ตัวเลือกนี้ โปรดเลือกชื่อบริการเดียวกัน SVC_NAME และREGION ชื่อที่ต้องการ ไม่ใช่การเลือกเมนูที่จัดทำดัชนีแล้วเหมือนที่เราทำแบบอินเทอร์แอกทีฟด้านบน

6. สรุป/ล้างข้อมูล

ยืนยันว่าแอปทำงานใน Cloud Run ได้เหมือนกับที่ทำงานใน App Engine หากคุณข้ามมาดูซีรีส์นี้โดยไม่ได้ทำ Codelab ก่อนหน้านี้ แอปจะไม่เปลี่ยนแปลง แต่จะลงทะเบียนการเข้าชมทั้งหมดในหน้าเว็บหลัก (/) และจะมีลักษณะดังนี้เมื่อคุณเข้าชมเว็บไซต์มากพอ

แอป VisitMe

ตอนนี้โค้ดของคุณควรตรงกับโค้ดในโฟลเดอร์ที่เก็บข้อมูลของโมดูลที่ 4 ไม่ว่าจะเป็น 2.x หรือ 3.x ขอแสดงความยินดีที่ทำ Codelab โมดูลที่ 4 นี้เสร็จสมบูรณ์

ไม่บังคับ: ล้างข้อมูล

แล้วการล้างข้อมูลเพื่อหลีกเลี่ยงการเรียกเก็บเงินจนกว่าคุณจะพร้อมที่จะไปยัง Codelab การย้ายข้อมูลถัดไปล่ะ เนื่องจากตอนนี้คุณใช้ผลิตภัณฑ์อื่นแล้ว โปรดอ่านคู่มือราคาของ Cloud Run

ไม่บังคับ: ปิดใช้บริการ

หากยังไม่พร้อมที่จะไปยังบทแนะนำถัดไป ให้ปิดใช้บริการเพื่อหลีกเลี่ยงค่าใช้จ่ายเพิ่มเติม เมื่อพร้อมที่จะไปที่ Codelab ถัดไป คุณก็เปิดใช้ฟีเจอร์นี้อีกครั้งได้ ขณะที่แอปถูกปิดใช้ แอปจะไม่ได้รับการเข้าชมใดๆ ที่จะทำให้เกิดค่าใช้จ่าย แต่สิ่งอื่นที่คุณอาจถูกเรียกเก็บเงินคือการใช้งาน Datastore หากเกินโควต้าฟรี ดังนั้นให้ลบข้อมูลให้เพียงพอเพื่อให้อยู่ในขีดจำกัดนั้น

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

ขั้นตอนถัดไป

ยินดีด้วย คุณสร้างคอนเทนเนอร์ให้แอปได้แล้ว ซึ่งเป็นขั้นตอนสุดท้ายของบทแนะนำนี้ จากนี้ ขั้นตอนถัดไปคือการดูวิธีทำสิ่งเดียวกันนี้ด้วย Cloud Buildpacks ใน Codelab ของโมดูลที่ 5 (ลิงก์ด้านล่าง) หรือดำเนินการย้ายข้อมูล App Engine อื่น

  • ย้ายข้อมูลไปยัง Python 3 หากยังไม่ได้ดำเนินการ แอปตัวอย่างรองรับ 2.x และ 3.x อยู่แล้ว ดังนั้นการเปลี่ยนแปลงจึงมีเพียงผู้ใช้ Docker เท่านั้นที่จะต้องอัปเดต Dockerfile เพื่อใช้รูปภาพ Python 3
  • Module 5: ย้ายข้อมูลไปยัง Cloud Run ด้วย Cloud Buildpacks
    • สร้างคอนเทนเนอร์ของแอปเพื่อเรียกใช้ใน Cloud Run ด้วย Cloud Buildpacks
    • คุณไม่จำเป็นต้องทราบข้อมูลใดๆ เกี่ยวกับ Docker, คอนเทนเนอร์ หรือ Dockerfile
    • คุณต้องย้ายข้อมูลแอปไปยัง Python 3 แล้ว
  • Module 7: คิวงานแบบพุชของ App Engine (ต้องระบุหากคุณใช้คิวงาน [push])
    • เพิ่มtaskqueueงานแบบพุชของ App Engine ไปยังแอปโมดูล 1
    • เตรียมผู้ใช้ให้พร้อมสำหรับการย้ายข้อมูลไปยัง Cloud Tasks ในโมดูลที่ 8
  • โมดูล 3:
    • ปรับปรุงการเข้าถึง Datastore จาก Cloud NDB เป็น Cloud Datastore
    • นี่คือไลบรารีที่ใช้สำหรับแอป Python 3 App Engine และแอปที่ไม่ใช่ App Engine
  • Module 6: ย้ายข้อมูลไปยัง Cloud Firestore
    • ย้ายข้อมูลไปยัง Cloud Firestore เพื่อเข้าถึงฟีเจอร์ของ Firebase
    • แม้ว่า Cloud Firestore จะรองรับ Python 2 แต่ Codelab นี้ใช้ได้ใน Python 3 เท่านั้น

7. แหล่งข้อมูลเพิ่มเติม

ปัญหา/ความคิดเห็นเกี่ยวกับ Codelab โมดูลการย้ายข้อมูล App Engine

หากพบปัญหาเกี่ยวกับ Codelab นี้ โปรดค้นหาปัญหาของคุณก่อนที่จะยื่นเรื่อง ลิงก์สำหรับค้นหาและสร้างปัญหาใหม่

แหล่งข้อมูลเกี่ยวกับการย้ายข้อมูล

คุณดูลิงก์ไปยังโฟลเดอร์ที่เก็บสำหรับโมดูล 2 และ 3 (เริ่มต้น) รวมถึงโมดูล 4 (สิ้นสุด) ได้ในตารางด้านล่าง นอกจากนี้ คุณยังเข้าถึงได้จากที่เก็บสำหรับการย้ายข้อมูล Codelab ของ App Engine ทั้งหมด ซึ่งคุณสามารถโคลนหรือดาวน์โหลดไฟล์ ZIP ได้

Codelab

Python 2

Python 3

Module 2

รหัส

(รหัส)

โมดูล 3

(รหัส)

รหัส

Module 4

รหัส

รหัส

ทรัพยากร App Engine และ Cloud Run

แหล่งข้อมูลเพิ่มเติมเกี่ยวกับการย้ายข้อมูลนี้มีดังนี้