Keuntungan:
- Keupayaan untuk memahami konsep IaC dan kitaran kerja Terraform (init, rancang, guna, nyatakan, modul) dan mempunyai kecerdasan buatan menghasilkan draf HCL yang selamat
- Keupayaan untuk menyemak setiap perubahan dengan pelan sebelum memohon dan menangkap talian musnah/ganti yang tidak dijangka
- Keupayaan untuk menggunakan prinsip menyimpan rahsia daripada kod, memastikan keadaan selamat dan meminimumkan kebenaran IAM
Pada masa lalu, menyediakan pelayan adalah perkara mengklik melalui panel awan: buat mesin maya, sediakan rangkaian, tambah peraturan keselamatan. Kaedah ini lambat, terdedah kepada ralat dan tidak boleh diulang - hampir mustahil untuk menyediakan persekitaran yang sama untuk kali kedua. Hari ini, infrastruktur diuruskan sebagai kod. IaC (Infrastruktur sebagai Kod) ialah pendekatan untuk menerangkan sumber awan seperti pelayan, rangkaian dan pangkalan data dalam fail teks dan bukannya secara manual. Fail ini terletak dalam kawalan versi (Git); Anda boleh melihat siapa yang mengubah apa, bila, dan apa; Anda boleh menyediakan infrastruktur yang sama berkali-kali, dengan cara yang sama, dengan satu arahan.
Alat IaC yang paling biasa ialah Terraform. Terraform mengambil takrifan yang anda tulis dalam bahasa yang boleh dibaca dipanggil HCL (Bahasa Konfigurasi HashiCorp — bahasa konfigurasi Terraform), menterjemahkannya ke dalam API penyedia awan (AWS, Azure, GCP) dan mencipta sumber. AI mengetahui HCL dengan baik dan menghasilkan blok kompleks dengan cepat. Tetapi dalam IaC, kos kesilapan adalah tinggi: satu definisi yang salah boleh menghapuskan keseluruhan pangkalan data pengeluaran. Itulah sebabnya peraturan emas dalam Terraform adalah untuk melihat setiap perubahan dengan 'pelan' sebelum melaksanakannya.
Masa jalanan Terraform
Terraform berfungsi dengan tiga arahan asas — mengetahui ini adalah prasyarat untuk mengawal output AI:
- `terraform init`: Memulakan projek, memuat turun pemalam pembekal yang diperlukan.
- `pelan terraform`: Membandingkan keadaan semasa dengan situasi yang diingini dan menunjukkan perkara yang perlu ditambah, perkara yang perlu diubah, perkara yang perlu dipadamkan. Tidak melaksanakan apa-apa. Ia adalah langkah keselamatan yang paling kritikal.
- `terraform apply`: Sebenarnya menggunakan Pelan, mencipta/mengubah suai sumber.
Selain itu, dua konsep adalah penting. Negeri (fail negeri): Ini ialah fail tempat Terraform mengekalkan keadaan semasa sumber yang diurusnya; Ia biasanya disimpan di dalam gudang terpencil dan berkunci supaya dua orang tidak boleh menukar atau memusnahkannya pada masa yang sama. Modul: Pakej konfigurasi boleh guna semula; Sebagai contoh, anda boleh menggunakan modul "sediakan rangkaian" dalam banyak projek.
Petua: Tanda paling berbahaya dalam output Terraform ialah memusnahkan atau -/+ (menggantikan) garisan dalam output pelan. Ini bermakna sumber itu akan dipadamkan. Jika anda melihat kemusnahan yang tidak dijangka dalam rancangan, jangan sekali-kali memohon, fahami dahulu mengapa ia muncul.
Langkah demi langkah: Menulis IaC dengan AI
- Jelaskan infrastruktur yang dikehendaki. Jadilah konkrit seperti "satu VPC, dua subnet, satu kumpulan keselamatan dan satu t3.micro EC2 pada eu-central-1".
- Nyatakan pembekal dan versi. Awan yang mana, Terraform dan versi pembekal yang mana? Jika anda tidak menentukan versi, AI mungkin mengembalikan sintaks yang lapuk/tidak serasi.
- Minta draf HCL dihasilkan. Juga minta pembolehubah dan output.
- Keluarkan Rahsia. Nilai seperti kata laluan dan kunci harus pergi ke bilik kebal pembolehubah dan rahsia, bukan kepada kod.
- Jalankan `init` + `plan`. Baca keluaran pelan baris demi baris; Semak pemadaman yang tidak dijangka.
- Mulakan sedikit, laksanakan secara beransur-ansur. Gunakannya dalam akaun/persekitaran ujian terpencil dahulu.
Keselamatan: Risiko khusus IaC
IaC adalah sama berisiko kerana ia berkuasa. Tiga perkara kritikal:
- Terdapat rahsia dalam fail negeri. Keadaan Terraform kadangkala menyimpan nilai sensitif, seperti kata laluan pangkalan data, dalam teks biasa. Jangan sekali-kali meletakkan Negeri dalam repositori awam; Gunakan hujung belakang jauh yang disulitkan dan akses terhad.
- Jangan sematkan rahsia dalam HCL. Baris seperti password="prod123" ditulis secara kekal pada sejarah Git. Sebaliknya, gunakan pembolehubah dan berikan nilai pada masa jalan daripada pembolehubah persekitaran (TF_VAR_...) atau peti besi rahsia.
- Keizinan IAM yang sangat luas. AI kadangkala menghasilkan blok seperti Action: "*" (benarkan semuanya) untuk "membuatnya berfungsi". Ini adalah kelemahan; sempitkan kebenaran kepada minimum yang diperlukan.
Perhatian: Sebaik sahaja rahsia memasuki sejarah Git, ia kekal sebagai masa lalu dan boleh dikompromi, walaupun anda memadamkan fail tersebut. Jika anda melakukan kesilapan, segera batalkan dan putar rahsia; Memadam sahaja tidak mencukupi.
Jadual tanda pelan berisiko
Cetakan rancangan
Maknanya
apa yang perlu dilakukan
+buat
Sumber baharu akan ditambah
Secara amnya selamat, semak semula
~ kemas kini di tempat
Sumber akan berubah di tapak
Sahkan kesan (adakah akan berlaku gangguan?)
-/+ ganti
Akan dipadamkan dan dicipta semula
AWAS: kehilangan data mungkin berlaku
- memusnahkan
Sumber itu akan musnah
BERHENTI: jangan sekali-kali memohon jika anda tidak menjangkakannya
tiga kes mini
Kes 1 — 2 hari kerja dalam 3 jam. Satu pasukan akan menulis Terraform untuk menyediakan persekitaran ujian baharu (VPC, subnet, pangkalan data RDS, kelompok ECS) tetapi mereka baru sahaja berpindah ke HCL. Mereka menerangkan seni bina dan versi kepada AI dan menghasilkan pelan tindakan modular. Mereka mengesahkan setiap modul dengan pelan dan menyediakannya dan berjalan dalam masa 3 jam; Ia akan mengambil masa dua hari untuk percubaan dan kesilapan manual.
Kes 2 — rancangan itu mendapat pemadaman. Seorang jurutera menjalankan rancangan tanpa menggunakan kod kemas kini yang dijana AI. Output mengandungi -/+ ganti untuk pangkalan data pengeluaran — AI cuba menggantikan medan yang tidak boleh diganti, yang bermaksud memadam dan mencipta semula pangkalan data. Jurutera berhenti memohon dan menukar perubahan kepada kaedah selamat. Tabiat merancang menghalang bencana.
Kes 3 - kebocoran rahsia yang terkubur. Seorang junior, YZ mengeluarkan db_password = "S3cret!" Dia melakukan talian seperti sedia ada dan menolaknya. Terperangkap dalam semakan kod; Kata laluan telah dibatalkan dan ditukar serta-merta, nilai telah dialihkan ke pembolehubah dan disuap dari bilik kebal rahsia. Pengajaran: Tidak pernah ada rahsia plaintext dalam HCL.
Empat templat yang boleh disalin
1) Menjana draf infrastruktur:
Tulis infrastruktur berikut pada [CLOUD: AWS] dengan Terraform (versi ~> 1.7): [SENARAI SUMBER]. Rantau [X]. Peraturan:- Jadikan semua nilai sensitif boleh ubah, jangan benamkannya dalam HCL.- Betulkan versi pembekal (required_providers).- Minimumkan kebenaran IAM, jangan gunakan "*".- Kembalikan [X, Y] sebagai output. Berikan kod secara modular dan dengan penjelasan.
2) Mentafsir keluaran rancangan:
Analisis keluaran 'pelan terraform' di bawah. Senaraikan saya:(1) apakah sumber yang telah ditambah/diubah/DIHAPUSKAN,(2) baris berisiko kehilangan data atau gangguan,(3) 3 soalan yang perlu saya tanya sebelum memohon.Rancangan: [OUTPUT]
3) Periksa HCL sedia ada untuk keselamatan:
Semak kod Terraform berikut untuk keselamatan: rahsia terbenam, kebenaran IAM yang terlalu luas, peraturan rangkaian terbuka (0.0.0.0/0), storan tidak disulitkan? Tulis setiap dapatan mengikut urutan kepentingan dan pembetulan. Kod: [HCL]
4) Tukar kod berulang kepada modul:
Tukar kod Terraform berulang berikut kepada modul boleh guna semula: apakah nilai yang sepatutnya menjadi pembolehubah, apakah antara muka modul yang sepatutnya? Tunjukkan juga contoh penggunaan. Kod: [HCL]
Gesaan lemah / Gesaan kuat
Lemah: "Buat pangkalan data dengan Terraform."
Keputusan: tidak jelas awan mana, enjin mana, versi mana, disulitkan atau tidak; Dengan sintaks warisan, AI boleh menyediakan contoh yang tersedia secara umum yang membenamkan kata laluan ke dalam kod.
Kuat: "Buat contoh RDS PostgreSQL 15 pada AWS dengan Terraform ~> 1.7. Jadikan pembolehubah kata laluan, jangan benamkannya dalam kod. Storan disulitkan, hanya boleh diakses daripada subnet peribadi, bukan awam. Betulkan versi pembekal. Kembalikan titik akhir sebagai output."
Perbezaan: gesaan kedua memberikan enjin, versi, penyulitan, kekangan rangkaian dan peraturan rahsia — output adalah selamat dan hampir dengan prod.
Kesilapan biasa
- Untuk `memohon` tanpa membuat `pelan`. Kesilapan paling mahal dalam IaC; sentiasa merancang dahulu.
- Menanam Rahsia dalam HCL. Mencipta kebocoran kekal ke dalam sejarah Git.
- Menyimpan keadaan tidak selamat. Keadaan awam yang tidak disulitkan, tidak berkunci, adalah bencana.
- Tidak membetulkan versi. Menggunakan pembekal tanpa menyatakan versi akan membawa kepada kegagalan mengejut pada masa hadapan.
- *`Tindakan: Keizinan luas seperti ""`.** Melanggar prinsip keistimewaan yang paling sedikit.
- Mengabaikan `musnah` yang tidak dijangka. Menggunakan baris padam dalam Pelan tanpa menyoal.
Secara ringkasnya
IaC menukar infrastruktur kepada kod yang boleh diulang, boleh versi dan boleh diaudit; Alat yang paling biasa ialah Terraform. AI dengan cepat menghasilkan stub HCL, tetapi anda mesti memberikan versi, butiran khusus awan dan peraturan keselamatan. Peraturan yang sempurna dalam Terraform: untuk melihat setiap perubahan dengan rancangan, untuk menanyakan pemadaman yang tidak dijangka, untuk menjauhkan rahsia daripada kod dan untuk memastikan keadaan selamat. Garisan musnah dan ganti dalam keluaran pelan adalah tempat yang harus dibaca dengan paling teliti.
Tugasan permohonan
Minta AI menjana infrastruktur kecil (cth. baldi storan dan dasar akses) menggunakan templat "Jana lakaran infrastruktur" di atas. Kemudian: (1) minta templat "penyesahan" semak untuk kebenaran rahsia atau * yang dibenamkan dalam kod; (2) jika boleh, jalankan init + plan dalam akaun ujian dan baca output pelan dengan templat "tafsiran pelan"; (3) perhatikan sebarang pemadaman/perubahan yang tidak dijangka.
senarai semak
- [ ] Saya menambahkan awan, Terraform/versi penyedia dan kekangan penyulitan/rangkaian pada gesaan saya.
- [ ] Tiada rahsia plaintext dalam kod; pembolehubah nilai ketepatan.
- [ ] Saya mengecilkan IAM/permissions kepada kebenaran minimum, * Saya tidak menggunakannya.
- [ ] Saya menjalankan rancangan sebelum memohon dan membaca baris keluaran demi baris.
- [ ] Saya mengesahkan bahawa tiada pemusnahan/penggantian yang tidak dijangka dalam Pelan.
- [ ] Saya pasti bahawa keadaan itu disimpan dalam bahagian belakang yang disulitkan, dikunci dan terhad.