วิธีย้าย terraform state ข้าม project

Nont Banditwong
1 min readJul 31, 2023

--

การใช้ terraform บริหารจัดการ resource ใน project ถ้าหากไม่ได้วางแผนไว้ล่วงหน้าเราอาจจะเอา resource ทุกอย่างอยู่รวมกันใน project เดียว ยกตัวอย่าง terraform resource เช่น ECS cluster, RDS cluster, RDS proxy, ELB, ECS service และECS task definition เป็นต้น

พอ project มีขนาดใหญ่ขึ้น เกิด microservices หลายๆตัวที่ต้องมา share ใช้ infrastructure เหล่านี้ร่วมกัน การวาง resource ที่เป็น shared infrastructure ไว้ใน project ของ application น่าจะไม่ค่อยเหมาะสมนัก จึงจำเป็นต้องแยก shared infrastructure เช่น เช่น ECS cluster, RDS cluster, RDS proxy, ELB ออกมาไว้ในอีก project

สิ่งที่เราต้องทำคือย้าย state และ code ของ terraform resource ที่ต้องการออกมา

สมมุติมี directory ของ project มีโครงสร้างดังนี้

application -> myapp

infrastructure -> myinfra

|
- myapp
|
- myinfra

เช่นต้องการย้าย resource ชื่อ module.rds_proxy จาก myapp ไปอยู่ที่ myinfra โดยใช้ชื่อ resource module.rds_proxy เหมือนเดิมสามารถทำได้ดังนี้

cd myinfra
terraform state pull > ../myinfra.tfstate

cd ../myapp
terraform state pull > ../myapp.tfstate

terraform state mv -state=../myapp.tfstate -state-out=../myinfra.tfstate module.rds_proxy module.rds_proxy

terraform state push ../myapp.tfstate

# verify ว่า state ของ rds_proxy ถูกย้ายไปแล้ว
terraform state list | grep rds_proxy

cd ../myinfra

# ย้าย code ส่วนของ module.rds_proxy เข้ามาอยู่ใน directory

terraform state push ../myinfra.tfstate

# verify ว่า state ของ rds_proxy ถูกย้ายเข้ามาแล้ว
terraform state list | grep rds_proxy

ลอง terraform plan ดู ต้องไม่มีเปลี่ยนแปลงของ resource ใน project

อ้างอิง stackoverflow

--

--

Nont Banditwong

Cloud Engineering Specialist, Software Developer, System Engineer, Photographer and Learner