1. ภาพรวม
ASP.NET Core เป็นเฟรมเวิร์กโอเพนซอร์สและข้ามแพลตฟอร์มใหม่สำหรับสร้างแอปพลิเคชันที่ทันสมัยซึ่งใช้ระบบคลาวด์และเชื่อมต่ออินเทอร์เน็ตโดยใช้ภาษาโปรแกรม C#
ในแล็บนี้ คุณจะได้ทำให้แอป ASP.NET Core แบบง่ายใช้งานได้กับสภาพแวดล้อมที่ยืดหยุ่นของ App Engine Codelab นี้สร้างขึ้นจาก Codelab สร้างและเปิดใช้แอป ASP.NET Core จาก Google Cloud Shell คุณอาจต้องทำแล็บนั้นก่อนที่จะลองทำแล็บนี้
แอปพลิเคชัน Google App Engine สร้าง ดูแลรักษา และปรับขนาดได้ง่ายเมื่อความต้องการด้านการเข้าชมและพื้นที่เก็บข้อมูลเปลี่ยนแปลงไป App Engine ช่วยให้คุณไม่ต้องจัดการเซิร์ฟเวอร์ เพียงอัปโหลดแอปพลิเคชันของคุณก็พร้อมใช้งาน
แอปพลิเคชัน App Engine จะปรับขนาดโดยอัตโนมัติตามการรับส่งข้อมูลขาเข้า App Engine รองรับการจัดสรรภาระงาน, Microservice, การให้สิทธิ์, ฐานข้อมูล SQL และ NoSQL, Memcache, การแยกการรับส่งข้อมูล, การบันทึก, การค้นหา, การควบคุมเวอร์ชัน, การเปิดตัวและการย้อนกลับ รวมถึงการสแกนความปลอดภัยโดยค่าเริ่มต้น ซึ่งทั้งหมดนี้ปรับแต่งได้สูง
สภาพแวดล้อมของ App Engine ซึ่งได้แก่ สภาพแวดล้อมมาตรฐานและสภาพแวดล้อมที่ยืดหยุ่น รองรับภาษาโปรแกรมมากมาย เช่น C#, Java, Python, PHP, Node.js, Go และอื่นๆ สภาพแวดล้อมทั้ง 2 แบบช่วยให้ผู้ใช้มีความยืดหยุ่นสูงสุดในการกำหนดลักษณะการทำงานของแอปพลิเคชัน เนื่องจากแต่ละสภาพแวดล้อมมีข้อดีบางอย่าง ดูข้อมูลเพิ่มเติมได้ที่การเลือกสภาพแวดล้อม App Engine
สิ่งที่คุณจะได้เรียนรู้
- วิธีแพ็กเกจแอป ASP.NET Core แบบง่ายเป็นคอนเทนเนอร์ Docker
- วิธีทําให้แอป ASP.NET Core แบบง่ายใช้งานได้กับ App Engine
สิ่งที่คุณต้องมี
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Google Cloud Platform เท่าไร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Google Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโปรเจ็กต์คือชื่อที่แสดงสำหรับผู้เข้าร่วมโปรเจ็กต์นี้ โดยเป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ และคุณสามารถอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและเปลี่ยนแปลงไม่ได้ (เปลี่ยนไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ซึ่งโดยปกติแล้วคุณไม่จำเป็นต้องสนใจว่าสตริงนั้นคืออะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (และโดยทั่วไปจะระบุเป็น
PROJECT_ID) ดังนั้นหากไม่ชอบรหัสที่สร้างขึ้น ให้สร้างรหัสแบบสุ่มอีกรหัส หรือจะลองใช้รหัสของคุณเองและดูว่ามีรหัสนั้นหรือไม่ก็ได้ จากนั้นจะ "หยุด" หลังจากสร้างโปรเจ็กต์แล้ว - นอกจากนี้ยังมีค่าที่ 3 คือหมายเลขโปรเจ็กต์ ซึ่ง API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 นี้ได้ในเอกสารประกอบ
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของ Cloud การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย หากต้องการปิดแหล่งข้อมูลเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตามวิธีการ "ล้างข้อมูล" ที่ตอนท้ายของ Codelab ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะใช้งาน Google Cloud จากระยะไกลจากแล็ปท็อปได้ แต่ใน Codelab นี้คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมบรรทัดคำสั่งที่ทำงานในระบบคลาวด์
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell


หากไม่เคยเริ่มใช้ Cloud Shell มาก่อน คุณจะเห็นหน้าจอระดับกลาง (ด้านล่าง) ที่อธิบายว่า Cloud Shell คืออะไร ในกรณีนี้ ให้คลิกต่อไป (และคุณจะไม่เห็นหน้าจอนี้อีก) หน้าจอแบบครั้งเดียวจะมีลักษณะดังนี้

การจัดสรรและเชื่อมต่อกับ Cloud Shell จะใช้เวลาไม่นาน

เครื่องเสมือนนี้มีเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก คุณสามารถทำงานในโค้ดแล็บนี้ได้โดยใช้เพียงเบราว์เซอร์หรือ Chromebook
เมื่อเชื่อมต่อกับ 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. สร้างแอป ASP.NET Core ใน Cloud Shell
ในพรอมต์ของ Cloud Shell คุณสามารถยืนยันว่าได้ติดตั้งdotnetเครื่องมือบรรทัดคำสั่งแล้วโดยแสดงรายการ .NET SDK ที่ติดตั้งไว้ ดังนี้
dotnet --list-sdks
จากนั้นสร้างเว็บแอป ASP.NET Core โครงร่างใหม่ที่มีเฟรมเวิร์กเป้าหมายเป็น netcoreapp3.1
dotnet new mvc -o HelloWorldAspNetCore -f netcoreapp3.1
ซึ่งควรสร้างโปรเจ็กต์และกู้คืนการอ้างอิงของโปรเจ็กต์ คุณควรเห็นข้อความที่คล้ายกับข้อความด้านล่าง
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
4. เรียกใช้แอป ASP.NET Core
เราพร้อมที่จะเรียกใช้แอปแล้ว ไปที่โฟลเดอร์แอป
cd HelloWorldAspNetCore
สุดท้าย ให้เรียกใช้แอป
dotnet run --urls=http://localhost:8080
แอปพลิเคชันเริ่มฟังบนพอร์ต 8080
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
หากต้องการยืนยันว่าแอปทำงานอยู่ ให้คลิกปุ่มแสดงตัวอย่างเว็บที่ด้านขวาบน แล้วเลือก "แสดงตัวอย่างบนพอร์ต 8080"

คุณจะเห็นหน้าเว็บ ASP.NET Core เริ่มต้น

เมื่อยืนยันว่าแอปทำงานอยู่แล้ว ให้กด Ctrl+C เพื่อปิดแอป
5. เผยแพร่แอป ASP.NET Core
ตอนนี้ให้เผยแพร่แอปเพื่อรับ DLL แบบสแตนด์อโลนโดยใช้คำสั่ง dotnet publish
dotnet publish -c Release
การเรียกใช้ publish จะแสดงข้อความบางอย่างพร้อม DLL ที่เผยแพร่เรียบร้อยแล้วเมื่อสิ้นสุดกระบวนการ
...
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.dll
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/HelloWorldAspNetCore.Views.dll
HelloWorldAspNetCore -> /home/atameldev/HelloWorldAspNetCore/bin/Release/netcoreapp3.1/publish/
6. สร้าง app.yaml สำหรับ App Engine แบบยืดหยุ่น
ไฟล์ app.yaml จะอธิบายวิธีทำให้แอปใช้งานได้กับ App Engine ซึ่งในกรณีนี้คือสภาพแวดล้อมที่ยืดหยุ่นของ App Engine
ก่อนอื่น ให้ไปที่โฟลเดอร์ publish ซึ่งควรอยู่ในโฟลเดอร์ bin/Release แต่เส้นทางที่แน่นอนจะขึ้นอยู่กับเวอร์ชันของ .NET
cd bin/Release/netcoreapp3.1/publish/
สร้างไฟล์ app.yaml ในโฟลเดอร์ publish โดยทำดังนี้
cat <<EOT >> app.yaml
env: flex
runtime: aspnetcore
EOT
โปรดสังเกตว่าไฟล์ app.yaml ระบุสภาพแวดล้อมเป็น flex และรันไทม์เป็น aspnetcore
7. ทำให้ใช้งานได้กับ App Engine แบบยืดหยุ่น
คุณพร้อมที่จะทำให้แอปใช้งานได้ใน App Engine แบบยืดหยุ่นโดยใช้ gcloud แล้ว เรียกใช้คำสั่งต่อไปนี้ในไดเรกทอรี publish
gcloud app deploy --version v0
ในระหว่างการติดตั้งใช้งาน ระบบอาจขอให้คุณเลือกภูมิภาคสำหรับแอปพลิเคชัน เลือกภูมิภาคที่คุณต้องการให้แอปทำงาน
Please choose a region for your application. After choosing a region,
you cannot change it. Which region would you like to choose?
[1] europe-west (supports standard and flexible)
[2] us-central (supports standard and flexible)
[3] us-east1 (supports standard and flexible)
[4] asia-northeast1 (supports standard and flexible)
[5] cancel
ซึ่งจะสร้างอิมเมจสำหรับแอปพลิเคชันของคุณในระบบคลาวด์ บันทึกอิมเมจนั้นไปยัง Google Container Registry และทำให้ใช้งานได้ใน App Engine ในระหว่างการติดตั้งใช้งาน คุณจะเห็นการสร้างอิมเมจคอนเทนเนอร์ได้จริง
Operation completed over 1 objects/571.8 KiB.
BUILD
Step #0: Pulling image: gcr.io/gcp-runtimes/aspnetcorebuild@sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb
Step #0: sha256:d7b7975acb374fc3a9655a4e529993e6270cfa78023885684626528bc379f8eb: Pulling from gcp-runtimes/aspnetcorebuild
ในท้ายที่สุด คุณควรเห็นว่าแอปได้รับการติดตั้งใช้งานแล้ว
...
Deployed service [default] to [https://<project-id>.appspot.com]
หลังจากติดตั้งใช้งานแอปพลิเคชันแล้ว ให้ไปที่แอปพลิเคชันโดยเปิด URL http://<project-id>.appspot.com ในเว็บเบราว์เซอร์
คุณจะเห็นหน้าเว็บ ASP.NET Core เริ่มต้นในแท็บใหม่

นอกจากนี้ คุณยังดูอิมเมจคอนเทนเนอร์ที่สร้างไว้ให้คุณในระบบคลาวด์ได้ด้วย ใน Cloud Console ให้ไปที่ Container Registry > Images แล้วในโฟลเดอร์ App Engine คุณควรเห็นอิมเมจสำหรับแอปพลิเคชัน

8. ทำให้บริการเวอร์ชันใหม่ใช้งานได้
ในบางครั้ง แอปพลิเคชันที่คุณติดตั้งใช้งานในเวอร์ชันที่ใช้งานจริงจะต้องมีการแก้ไขข้อบกพร่องหรือเพิ่มฟีเจอร์ App Engine พร้อมช่วยคุณในการติดตั้งใช้งานเวอร์ชันใหม่ในสภาพแวดล้อมที่ใช้งานจริงโดยไม่ส่งผลกระทบต่อผู้ใช้
ก่อนอื่น มาแก้ไขแอปพลิเคชันกัน เปิดตัวแก้ไขโค้ดจาก Cloud Shell

ไปที่ Index.cshtml ในโฟลเดอร์ Views/Home ของ HelloWorldAspNetCore แล้วอัปเดตข้อความเริ่มต้นเป็นข้อความต่อไปนี้
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud Platform!
บันทึกการเปลี่ยนแปลง แล้วกลับไปที่ Cloud Shell ภายใน HelloWorldAspNetCore, ให้เผยแพร่แอปเพื่อรับ DLL แบบสแตนด์อโลน
dotnet publish -c Release
ไปที่ไดเรกทอรีเผยแพร่
cd bin/Release/netcoreapp3.1/publish/
ตอนนี้คุณทำให้แอปเวอร์ชันใหม่ใช้งานได้แล้ว (ในกรณีนี้คือ v1)
gcloud app deploy --version v1
เมื่อติดตั้งใช้งานแล้ว คุณจะไปที่ส่วนเวอร์ชัน App Engine ของ Google Cloud Console เพื่อดูแอปเวอร์ชันใหม่ที่แสดงการเข้าชมทั้งหมดพร้อมข้อความใหม่ได้

9. แดชบอร์ดและการแยกการรับส่งข้อมูล
ใน App Engine คุณจะเห็นแดชบอร์ดจำนวนมากสำหรับแอปพลิเคชันของคุณในส่วนแดชบอร์ด เช่น แดชบอร์ดสำหรับเวลาในการตอบสนอง, CPU เป็นต้น ลองสำรวจแดชบอร์ดเหล่านี้ด้วยตัวคุณเอง

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

10. ยินดีด้วย
Cleanup
ถึงเวลาปิดแอปเพื่อประหยัดค่าใช้จ่ายและเป็นพลเมืองที่ดีของระบบคลาวด์โดยรวม
ไปที่ส่วนเวอร์ชันของ App Engine

เลือกเวอร์ชันและหยุด

เมื่อหยุดเวอร์ชันแล้ว ระบบจะลบอินสแตนซ์สำรอง และคุณจะเห็นจำนวนอินสแตนซ์ลดลงเหลือ 0

สิ่งที่เราได้พูดถึง
เรียบร้อย คุณได้สร้างแอป ASP.NET Core, จัดแพ็กเกจเป็นคอนเทนเนอร์ Docker และทำให้ใช้งานได้ใน Google App Engine Flexible
- วิธีแพ็กเกจแอป ASP.NET Core แบบง่ายเป็นคอนเทนเนอร์ Docker
- วิธีทําให้แอป ASP.NET Core แบบง่ายใช้งานได้กับ App Engine
ขั้นตอนถัดไป
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Windows ใน Google Cloud Platform
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ .NET ใน Google Cloud Platform
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ SQL Server ใน Google Cloud Platform
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Tools for Visual Studio
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Tools for PowerShell
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป