ตำแหน่งของ 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