Biceps - typescript pre ARM template-y

Deployovanie do Azure pomocou ARM tempaltov je celkom fun, ale pisanie ARM templatov uz menej. Prilis vela casu treba stravit googlenim prikladov, dokumentacie a skusanim pokus-omylov.

MS preto prisiel s novou syntaxou a toolingom, ktora to ma zjednodusit a ono to naozaj stoji zato:

Nepomenovaný

  1. Ovela lepsi intelli sense
  2. Design time type checking
  3. Citatelnejsia syntax
  4. Prepajanie viacerych suborov, tak ze sa da zlozitejsi template rozbit (hura!).

Tooling vyzera fajn (CLI, Language Service, VS Code plugin), dokonca spravili k tomu webovy playground v Blazor WebAssembly, hoci tento playground nema poriadny intelli sense a podobne.

Vyzerá to výrazne lepšie ako keď som s tým robil naposledy. Každopádne mi JSON nepríde vhodný na definovanie infraštruktúry. Podľa môjho názoru je to moc ukecané.

My sme prešli na Terraform a zatiaľ spokojnosť. Ten ich metajazyk je jednoduchý a prehľadný.
Pokukujem však po Pulumi. Môžnosť definovať infraštruktúru pomocou C# ma jednoducho láka :-). Komu by sa však chcelo prepisovať existujúce IaC s viac ako tisíckou resourcov, len kvôli tomu, že ho to zaujíma :smiley: Takže vlastného reálneho porovnania sa asi nedočkám.

Mne ukecanost az tak nevadi, aj s tym JSONom by som vedel zit, keby bol k tomu lepsi tooling (intellisense), ale najviac mi vadilo, ze som to nevedel rozumne rozbit na viacero JSON suborov. Mohol som len pouzivat externe JSON subory verejne pristupne cez HTTP, cize som ich napr musel zakazdym commitovat cez github, predtym ako som ich chcel vyskusat.

BTW, Terraform interne tiez pouziva ARM templaty, alebo si to vytvara tie resources cez nejaky CLI, alebo rest api?

Terraform (respektíve AZURE Provider v Terraforme) to robí podľa toho čo je dostupné. Ty pracuješ s ich definiciou daného resource a ona využíva pre jeho managovanie to čo je k dispozícií. Väčšinou je to REST API. Môj odhad je, že vyše 90% resourcov čo máme vytvára a managuje cez REST API, zvyšok sú určité špecifické veci súvisiace hlavne s konfiguráciou, ktoré robíme cez AZURE CLI (tiež priamo v Terraform definíciach). Pokiaľ je nejaký resource, ktorý nejakou náhodou nie je ešte v Terraforme úplne podporený tak máš možnosť to definovať aj ARM šablónou (taktiež priamo cez Terraform).

Najväčšia výhoda Terraformu je jeho managovanie stavu. Zisťovanie rozdielov, aktualizácia, … A za mňa jednoduchosť a prehľadnosť toho jazyka (v tomto prípade mi sedí deklaratívny prístup).


My pomocou Terraformu, nielenže vytvoríme infraštruktúru, ale ju aj celú nakonfigurujeme. Čiže všetky secrets, connections strings, … idú do KeyVault-u a App Configuration. Služby, ktoré sa potom nasadzujú už majú všetko prichystané. Toto sa nám pomocou ARM šablón nedarilo spraviť. Teraz s podporou TypeScript-u to je možno už lepšie, neviem.

Pozor, nieje to TypeScript! Je to uplne novy deklarativny jazyk, ktory sa kompiluje do ARM.

1 Like

Mna tiez laka Pulmi, ale este som nemal tu moznost. C# (aj JSON) je pre mna na citanie/pisanie lepsi ako YAML.

No rad by som nasiel aj rozumnu alternativu na manazment on premise masin, tiez najlepsie v C# (jestvuje Ansible, ale ten nezvlada Windows Server a je to Python, jestvuje Powershell DSC, ale v tom sa mi este nepodarilo nic spravit).

O akom YAML teraz hovoris?

O akom YAML teraz hovoris?

Myslel som, ze Terraform pouziva YAML ako defualtny format, ale nie je to pravda.

@liero, diki za podnet.
Rozhodli sme sa to u nás bližšie preskúmať a zapáčilo sa nám to :slight_smile: vyzerá, že na nové veci už budeme použivať Bicep a možno niekedy zmigrujeme aj staršie veci z Terraformu.

Ak niekoho zaujíma, tak kolega spravill do môjho príkladu na Terraform porovnanie s Bicep-om.

Burgyn/Sample.Terraform: Infrastructure as Code with Terrafomu (github.com)

1 Like

To je super, ze ste sa na to blizsie pozreli. Presne v to som dufal, predtym ako to budem potrebovat ja. Keep us posted :smiley:

1 Like