Apa itu "Infrastruktur sebagai Kode"?

13

Ungkapan "Infrastruktur sebagai Kode" telah disebutkan beberapa kali dalam dua minggu terakhir dalam konteks yang berbeda. Apa arti sebenarnya dalam arti praktis memiliki Infrastruktur sebagai Kode?

Richard Slater
sumber

Jawaban:

11

TL; DR : Infrastruktur sebagai Kode adalah cara untuk mengotomatisasi dan membuat cadangan lingkungan Anda. Dalam kasus ideal, setelah bencana, Anda dapat memulihkan Infrastruktur Anda secara penuh dan otomatis dengan Menyediakan sumber daya baru, Mengembalikan Konfigurasi dari Penyimpanan Kode dan Memulihkan Data dari Cadangan.

Gambaran

Infrastruktur sebagai Kode bergantung pada tiga konsep utama:

Otomatisasi

Manajemen Konfigurasi berada di generasi ke-3 alat. Membangun CFEngine seperangkat alat baru untuk Manajemen Konfigurasi Otomatis sedang digunakan secara luas sekarang. Urutan abjad yang paling populer adalah Ansible, CFEngine, Chef, Puppet, PowerShell DSC, dan SaltStack . Masing-masing akan memiliki Bahasa untuk menggambarkan keadaan infrastruktur Anda, Modul Kode untuk menerapkan perubahan-perubahan itu dan memberikan kemampuan untuk memperluas alat, beberapa Agen untuk mengeksekusi mereka di server dan Repositori Pusat informasi.

Mereka umumnya akan beroperasi dalam mode push atau pull, baik menghubungkan ke server dari lokasi pusat dan mengeksekusi perubahan jarak jauh atau berjalan di setiap server dan menarik informasi tentang keadaan dari lokasi pusat dan bahwa dalam model klien / server atau dalam didistribusikan cara.

The Konsep penting adalah untuk administrator sistem atau situs keandalan insinyur untuk tidak membuat perubahan langsung ke infrastruktur, tapi biarkan otomatisasi melakukan perubahan. Apa pun yang dilakukan secara manual oleh manusia harus dianggap mudah rusak, segera diperbaiki kembali dengan otomatisasi atau dalam bentuk yang lebih keras yang melanggar integritas infrastruktur dan memicu kerusakan dan membangun kembali komponen yang terkena dampak.

Repositori Kode

Repositori Kode, idealnya terpisah dari Perangkat Lunak yang memegang Repositori, akan digunakan untuk mengelola semua perubahan pada Infrastruktur dan Otomasi terkait. Ini harus berisi file dan templat Konfigurasi, Playbook (Cookbook) yang menjelaskan proses perubahan yang akan ditinjau, Kode memperluas alat otomatisasi CM, konfigurasi Penyediaan, Tes dan Peringatan Infrastruktur, Tes Staging / Penempatan, Dokumentasi, Manual (belum otomatis) Deskripsi Proses .

Konsep penting adalah melembagakan tinjauan sejawat untuk perubahan, memiliki catatan semua perubahan dan kemampuan untuk secara otomatis kembali ke keadaan sebelumnya jika terjadi masalah yang tidak dapat diprediksi dan / atau tidak teruji, kemampuan untuk menyebarkan ke lingkungan pementasan dan menguji perubahan konfigurasi dan kemampuan untuk secara otomatis menggunakan perubahan tanpa variasi yang disebabkan oleh kesalahan manusia.

Infrastruktur yang Dikelola

Mengelola Infrastruktur Fisik adalah tugas dunia nyata yang melampaui perangkat lunak dan memerlukan serangkaian keterampilan yang sangat berbeda. Dengan mampu mengabstraksi lapisan ini melalui Cloud Computing atau Datacenter yang Dikelola, Anda memiliki tim Anda fokus pada bagian mengelola Infrastruktur yang menambah nilai bisnis.

Sementara Cloud Computing menawarkan cara untuk memulai dan skala dengan cepat pada tahap selanjutnya perusahaan seringkali menyadari beberapa manfaat dan bahkan penghematan yang signifikan dalam memindahkan bagian-bagian dari Infrastruktur di pusat data mereka sendiri untuk model hybrid. Memiliki atau menyewa perangkat keras tidak berarti Anda juga harus mempekerjakan orang yang menanganinya. Pada skala ini Anda membutuhkan pusat data yang didistribusikan secara geografis di seluruh dunia dan memiliki orang-orang dengan semua keterampilan yang dibutuhkan di semua tempat akan sangat mahal. Menerbangkan mereka ke seluruh dunia menambah latensi tinggi pada setiap perubahan dan tingkat tambahan ketidakefisienan operasional, yang merupakan alasan lain untuk melakukan outsourcing manajemen data center.

Hal penting yang perlu diperhatikan adalah bahwa Infrastruktur Fisik yang Dikelola sering dilupakan atau diabaikan , tetapi sama pentingnya. Bahkan jika Anda memiliki semuanya otomatis, semua konfigurasi disimpan dalam repositori kode yang didukung, kecuali jika Anda memiliki cara untuk penyediaan cepat , Anda memiliki hambatan besar , yang dapat dengan mudah menghapus semua manfaat yang Anda peroleh dengan dua langkah lainnya. .

Jiri Klouda
sumber
5

Sebelum menjelaskan apa sebenarnya itu, izinkan saya mengutip definisi yang sangat bagus, langsung dari Wikipedia :

Infrastructure as Code (IaC) adalah proses mengelola dan menyediakan infrastruktur komputasi (proses, server bare-metal, server virtual, dll.) Dan konfigurasinya melalui file definisi yang dapat diproses mesin, daripada konfigurasi perangkat keras fisik atau penggunaan konfigurasi interaktif alat.

Oke, sekarang mari kita lihat salah satu alat IaC tersebut, Terraform untuk memahami konsep dengan lebih baik: https://www.terraform.io/

Juga, inilah yang dikatakan Terraform tentang dirinya:

Terraform memungkinkan Anda untuk membuat, mengubah, dan meningkatkan infrastruktur produksi secara aman dan dapat diprediksi. Ini adalah alat open source yang mengkodifikasi API menjadi file konfigurasi deklaratif yang dapat dibagikan di antara anggota tim, diperlakukan sebagai kode, diedit, ditinjau, dan diversi.

Ini berarti, seseorang dapat mengkode seluruh infra. yang mencakup pembuatan sumber daya cloud (/ infra) seperti instance server, load balancers, dll, bersama dengan konfigurasi lengkap (yang mencakup pengaturan dasar tweak, pengaturan keamanan, wilayah, dll) sebagai kode, yang dapat diedit, dapat diubah dan tentu saja bisa ditinjau.

Ini adalah contoh contoh kode Terraform untuk penyediaan sumber daya AWS:

resource "aws_elb" "frontend" {
  name = "frontend-load-balancer"
  listener {
    instance_port     = 8000
    instance_protocol = "http"
    lb_port           = 80
    lb_protocol       = "http"
  }

  instances = ["${aws_instance.app.*.id}"]
}

resource "aws_instance" "app" {
  count = 5

  ami           = "ami-408c7f28"
  instance_type = "t1.micro"
}

Bonus PS : Juga, orang perlu memahami perbedaan antara alat penyediaan dan orkestrasi . Pengembang sering membingungkan satu sama lain dan cenderung membuat kesalahan dengan mencoba mengubah dan menggunakan alat untuk apa alat itu tidak dimaksudkan untuk digunakan.

Dawny33
sumber