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

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

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

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

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

ในรายการในส่วนนี้ ไอคอน 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

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

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

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

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

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

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

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

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

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

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