ตำแหน่งของ Cloud Functions

Cloud Functions เป็นแบบระดับภูมิภาค ซึ่งหมายความว่าโครงสร้างพื้นฐานที่เรียกใช้ฟังก์ชันของคุณจะอยู่ในภูมิภาคเฉพาะและ Google เป็นผู้จัดการเพื่อให้พร้อมใช้งานแบบทำซ้ำในโซนทั้งหมดภายในภูมิภาคเหล่านั้น

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

ฟังก์ชันจะทำงานในภูมิภาค us-central1 โดยค่าเริ่มต้น โปรดทราบว่าขั้นตอนนี้อาจแตกต่างจากภูมิภาคของแหล่งที่มาของเหตุการณ์ เช่น ที่เก็บข้อมูล Cloud Storage ดูวิธีระบุภูมิภาคที่ฟังก์ชันทำงานภายหลังในหน้านี้

ภูมิภาคที่รองรับ

ในรายการในส่วนนี้ ไอคอน energy_savings_leaf บ่งชี้ว่าไฟฟ้าสำหรับภูมิภาคนี้ผลิตออกมาโดยมีการปล่อยก๊าซคาร์บอนต่ำ ดูข้อมูลเพิ่มเติมได้ที่พลังงานแบบปลอดคาร์บอนสำหรับภูมิภาคของ Google Cloud

Cloud Functions พร้อมใช้งานในภูมิภาคต่อไปนี้ที่มีการกำหนดราคาระดับ 1

  • asia-east1 (ไต้หวัน)
  • asia-east2 (ฮ่องกง) รุ่นที่ 1 เท่านั้น
  • asia-northeast1 (โตเกียว)
  • asia-northeast2 (โอซะกะ)
  • europe-north1 (ฟินแลนด์) energy_savings_leaf รุ่นที่ 2 เท่านั้น
  • europe-west1 (เบลเยียม) energy_savings_leaf
  • europe-west2 (ลอนดอน) รุ่นที่ 1 เท่านั้น
  • us-central1 (ไอโอวา) energy_savings_leaf
  • us-east1 (เซาท์แคโรไลนา)
  • us-east4 (เวอร์จิเนียตอนเหนือ)
  • us-west1 (ออริกอน) energy_savings_leaf

Cloud Functions พร้อมใช้งานในภูมิภาคต่อไปนี้ที่มีการกำหนดราคาระดับ 2

  • asia-east2 (ฮ่องกง) รุ่นที่ 2 เท่านั้น
  • asia-northeast3 (โซล)
  • asia-southeast1 (สิงคโปร์)
  • asia-southeast2 (จาการ์ตา)
  • asia-south1 (มุมไบ) รุ่นที่ 2 เท่านั้น
  • australia-southeast1 (ซิดนีย์)
  • australia-southeast2 (เมลเบิร์น) รุ่นที่ 2 เท่านั้น
  • europe-central2 (วอร์ซอ)
  • europe-west2 (ลอนดอน) รุ่นที่ 2 เท่านั้น
  • europe-west3 (แฟรงก์เฟิร์ต)
  • europe-west6 (ซูริค) energy_savings_leaf
  • northamerica-northeast1 (มอนทรีออล) energy_savings_leaf
  • northamerica-northeast2 (โตรอนโต) energy_savings_leaf รุ่นที่ 2 เท่านั้น
  • southamerica-east1 (เซาเปาโล) energy_savings_leaf
  • southamerica-west1 (ซันติอาโก ชิลี) รุ่นที่ 2 เท่านั้น
  • us-west2 (ลอสแอนเจลิส)
  • us-west3 (ซอลต์เลกซิตี)
  • us-west4 (ลาสเวกัส)

ฟังก์ชันในภูมิภาคหนึ่งๆ ของโปรเจ็กต์ที่กำหนดต้องมีชื่อที่ไม่ซ้ำกัน (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) แต่ฟังก์ชันข้ามภูมิภาคหรือข้ามโปรเจ็กต์อาจใช้ชื่อเดียวกัน

แนวทางปฏิบัติที่ดีที่สุดในการระบุภูมิภาค

ฟังก์ชันจะทำงานในภูมิภาค us-central1 โดยค่าเริ่มต้น โปรดทราบว่าขั้นตอนนี้อาจแตกต่างจากภูมิภาคของแหล่งที่มาของเหตุการณ์ เช่น ที่เก็บข้อมูล Cloud Storage หากต้องการระบุภูมิภาคที่ฟังก์ชันทำงาน ให้ทําตามคำแนะนำในส่วนนี้สำหรับทริกเกอร์ฟังก์ชันแต่ละประเภท

หากต้องการกำหนดภูมิภาคที่ฟังก์ชันทำงาน ให้ตั้งค่าพารามิเตอร์ region ในคำจำกัดความของฟังก์ชันดังที่แสดงไว้

Node.js

exports.firestoreAsia = onDocumentCreated(
  {
    document: "my-collection/{docId}",
    region: "asia-northeast1",
  },
  (event) => {},
);

Python

# Before
@firestore_fn.on_document_created("my-collection/{docId}")
def firestore_trigger(event):
    pass

# After
@firestore_fn.on_document_created("my-collection/{docId}",
                                  region="asia-northeast1")
def firestore_trigger_asia(event):
    pass

คุณจะระบุหลายภูมิภาคได้โดยส่งสตริงภูมิภาคที่คั่นด้วยคอมมาหลายรายการใน region โปรดทราบด้วยว่า เมื่อระบุภูมิภาคสำหรับประเภททริกเกอร์พื้นหลังหลายประเภท คุณจะต้องระบุตัวกรองเหตุการณ์ที่ถูกต้องพร้อมกับภูมิภาคด้วย ในตัวอย่างด้านบน นี่คือ Cloud Firestore document ที่ปล่อยเหตุการณ์ สำหรับทริกเกอร์ Cloud Storage ตัวกรองเหตุการณ์อาจเป็น bucket สำหรับทริกเกอร์ Pub/Sub จะเป็น topic เป็นต้น

โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนภูมิภาคของฟังก์ชันที่จัดการกับการรับส่งข้อมูลที่ใช้งานจริง โปรดดูเปลี่ยนภูมิภาคของฟังก์ชัน

HTTP และฟังก์ชันที่เรียกใช้ได้โดยไคลเอ็นต์

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

การเลือกตำแหน่งฝั่งไคลเอ็นต์สำหรับฟังก์ชันแบบเรียกใช้ได้

เกี่ยวกับฟังก์ชันที่เรียกใช้ได้ การตั้งค่าที่เรียกใช้ได้ของไคลเอ็นต์ควรเป็นไปตามหลักเกณฑ์เดียวกันกับฟังก์ชัน HTTP นอกจากนี้ไคลเอ็นต์จะระบุภูมิภาคได้ด้วย และต้องดำเนินการดังกล่าวหากฟังก์ชันทำงานในภูมิภาคอื่นนอกเหนือจาก us-central1

หากต้องการตั้งค่าภูมิภาคในไคลเอ็นต์ ให้ระบุภูมิภาคที่ต้องการเมื่อเริ่มต้น ดังนี้

Swift

lazy var functions = Functions.functions(region:"europe-west1")

Objective-C

@property(strong, nonatomic) FIRFunctions *functions;
// ...
self.functions = [FIRFunctions functionsWithRegion:@"europe-west1"];

เว็บ


var functions = firebase.app().functions('europe-west1');

Android

private FirebaseFunctions mFunctions;
// ...
mFunctions = FirebaseFunctions.getInstance("europe-west1");

C++

firebase::functions::Functions* functions;
// ...
functions = firebase::functions::Functions::GetInstance("europe-west1");

Unity

firebase.Functions.FirebaseFunctions functions;

functions = Firebase.Functions.FirebaseFunctions.GetInstance("europe-west1");

ฟังก์ชันพื้นหลัง

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

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

คำแนะนำภูมิภาคที่ดีที่สุดจะแตกต่างกันไปตามประเภททริกเกอร์เหตุการณ์ ดังนี้

ประเภททริกเกอร์ ภูมิภาคที่แนะนำ
Cloud Firestore ภูมิภาคที่ใกล้กับตำแหน่งอินสแตนซ์ Cloud Firestore มากที่สุด (ดูส่วนถัดไป)
Realtime Database us-central1 เสมอ
Cloud Storage ภูมิภาคที่ใกล้กับตำแหน่งที่เก็บข้อมูล Cloud Storage มากที่สุด (ดูส่วนถัดไป)
อื่นๆ หากคุณกำลังโต้ตอบกับอินสแตนซ์ Realtime Database, อินสแตนซ์ Cloud Firestore หรือที่เก็บข้อมูล Cloud Storage ภายในฟังก์ชัน ภูมิภาคที่แนะนำจะเหมือนกับหากคุณมีฟังก์ชันที่ทริกเกอร์โดยทรัพยากรเหล่านั้น หรือใช้ภูมิภาคเริ่มต้นของ us-central1 ฟังก์ชันที่เชื่อมต่อกับโฮสติ้งของ Firebase จะอยู่ในภูมิภาคใดก็ได้ แต่ดูคำแนะนำในภาพรวมโฮสติ้งแบบ Serverless

การเลือกภูมิภาคตามตำแหน่ง Cloud Firestore และ Cloud Storage

ภูมิภาคที่พร้อมใช้งานสำหรับฟังก์ชันอาจไม่ตรงกันทั้งหมดกับภูมิภาคที่พร้อมใช้งานสำหรับฐานข้อมูล Cloud Firestore และที่เก็บข้อมูล Cloud Storage

โปรดทราบว่าหากฟังก์ชันและทรัพยากร (อินสแตนซ์ฐานข้อมูลหรือที่เก็บข้อมูล Cloud Storage) อยู่คนละตำแหน่ง คุณอาจพบว่าเวลาในการตอบสนองและค่าใช้จ่ายในการเรียกเก็บเงินเพิ่มขึ้น

ต่อไปนี้คือการแมปภูมิภาคที่รองรับฟังก์ชันซึ่งใกล้เคียงที่สุดสำหรับ Cloud Firestore และ Cloud Storage ในกรณีที่ไม่รองรับภูมิภาคเดียวกัน

ภูมิภาค/หลายภูมิภาคสำหรับ Cloud Firestore และ Cloud Storage ภูมิภาคที่ใกล้ที่สุดที่มีฟังก์ชัน
nam5 หรือ us-central (หลายภูมิภาค) us-central1
eur3 หรือ europe-west (หลายภูมิภาค) europe-west1
europe-west4 (เนเธอร์แลนด์) europe-west1
asia-south1 (มุมไบ) asia-east2
asia-south2 (เดลี) asia-east2
australia-southeast2 (เมลเบิร์น) australia-southeast1