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

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

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

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

หลังจากติดตั้งใช้งานแล้ว คุณสามารถยืนยันภูมิภาคในคอนโซล Firebase หรือโดยการเรียกใช้ firebase functions:list หากต้องการให้ฟังก์ชันทำงานในภูมิภาคอื่น คุณสามารถเปลี่ยนภูมิภาคได้

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

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

ราคาสำหรับระดับ 1

Cloud Functions พร้อมให้บริการในภูมิภาคต่อไปนี้ด้วยราคาเทียร์ 1

ภูมิภาค ตำแหน่ง เวอร์ชันผลิตภัณฑ์ที่รองรับ การปล่อยก๊าซ CO2
africa-south1 โจฮันเนสเบิร์ก รุ่นที่ 2 เท่านั้น
asia-east1 ไต้หวัน รุ่นที่ 1, รุ่นที่ 2
asia-east2 ฮ่องกง รุ่นที่ 1 เท่านั้น
asia-northeast1 โตเกียว รุ่นที่ 1, รุ่นที่ 2
asia-northeast2 โอซาก้า รุ่นที่ 1, รุ่นที่ 2
europe-north1 ฟินแลนด์ รุ่นที่ 2 เท่านั้น energy_savings_leaf
europe-southwest1 มาดริด รุ่นที่ 2 เท่านั้น
europe-west1 เบลเยียม รุ่นที่ 1, รุ่นที่ 2 energy_savings_leaf
europe-west4 เนเธอร์แลนด์ รุ่นที่ 2 เท่านั้น
europe-west8 มิลาน รุ่นที่ 2 เท่านั้น
europe-west9 ปารีส รุ่นที่ 2 เท่านั้น energy_savings_leaf
me-west1 เทลอาวีฟ รุ่นที่ 2 เท่านั้น
europe-west2 ลอนดอน รุ่นที่ 1 เท่านั้น
us-central1 ไอโอวา รุ่นที่ 1, รุ่นที่ 2 energy_savings_leaf
us-east1 เซาท์แคโรไลนา รุ่นที่ 1, รุ่นที่ 2
us-east4 นอร์เทิร์นเวอร์จิเนีย รุ่นที่ 1, รุ่นที่ 2
us-east5 โคลัมบัส รุ่นที่ 2 เท่านั้น
us-south1 แดลลัส รุ่นที่ 2 เท่านั้น
us-west1 ออริกอน รุ่นที่ 1, รุ่นที่ 2 energy_savings_leaf

ราคาสำหรับระดับ 2

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

ภูมิภาค ตำแหน่ง เวอร์ชันผลิตภัณฑ์ที่รองรับ การปล่อยก๊าซ CO2
asia-east2 ฮ่องกง รุ่นที่ 2 เท่านั้น
asia-northeast3 โซล รุ่นที่ 1, รุ่นที่ 2
asia-southeast1 สิงคโปร์ รุ่นที่ 1, รุ่นที่ 2
asia-southeast2 จาการ์ตา รุ่นที่ 1, รุ่นที่ 2
asia-south1 มุมไบ รุ่นที่ 2 เท่านั้น
asia-south2 เดลี อินเดีย รุ่นที่ 2 เท่านั้น
australia-southeast1 ซิดนีย์ รุ่นที่ 1, รุ่นที่ 2
australia-southeast2 เมลเบิร์น รุ่นที่ 2 เท่านั้น
europe-central2 วอร์ซอ รุ่นที่ 1, รุ่นที่ 2
europe-west2 ลอนดอน รุ่นที่ 2 เท่านั้น
europe-west3 แฟรงก์เฟิร์ต รุ่นที่ 1, รุ่นที่ 2 energy_savings_leaf
europe-west6 ซูริก รุ่นที่ 1, รุ่นที่ 2 energy_savings_leaf
europe-west10 เบอร์ลิน รุ่นที่ 2 เท่านั้น
europe-west12 ตูริน รุ่นที่ 2 เท่านั้น
me-central1 โดฮา รุ่นที่ 2 เท่านั้น
me-central2 ดัมมาม รุ่นที่ 2 เท่านั้น
northamerica-northeast1 มอนทรีออล รุ่นที่ 1, รุ่นที่ 2 energy_savings_leaf
northamerica-northeast2 โทรอนโต รุ่นที่ 2 เท่านั้น energy_savings_leaf
southamerica-east1 เซา เปาโล รุ่นที่ 1, รุ่นที่ 2 energy_savings_leaf
southamerica-west1 ซานติอาโก ชิลี รุ่นที่ 2 เท่านั้น
us-west2 ลอสแอนเจลิส รุ่นที่ 1, รุ่นที่ 2
us-west3 ซอลต์เลกซิตี รุ่นที่ 1, รุ่นที่ 2
us-west4 ลาสเวกัส รุ่นที่ 1, รุ่นที่ 2

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

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

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

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

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

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

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 ฟังก์ชันจะได้รับเหตุการณ์ ดูเปลี่ยนภูมิภาคของฟังก์ชันเพื่อดูลำดับคำสั่งที่แนะนำในการเปลี่ยนภูมิภาคสำหรับฟังก์ชัน

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

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

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