สวัสดี Cloud Run กับ C#

1. บทนำ

89eb4723767d4525.png

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

โดยสร้างขึ้นจาก Knative ซึ่งให้คุณเลือกที่จะเรียกใช้คอนเทนเนอร์ที่มีการจัดการครบวงจรด้วย Cloud Run หรือในคลัสเตอร์ Google Kubernetes Engine ด้วย Cloud Run บน GKE ได้

เป้าหมายของ Codelab นี้คือการสร้างอิมเมจคอนเทนเนอร์และทำให้ใช้งานได้กับ Cloud Run

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

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

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

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

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

Google Cloud Shell

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

Cloud Shell คือสภาพแวดล้อมในการพัฒนาซอฟต์แวร์และการดำเนินการออนไลน์ที่เข้าถึงได้ทุกที่ด้วยเบราว์เซอร์ของคุณ คุณจัดการทรัพยากรได้ด้วยเทอร์มินัลออนไลน์ที่โหลดไว้ล่วงหน้าพร้อมกับยูทิลิตี เช่น เครื่องมือบรรทัดคำสั่ง gcloud, kubectl และอื่นๆ นอกจากนี้ คุณยังพัฒนา สร้าง แก้ไขข้อบกพร่อง และทำให้แอปในระบบคลาวด์ใช้งานได้โดยใช้ Cloud Shell Editor ออนไลน์

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

  • หากต้องการเปิดใช้งาน Cloud Shell จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell ดังนี้

cb81e7c8e34bc8d.png

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

bfde7b083abc9544.png

การจัดสรรสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่วินาที :

cbb597d2be277a14.png

เมื่อเชื่อมต่อกับ Cloud Shell คุณควรเห็นว่าคุณผ่านการตรวจสอบสิทธิ์แล้ว :

gcloud auth list

เอาต์พุตจากคำสั่ง

Credentialed Accounts

ACTIVE: *
ACCOUNT: <my-account>@<mydomain>

ควรตั้งค่าโปรเจ็กต์เป็น PROJECT_ID อยู่แล้ว (สมมติว่าคุณได้เลือกโปรเจ็กต์ในเว็บคอนโซล) :

gcloud config list project

เอาต์พุตจากคำสั่ง

[core]
project = <PROJECT_ID>

หากโปรเจ็กต์ไม่ได้ตั้งค่าไว้ด้วยเหตุผลบางประการ ให้ใช้คำสั่งต่อไปนี้

gcloud config set project <PROJECT_ID>

กำลังมองหา PROJECT_ID ของคุณอยู่ใช่ไหม ดูเมนูแบบเลื่อนลงที่ด้านบนของ Cloud Console

2c7a57249d954735.png

นอกจากนี้ คุณยังตรวจสอบรายละเอียดโปรเจ็กต์ได้โดยใช้ "การตั้งค่าและยูทิลิตี" ส่วน:

791f101797cfef39.png

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

echo $GOOGLE_CLOUD_PROJECT

เอาต์พุตจากคำสั่ง

<PROJECT_ID>
  • สุดท้าย คุณสามารถตั้งค่าโซนเริ่มต้นได้โดยทำดังนี้
gcloud config set compute/zone us-central1-f

คุณเลือกโซนต่างๆ ได้ ดูข้อมูลเพิ่มเติมได้ที่ภูมิภาคและ โซน

เปิดใช้ Cloud Run API

จาก Cloud Shell ให้เปิดใช้ Cloud Run API ดังนี้

gcloud services enable run.googleapis.com

ซึ่งจะให้ผลลัพธ์ข้อความที่ดีคล้ายกับข้อความต่อไปนี้ :

Operation "operations/acf.cc11852d-40af-47ad-9d59-477a12847c9e" finished successfully.

3. เขียนแอปพลิเคชันตัวอย่าง

เราจะสร้างแอปพลิเคชัน ASP.NET C# แบบง่ายที่ตอบสนองต่อคำขอ HTTP

หากต้องการสร้างแอปพลิเคชัน ให้ใช้เครื่องมือบรรทัดคำสั่ง dotnet ใน Cloud Shell:

dotnet new web -o helloworld-csharp

เปลี่ยนเป็นไดเรกทอรี helloworld-csharp:

cd helloworld-csharp

จากนั้นอัปเดต Program.cs ให้ตรงกับรายการต่อไปนี้

var builder = WebApplication.CreateBuilder(args);

var port = Environment.GetEnvironmentVariable("PORT") ?? "8080";
var url = $"http://0.0.0.0:{port}";
builder.WebHost.UseUrls(url);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

โค้ดนี้จะสร้างเว็บเซิร์ฟเวอร์พื้นฐานที่รอฟังพอร์ตซึ่งกำหนดโดยตัวแปรสภาพแวดล้อม PORT และตอบกลับด้วย Hello World

คุณทดสอบแอปได้โดยเรียกใช้ภายในเครื่องใน Cloud Shell คุณควรเห็นมันฟังอยู่บนพอร์ต 8080:

$ dotnet run
Using launch settings from /home/atameldev/helloworld-csharp/Properties/launchSettings.json...
Hosting environment: Development
Content root path: /home/atameldev/helloworld-csharp
Now listening on: http://0.0.0.0:8080
Application started. Press Ctrl+C to shut down.

4. ทำให้ใช้งานได้กับ Cloud Run

ทำให้แอปพลิเคชันของคุณใช้งานได้ใน Cloud Run ด้วยคำสั่งต่อไปนี้

gcloud run deploy hello-world \
    --allow-unauthenticated \
    --region us-central1 \
    --source .
  • hello-world คือชื่อบริการ
  • แฟล็ก allow-unauthenticated จะทำให้บริการดังกล่าวใช้งานได้แบบสาธารณะโดยไม่มีข้อกำหนดการตรวจสอบสิทธิ์
  • us-central1 คือภูมิภาคที่จะติดตั้งใช้งานแอป
  • แฟล็ก source ระบุตำแหน่งของแหล่งที่มาที่จะสร้าง Cloud Run ใช้ชุดบิลด์เพื่อสร้างคอนเทนเนอร์จากซอร์สโค้ดโดยอัตโนมัติ

รอสักครู่จนกว่าการทำให้ใช้งานได้จะเสร็จสมบูรณ์ เมื่อทำสำเร็จ บรรทัดคำสั่งจะแสดง URL ของบริการดังนี้

Service [hello-world] revision [hello-world-00001-yos] has been deployed and is serving 100 percent of traffic.
Service URL: https://helloworld-wdl7fdwaaa-uc.a.run.app

ตอนนี้คุณสามารถไปที่คอนเทนเนอร์ที่ทำให้ใช้งานได้แล้วโดยเปิด URL บริการในเว็บเบราว์เซอร์ ดังนี้

85e7fbbd264444c9.png

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

5. ได้เวลาล้างข้อมูลแล้ว

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

gcloud run services delete helloworld

6. ขั้นตอนถัดไปคือ

ขั้นตอนต่อไปที่ดีคือทำให้ใช้งานได้กับ Cloud Run บน GKE

ดูข้อมูลเพิ่มเติมเกี่ยวกับการสร้างคอนเทนเนอร์ HTTP แบบไม่เก็บสถานะที่เหมาะสำหรับ Cloud Run จากแหล่งที่มาของโค้ดและการพุชไปยัง Container Registry ได้ที่