นี่ไม่ใช่ influencer นี่มัน infisical! มาจัดการ environment ที่ใช้ร่วมกับทีมแบบ sexy กัน
สวัสดีมิตรรักนักอ่านทุกท่านค่ะ เชื่อว่าหลายๆ ท่านที่หลงเข้ามาจะต้องอยู่สาย tech กันอย่างแน่นอน บทความนี้อยากเขียนเพื่อแชร์วิธีการที่เราจะจัดการ environment ภายในโปรเจคกับทีมของเราอย่าง sexy ด้วย tool สุดเก๋ไก๋ที่ชื่อว่า Infisical นั่นเองค่ะ และในบทความนี้จะขอเรียก environment สั้นๆ ว่า env นะคะ
ก่อนจะซิ่ง 🏍
Infisical เป็น Open source SecretOps ตัวหนึ่งที่สามารถจัดการ env ได้อย่างครอบคลุม โดยที่เราสามารถทำการ self-hosted เองหรือจะใช้บริการ infisical cloud เพื่อจัดการ env ของเราได้ค่ะ (โดยบทความนี้จะเน้นไปทาง infisical cloud นะคะ หากท่านใดต้องการทำแบบ self-hosted สามารถทำได้ต่อจากบทความนี้เลยค่ะ โดยต่อยอดจาก document นี้ หรือรออ่านได้ในบทความฉบับต่อๆ ไปค่ะ)
ความดีงามของ tool ตัวนี้มีอยู่หลายอย่างเลยค่ะ แต่ที่ต้องชื่นชมมากที่สุดคือ document ของเขาทำมาดีมาก อ่านง่าย อ่านรู้เรื่อง ทำตามง่าย (น้ำตาไหล) ส่วนความดีงามอื่นๆ เดี๋ยวเรามาค่อยๆ รู้ไปด้วยกันนะคะ
พี่ต้องกลิ้งมาก่อน 🤸♂️🧍♀️🤸♀️🧍♂️
ปกติทุกคนจัดการ env ในทีมกันยังไงคะ? จากประสบการณ์ส่วนตัวแล้วการจัดการ env ของแต่ละโปรเจคที่เคยทำก็จะแตกต่างกันไปค่ะ บางโปรเจคก็เก็บไฟล์ไว้ใน secret store (e.g. 1Password, LastPass) หรือ google shared drive ไว้ให้คนในทีมไปดาวน์โหลดกัน พอมีการแก้ไขก็ประชาสัมพันธ์แจ้งเตือนเพื่อให้ทุกคนไปดาวน์โหลดไฟล์ใหม่เพื่ออัพเดท บางโปรเจคก็เอา env ขึ้น git version control (e.g. GitHub, GitLab, etc.) ไปทั้งอย่างนั้นเลย (อันตรายๆ ถ้ามี sensitive data) หรือแม้แต่บางโปรเจคก็ปา env variables กันไปมาผ่านห้องแชทของทีมก็มีค่ะ
ซึ่งทั้งหมดที่กล่าวมานี้มีแต่ความเจ็บปวดค่ะ ทั้งการที่จะต้องเสียเวลาทีมเข้าไปดึงไฟล์ใหม่อยู่เรื่อยๆ ทั้งจะต้องกังวลเรื่อง secret จะหลุดไปทำให้ระบบขาดความปลอดภัยต่างๆ ทั้งการที่มี variables ในแต่ละ env ไม่เท่ากัน หรือแม้กระทั่งการดาวน์โหลด env มาใช้ผิดระหว่างพัฒนาแอปพลิเคชันก็เกิดขึ้นได้เช่นกันค่ะ เราทนอยู่กับความเจ็บปวดนี้มาพักใหญ่เลยค่ะ จนมาพบกับพระเอกของเรา Infisical cal cal cal
ถึงเวลาซิ่ง… แต่เดี๋ยวก่อนนน ⛔
ก่อนจะเริ่มเราต้องมี account ของตัวเองก่อน โดยการสมัครสมาชิกผ่านทางหน้า website แล้วเลือก Create an account ค่ะ
หลังจากสมัคร account เสร็จแล้ว ทาง Infisical จะให้เราดาวน์โหลด secret pdf เอาไว้เผื่อกรณีที่เราลืมรหัสผ่านค่ะ (⚠ ไฟล์นี้สำคัญมาก ห้ามทำหาย ห้ามลบทิ้ง ห้ามให้คนอื่นถ้าไม่มีความจำเป็นนะคะ)
แล้วเราก็จะได้เข้ามาในหน้า dashboard ของเราค่ะ โดยในหน้า dashboard ของเราก็จะมีวิธีการติดตั้ง cli บนเครื่องของเราค่ะ เราก็ทำตามคู่มือกันโลด!
ถึงเวลาซิ่งจริงๆ แล้ว 🏍💨💨
พอเราเข้ามาถึงหน้า dashboard เราก็เริ่ม Add new project กันเลยค่ะ (โดยที่ตัว Infisical cloud ที่เป็นตัวฟรีให้เราสร้าง project ได้สูงสุดถึง 3 โปรเจคเลยค่ะ)
เมื่อสร้างเสร็จแล้ว เราจะได้เข้าสู่หน้า Secret Overview ของโปรเจคที่เราสร้างค่ะ โดยที่ Infisical จะมี default env setup มาให้เราแล้วคือ development, staging, และ production ค่ะ
เราสามารถเพิ่ม variables ได้ 2 วิธีคือการเพิ่มแบบ manual เองหรือ import file จากโปรเจคของเราค่ะ โดยที่ infisical รองรับไฟล์ .env, .json, และ .yaml ที่เราคุ้นเคยค่ะ (สะดวกสุดๆ! ✨)
เมื่อเรา Save changes แล้วที่หน้า Secret Overview ของเราก็จะมาการเปลี่ยนแปลงเกิดขึ้น จากรูป จะเห็นได้ว่าเราไม่มีทางไม่รู้ตัวว่า variables ในแต่ละ env มีไม่เท่ากัน เพราะเราจะเห็นตัวแจ้งเตือนที่คอยตะโกนใส่เราทุกครั้งที่เข้าหน้านี้ค่ะ
ในส่วนของการดึง env ไปใช้นะคะ เราสามารถดึง env ไปใช้ในโปรเจคด้วยการใช้ cli ใน project directory ของเราได้ 2 วิธี ดังนี้
วิธีที่ 1: ดาวน์โหลดด้วย cli
เป็นวิธีสุด classic ด้วยการใช้ command ข้างล่างค่ะ วิธีนี้ cli จะดาวน์โหลด env file ลงมาที่เครื่องของเราโดยตรง
infisical export > [YOUR_ENV_FILE_NAME]
วิธีที่ 2: ใช้ผ่าน cli ตรงๆ ไปเลย
วิธีนี้คือเราไม่จำเป็นต้องมี env file อยู่ในเครื่องเลยค่ะ เราสามารถใช้ cli รวมกับคำสั่งที่เราใช้ในโปรเจคเพื่อทำบางสิ่ง(เช่น start serve เป็นต้น)ได้เลย ด้วยคำสั่ง
default:
infisical run -- [YOUR_USUAL_START_COMMAND] // e.g. `infisical run -- npm start`
specific:
infisical --env=[ENV_NAME] run -- [YOUR_USUAL_START_COMMAND] // e.g. `infisical --env=staging run -- npm start`
ตัว cli ที่เราติดตั้งแต่แรกนั้นมีประโยชน์สุดๆ ไปเลยใช่ไหมคะ? ถ้าหากอยากรู้ว่า cli ทำอะไรได้อีกบ้างก็ จิ้มตรงนี้ ได้เลย
ของแถมก่อนจาก 🎁
ที่เจ๋งเลย คือ เราสามารถเพิ่ม env ของเรานอกเหนือจาก default ด้วยการไปที่ Project settings แล้วกดเลือก Create environment เพิ่มได้ค่ะ
ที่เจ๋งกว่านั้น เราสามารถจัดการคนที่สามารถเข้าถึง env แต่ละตัวของเราได้ผ่านเมนู Members ทั้งนี้ เราต้องจัดการเพิ่ม Member เข้ามาในโปรเจคของเราก่อนนะคะ
ที่เจ๋งสุดๆ คือ Infisical แถมการ integrate กับผลิตภัณฑ์อื่นๆ ที่เราคุ้นหูอย่างพวก AWS Secret Manager, GCP Secret Manager, Azure Key Vault, Docker, etc. มาให้เราได้ใช้กันอย่างหนำใจด้วยค่ะ ส่วนจะใช้ยังไงนั้น เราก็จิ้มตัวที่เราอยากใช้แล้วทำตาม step ได้แบบง่ายแสนง่าย ✨
ถึงที่หมายแล้ว 🏁
และนี่ก็เป็นความ sexy ที่อยากมาแชร์กันค่ะ อ่านมาถึงตรงนี้ทุกท่านมีความคิดเห็นอย่างไรกันบ้างคะ? Infisical สมมงต่อการเผยแผ่ลัทธิในทีมไหมคะ? หรือว่าท่าของทีมที่ใช้อยู่ตอนนี้ sexy กว่าคะ? อยากให้มาแชร์กันค่ะ เพื่อเราจะมุ่งสู่ the way of sexy code ไปด้วยกัน!
สุดท้ายนี้ บทความนี้จะเกิดขึ้นไม่ได้เลยถ้าไม่ได้ Supakarn Laorattanakul มาป้ายยา ขอบพระคุณยาแรงมา ณ ที่นี้จ้า
ที่ม้าแพ้ ก็เพราะลาไปก่อน สวัสดีค้าาา~ 🙏