Firebase: Environment Config

PamornT
Firebase Thailand
2 min readDec 25, 2020

--

ปกติการพัฒนาโปรแกรมต่างๆ จะมีการเก็บค่า Config ต่างๆ โดยทั่วไปเราอาจจะใช้วิธีการสร้างไฟล์ .env มาเพื่อเก็บค่า หรือสร้างไฟล์ config.json ขึ้นมา ข้อเสียคือ ถ้าเรามีนักพัฒนาหลายคน อาจจะเกิดความลำบากในการ share ค่า config เหล่านี้เนื่องจากเราไม่สามารถเอาไฟล์ .evn หรือ config.json ขึ้นไปบน git ได้ ด้วยเหตุผลเรื่องความปลอดภัย และเนื่องจากมันเป็น Text file ทำให้ใครที่ได้ไปก็สามารถเปิดดูได้เลยทำให้ไม่ปลอดภัย

วันนี้ผมจะเสนอวิธีการเก็บและเรียกใช้ค่า config แบบง่ายๆ ผ่าน firebase cli โดยสามารถเรียกใช้งาน config ได้ทุกๆ functions และยังสามารถกำหนดความปลอดภัยตามการ setting ของ project ได้เลยครับ

โดยบทความนี้ผมจะอ้างอิงการสร้าง LINE Bot จากบทความนี้นะครับ

มาเริ่มกันเลย!!! โดยโจทย์บทความนี้ผมจะสร้าง Functions Config เพื่อเก็บค่า LINE Channel Access Token แล้วเอาไปใช้ LINE Bot นะครับ

SET

เริ่มต้นเราจะทำการ set ค่า config กันก่อนนะครับ โดยรูปแบบคำสั่งจะเป็นแบบนี้นะครับ

firebase function:config:set key=”value”

ให้เปิด Terminal/Command line ขึ้นมาแล้ว เข้าไปที่ project ของเรา แล้วพิมพ์คำสั่ง ตามนี้เลยครับ ให้แทนค่า LINE-CHANNEL-ACCESS-TOKEN เป็น access token ที่เราได้จาก LINE นะครับ

firebase functions:config:set line.channelaccesstoken=”LINE-CHANNEL-ACCESS-TOKEN”

ผลลัพธ์ที่ได้หลังจาก set จะเป็นแบบนี้ครับ

Functions config updated.Please deploy your functions for the change to take effect by running firebase deploy — only functions

สังเกตุว่า firebase cli จะมีข้อความบอกให้เรา deploy functions ใหม่ด้วยก่อนเรียกใช้ค่า config ที่เราเปลี่ยนแปลงไป

ปล. เงื่อนไขการตั้ง key และ value จะมีกฎนิดนึงครับ

  • Key ต้องเป็นตัวเล็กเท่านั้น
  • ห้ามมี space ระหว่าง key=value

GET

ทดสอบลอง Get config ออกมาดู

firebase functions:config:get

ผลลัพธ์ที่ได้จะเป็น json แบบนี้ครับ แสดงว่าเรา set ค่าเรียบร้อยพร้อมใช้แล้วครับ

{
“line”: {
“channelaccesstoken”: “LINE-CHANNEL-ACCESS-TOKEN”
}
}

USE

ตอนใช้งานเราสามารถเรียกใช้ค่า functions.config() แบบนี้ได้เลยครับ ทดลองเอาไปแทนตรง Authorization

Authorization:`Bearer ${functions.config().line.channelaccesstoken}`

ทดลองเรียกใช้ bot หลังจาก เปลี่ยนค่า config สามารถใช้งานได้ปกติครับ

USE with Emulator Suite

สำหรับใครที่จะใช้ Environment config กับ Firebase Emulator Suite ตัว Emulator จะหาพวกค่า config ไม่เจอ เนื่องจาก config ต่างๆจะอยู่ใน server

ซึ่งวิธีแก้ก็ให้ไปดูดค่า config เหล่านั้นลงมาใน local ก่อน โดยเข้าไปที่โฟลเดอร์ /functions แล้วเรียกคำสั่ง

firebase functions:config:get > .runtimeconfig.json

CR : Jirawatee

สรุป

การใช้งาน functions config มีข้อดีตรงที่เราสามารถเรียกใช้งานค่า config นี้ที่ functions ไหนก็ได้ โดยนักพัฒนาทุกคนที่มีสิทธิสามารถเรียกใช้งานได้เลย และความปลอดภัยในการใช้งานโดยสามารถกำหนดสิทธิได้จาก Project setting ได้เลย

ทดลองเอาไปปรับใช้กันดูนะครับ

--

--