Apa itu Terraform Workspace
Terraform Workspace adalah kontainer logis untuk mengelola state resource infrastruktur di lingkungan yang berbeda. Secara default, setiap konfigurasi Terraform memiliki satu workspace yang disebut 'default'. Namun, Anda dapat membuat workspace tambahan untuk mengelola beberapa lingkungan, seperti pengembangan, staging, dan produksi.
Konsep dan Terminologi Utama
-
Workspace
Kontainer bernama untuk mengelola state resource infrastruktur Anda di berbagai lingkungan. -
State
File berformat JSON yang mencatat state terkini dari resource infrastruktur Anda yang dikelola oleh Terraform. -
Environment
Konteks khusus di mana resource infrastruktur Anda dideploy dan dikelola, seperti pengembangan, staging, atau produksi.
Membuat dan Mengelola Workspaces
Membuat Workspace Baru
Untuk membuat workspace baru, gunakan perintah terraform workspace new
diikuti dengan nama workspace yang diinginkan. Contohnya:
$ terraform workspace new development
Perintah ini membuat workspace baru bernama 'development', yang dapat Anda gunakan untuk mengelola lingkungan pengembangan Anda.
Beralih Antara Workspaces
Untuk beralih antara workspaces, gunakan perintah terraform workspace select
diikuti dengan nama workspace:
$ terraform workspace select development
Perintah ini mengatur workspace aktif ke 'development', memungkinkan Anda mengelola resource dalam workspace tersebut.
Menghapus Workspaces
Untuk menghapus workspace, gunakan perintah terraform workspace delete
diikuti dengan nama workspace:
$ terraform workspace delete development
Perintah ini menghapus workspace 'development' beserta file state yang terkait.
Mencantumkan Workspaces
Untuk mencantumkan semua workspace yang tersedia, gunakan perintah terraform workspace list
:
$ terraform workspace list
Perintah ini menampilkan daftar semua workspace yang ada, dengan tanda bintang (*
) di samping workspace aktif saat ini.
Konfigurasi Workspace-Specific
Penanganan Variable dan Output
Untuk menangani variabel dan output secara khusus untuk workspace, gunakan interpolasi terraform.workspace
. Ini memungkinkan Anda mengonfigurasi resource secara dinamis berdasarkan workspace aktif. Contohnya:
variable "instance_type" {
type = map(string)
default = {
default = "t2.micro"
development = "t2.small"
production = "m5.large"
}
}
resource "aws_instance" "example" {
ami = "ami-0c94855ba95b798c7" # This is an example Amazon Linux 2 AMI ID
instance_type = var.instance_type[terraform.workspace]
tags = {
Name = "example-instance-${terraform.workspace}"
Environment = terraform.workspace
}
}
Pada contoh ini, variabel instance_type
memiliki nilai yang berbeda untuk workspace 'default', 'development', dan 'production'. Atribut instance_type
dari resource menggunakan workspace aktif untuk menentukan nilai yang sesuai.
Konfigurasi Backend
Anda juga dapat mengonfigurasi penyimpanan backend Anda agar khusus untuk workspace. Misalnya, menggunakan backend S3 dengan kunci unik untuk setiap workspace:
terraform {
backend "s3" {
bucket = "my-terraform-state"
key = "state/${terraform.workspace}/terraform.tfstate"
region = "us-west-2"
}
}
Konfigurasi ini menyimpan file state untuk setiap workspace dalam kunci terpisah dalam bucket S3 yang sama.
Penandaan Resource
Menandai resource dengan informasi workspace dapat membantu dalam pengelolaan, audit, dan alokasi biaya. Dengan menggunakan interpolasi terraform.workspace
, Anda dapat menambahkan tag ke resource Anda:
resource "aws_instance" "example" {
# ... other configuration ...
tags = {
Name = "example-instance-${terraform.workspace}"
Environment = terraform.workspace
}
}
Referensi