ทำให้แอป ASP.NET Core ใช้งานได้ใน App Engine

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 และอื่นๆ สภาพแวดล้อมทั้งสองนี้จะช่วยให้ผู้ใช้มีความยืดหยุ่นสูงสุดในการทำงานของแอปพลิเคชัน เนื่องจากแต่ละสภาพแวดล้อมมีจุดแข็งเฉพาะ อ่านข้อมูลเพิ่มเติมได้ที่หัวข้อการเลือกสภาพแวดล้อม App Engine

สิ่งที่คุณจะได้เรียนรู้

  • วิธีทำแพ็กเกจแอป ASP.NET Core ง่ายๆ เป็นคอนเทนเนอร์ Docker
  • วิธีทำให้แอป ASP.NET Core ใช้งานได้ใน App Engine

สิ่งที่ต้องมี

  • โปรเจ็กต์ Google Cloud Platform
  • เบราว์เซอร์ เช่น Chrome หรือ Firefox

คุณจะใช้บทแนะนำนี้อย่างไร

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

คุณจะให้คะแนนประสบการณ์การใช้งาน Google Cloud Platform อย่างไร

มือใหม่ ระดับกลาง ผู้ชำนาญ

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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

เริ่มต้น Cloud Shell

แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้

เปิดใช้งาน Cloud Shell

  1. คลิกเปิดใช้งาน Cloud Shell 4292cbf4971c9786.png จาก Cloud Console

bce75f34b2c53987.png

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

70f315d7b402b476.png

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

fbe3a0674c982259.png

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์หรือ Chromebook เท่านั้น

เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าได้รับการตรวจสอบสิทธิ์แล้ว และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว

  1. เรียกใช้คำสั่งต่อไปนี้ใน 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`
  1. เรียกใช้คำสั่งต่อไปนี้ใน 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

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

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"

Capture.PNG

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

f579a9baedc108a9.png

เมื่อคุณยืนยันว่าแอปพลิเคชันทำงานอยู่ ให้กด 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 เริ่มต้นในแท็บใหม่

f579a9baedc108a9.png

นอกจากนี้คุณยังสามารถดูอิมเมจคอนเทนเนอร์ที่สร้างขึ้นในระบบคลาวด์ได้อีกด้วย ในคอนโซลระบบคลาวด์ ให้ไปที่ Container Registry > รูปภาพ จากนั้นในโฟลเดอร์ appengine คุณจะเห็นรูปภาพสำหรับแอปพลิเคชันของคุณ

de788f4949d0c5a.png

8. ทำให้บริการเวอร์ชันใหม่ของคุณใช้งานได้

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

ก่อนอื่น มาแก้ไขแอปพลิเคชันกัน เปิดตัวแก้ไขโค้ดจาก Cloud Shell

868c4f615e2331fe.png

ไปที่ 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 เพื่อดูแอปเวอร์ชันใหม่ที่แสดงการรับส่งข้อมูลทั้งหมดพร้อมข้อความใหม่

8cc0cc992b4e07ed.png

9. แดชบอร์ดและการแยกการเข้าชม

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

5c879431935b080d.png

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

176a2e22e755b6d3.png

10. ยินดีด้วย

ล้าง

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

ไปที่ส่วนเวอร์ชันของ App Engine

7e9b3b4406e785b9.png

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

7f80d9ff2c959e0.png

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

29f3cb5c71225b2d.png

หัวข้อที่ครอบคลุม

นั่นไง! คุณได้สร้างแอป ASP.NET Core บรรจุเป็นคอนเทนเนอร์ Docker แล้วทำให้ใช้งานได้ใน Google App Engine แบบยืดหยุ่น

  • วิธีทำแพ็กเกจแอป ASP.NET Core ง่ายๆ เป็นคอนเทนเนอร์ Docker
  • วิธีทำให้แอป ASP.NET Core ใช้งานได้ใน App Engine

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0