Pendahuluan

Infrastructure As Code adalah terminologi yang berkembang beberapa tahun belakangan ini seiring dengan perkembangan Cloud dan DevOps.

Dengan Infrastructure As Code, maka mendesain server, memori, database, VPC, container, jaringan, orchestrasi di cloud menjadi seperti membuat code program.

Dahulu, ketika kita meminta tim IT Infrastruktur untuk menyediakan server, maka yang akan kita lakukan adalah :

  • mengisi formulir permintaan server, jaringan, spesifikasi, dll.
  • meminta approval terhadap permintaan kita tersebut.
  • Tim IT Infrastruktur akan melakukan pemesanan server, memori, menginisiasi Virtual Machine, dll sesuai dengan permintaan di formulir diatas.
  • Tim IT Infrastruktur akan mengeksekusi script untuk inisiasi VM, server, Operating System, Security Patch, dll.
  • Formulir dan approval permintaan tadi disimpan, sebagai bukti untuk audit dan desain infrastruktur.
  • dst.

Yang sering kita lihat terkadang adalah informasi detail dari konfigurasi, eksekusi, dan lainnya melekat kepada personal IT Infrastruktur yang melakukannya itu.

Bukan di dokumentasi dan code yang bisa dishare dan diakses dengan mudah.

Dengan Infrastructure As Code, maka konfigurasi dari desain infrastruktur aplikasi kita disimpan dalam code, dan tidak melekat ke orang yang mendesain infrastrukturnya saja.

Ini tentunya memudahkan dalam sharing informasi, diskusi bersama, dan juga resilience dalam desain infrastruktur.

Kita bisa mengistilahkan hal ini sebagai Otomasi IT Infrastruktur.

Atau lebih tepatnya Orkestrasi IT Infrastruktur.

Mengenai Orkestrasi dapat dilihat di sini


Tapi tunggu, apakah semudah itu ?


Tentu saja tidak semudah itu.

Otomasi dan Orchestration bukanlah persoalan yang datang dari langit dengan tiba-tiba.

Ada proses untuk mengelola dan memastikan bahwa :

  • komponen yang mau diotomasi tersebut memang bisa dan mudah untuk diotomasi.
  • ada tools untuk melakukan otomasi dengan mudah.
  • ada orang yang ahli dalam membuat dan mengelola komponen dan tools tersebut.

Coba kita lihat, apakah era sekarang sudah memungkinkan hal diatas terjadi ?

  • komponen –> kita sudah berada di era Cloud, dimana komponen IT Infrastruktur sudah bisa dibuat secara mudah. Kita lihat dengan mudahnya kita membuat server dengan EC2, container dengan ECS, dan database dengan RDS.
  • tools –> ada tools yang dibuat untuk mengelola otomasi IT Infrastruktur seperti Puppet, Ansible, Terraform, StackFormation, dll.
  • orang –> sekarang ada profesi DevOps Engineering, atau Site Reliability Engineering, yang memang khusus untuk kasus diatas.

Coba kita lihat kasusnya


Sebuah aplikasi baru diminta oleh tim bisnis ke tim IT.

Dan setelah dianalisa, maka tim IT membutuhkan server dan pengelolaan akun security yang memadai untuk dipakai oleh tim bisnis dan tim teknikal.

Dan sesuai dengan konsep Agility dan Failfast, maka tim bisnis harus secara tepat memutuskan apakah aplikasi baru ini bisa dilanjutkan atau tidak.

Dengan kondisi seperti diatas, maka Tim IT akan melakukan :

  • Identifikasi komponen yang diperlukan, misalnya server, memori, alamat url, REST API, dll.
  • Tools untuk melakukan provisioning atau penyediaan komponen tersebut dengan men-supply detail IT Infrastructure yang dibutuhkan dalam Infrastructure as code.
  • Tim DevOps akan mereview, approval, eksekusi dan juga monitoring secara global memakai tools tersebut.
  • Tim IT application dan tim bisnis menvalidasi hasil dari eksekusi Infrastructure as code.

Contohnya ?

resource "aws_s3_bucket" "s3example" {
  bucket = "example"
}

resource "aws_s3control_bucket_policy" "s3control_bucket_policy_example" {
  bucket = aws_s3_bucket.s3example.arn
  policy = jsonencode({
    Id = "testBucketPolicy"
    Statement = [
      {
        Action = "s3-outposts:PutBucketLifecycleConfiguration"
        Effect = "Deny"
        Principal = {
          AWS = "*"
        }
        Resource = aws_s3_bucket.s3example.arn
        Sid      = "statement1"
      }
    ]
    Version = "2012-10-17"
  })
}


Kalau kita lihat code diatas, adalah code Infrastructure As Code memakai Terraform untuk s3.

Dengan code diatas, maka kita mendefinisikan :

  • S3 bucket di AWS.
  • Menambahkan policy/aturan terhadap S3 bucket diatas.

Lalu ?


Kalau kita lihat memang ujung-ujungnya akan berfokus ke tools yang memudahkan dalam membaca Infrastructure As Code, menganalisanya, mengimplementasikannya, dst.

Ini mirip dengan kalau di IT Software Engineering, kita membutuhkan IDE (Integrated Development Interface), Compiler, dan juga Runtime Environmenntya.

Begitu pula yang kita lihat kalau memakai Infrastructure As Code, dimana kita butuhkan :

  • IDE nya, bisa memakai IDE apa saja, text editor, Visual Code Extension, Brainboard, Pycharm, dll.
  • Compilernya, atau orchestrationnya, misalnya Terraform, Ansible, Puppet, dll.
  • Runtime Environmentnya, tentu saja dalam hal ini adalah Cloud Provider, misalnya AWS, GCP, Heroku, dll.