โมดูล 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 บทแนะนำนี้จะเริ่มต้นด้วยแอปตัวอย่างของโมดูล 2 Cloud NDB App Engine ขณะที่นักพัฒนาซอฟต์แวร์ Python 3 จะเริ่มต้นด้วยตัวอย่าง Cloud Datastore ของโมดูล 3

คุณจะได้เรียนรู้วิธีการ

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

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

แบบสำรวจ

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

โปรดอ่านเท่านั้น อ่านและทำแบบฝึกหัด

2. ข้อมูลเบื้องต้น

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

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

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

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

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

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

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

3. การตั้งค่า/งานล่วงหน้า

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

1. สร้างโปรเจ็กต์

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

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

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

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

ไดเรกทอรีของไฟล์เริ่มต้น Python 2 โมดูล 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. แอปพลิเคชัน Containerize

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

คุณมาถูกที่แล้วถ้าคุณรู้จักคอนเทนเนอร์, Docker และต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคอนเทนเนอร์แอป App Engine สำหรับ Cloud Run นอกจากนี้ คุณยังสามารถใช้ Codelab โมดูล 5 (เช่นเดียวกับโมดูลนี้ แต่ใช้ Cloud Buildpacks) ในภายหลัง แอปตัวอย่าง Barebones ของเรามีน้ำหนักเบาพอที่จะหลีกเลี่ยงปัญหา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-เท่านั้น])

(ไม่มี)

(ไม่มี)

เริ่มต้นทำงาน

(n/a) หรือ 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

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

นักพัฒนาซอฟต์แวร์ของ Python 2 App Engine ทราบว่าระบบจะคัดลอกไลบรารีของบุคคลที่สามลงในโฟลเดอร์ 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 ใน Python 3 app.yaml ไฟล์จะมีลักษณะดังนี้

runtime: python38
entrypoint: python main.py

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

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

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

ละเว้นไฟล์

เราขอแนะนำให้สร้างไฟล์ .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 จะสร้างขึ้นเพื่อโฮสต์แอปพลิเคชันเป็นหลัก แต่ก็เป็นแพลตฟอร์มสำหรับการโฮสต์บริการบนเว็บหรือแอปพลิเคชันด้วยชุด Microservice ใน 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 ถัดไปแล้ว คุณก็เปิดใช้อีกครั้งได้ ระหว่างที่แอปปิดใช้อยู่ แอปจะไม่ทำให้เกิดการเรียกเก็บเงินใดๆ แต่อาจมีการเรียกเก็บเงินอีกอย่างหนึ่งคือการใช้พื้นที่เก็บข้อมูล หากแอปเกินโควต้าฟรี ให้ลบให้ไม่เกินจำนวนที่จำกัดไว้

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

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

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

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

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

ปัญหา/ข้อเสนอแนะเกี่ยวกับ Codelab ของโมดูลการย้ายข้อมูล App Engine

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

ทรัพยากรการย้ายข้อมูล

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

Codelab

Python 2

Python 3

โมดูล 2

รหัส

(รหัส)

โมดูล 3

(รหัส)

รหัส

โมดูล 4

รหัส

รหัส

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

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