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 อย่างไร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี
- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้และคุณอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์ต้องไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมดและจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (ซึ่งปกติระบุไว้ว่าเป็น
PROJECT_ID
) ดังนั้นหากไม่ชอบ ให้สร้างรหัสแบบสุ่มขึ้นมาอีกรหัสหนึ่ง หรือคุณจะลองใช้รหัสโปรเจ็กต์ของคุณเองแล้วดูว่ารหัสโปรเจ็กต์พร้อมใช้งานหรือไม่ แล้วก็ "แช่แข็ง" หลังจากสร้างโปรเจ็กต์แล้ว - มีค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ให้ทำตาม "การล้าง" ดูได้ที่ตอนท้ายของ Codelab ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
แม้ว่าคุณจะดำเนินการ Google Cloud จากระยะไกลได้จากแล็ปท็อป แต่คุณจะใช้ Google Cloud Shell ซึ่งเป็นสภาพแวดล้อมแบบบรรทัดคำสั่งที่ทำงานในระบบคลาวด์ใน Codelab นี้
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell จาก Cloud Console
หากคุณไม่เคยเริ่มต้นใช้งาน Cloud Shell มาก่อน คุณจะเห็นหน้าจอตรงกลาง (ครึ่งหน้าล่าง) ซึ่งอธิบายว่านี่คืออะไร หากเป็นเช่นนั้น ให้คลิกดำเนินการต่อ (คุณจะไม่เห็นการดำเนินการนี้อีก) หน้าจอแบบครั้งเดียวมีลักษณะดังนี้
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องใน Google Cloud ซึ่งจะช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์หรือ 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
การดำเนินการนี้ควรสร้างโปรเจ็กต์และกู้คืนทรัพยากร 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"
คุณจะเห็นหน้าเว็บ 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 เริ่มต้นในแท็บใหม่
นอกจากนี้คุณยังสามารถดูอิมเมจคอนเทนเนอร์ที่สร้างขึ้นในระบบคลาวด์ได้อีกด้วย ในคอนโซลระบบคลาวด์ ให้ไปที่ Container Registry > รูปภาพ จากนั้นในโฟลเดอร์ appengine คุณจะเห็นรูปภาพสำหรับแอปพลิเคชันของคุณ
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. ยินดีด้วย
ล้าง
ได้เวลาปิดแอปเพื่อประหยัดค่าใช้จ่ายและเป็นพลเมืองระบบคลาวด์ที่ดีโดยรวม
ไปที่ส่วนเวอร์ชันของ App Engine
เลือกเวอร์ชันแล้วหยุด
เมื่อหยุดเวอร์ชันแล้ว ระบบจะลบอินสแตนซ์สำรองและคุณจะเห็นจำนวนอินสแตนซ์ที่จะเลื่อนลงไปที่ 0
หัวข้อที่ครอบคลุม
นั่นไง! คุณได้สร้างแอป ASP.NET Core บรรจุเป็นคอนเทนเนอร์ Docker แล้วทำให้ใช้งานได้ใน Google App Engine แบบยืดหยุ่น
- วิธีทำแพ็กเกจแอป ASP.NET Core ง่ายๆ เป็นคอนเทนเนอร์ Docker
- วิธีทำให้แอป ASP.NET Core ใช้งานได้ใน App Engine
ขั้นตอนถัดไป
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Windows ใน Google Cloud Platform
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ .NET บน Google Cloud Platform
- ดูข้อมูลเพิ่มเติมเกี่ยวกับเซิร์ฟเวอร์ SQL บน Google Cloud Platform
- ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือ Cloud สำหรับ Visual Studio
- ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือระบบคลาวด์สำหรับ PowerShell
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0