Wprowadzenie
Na tym blogu, pojawiały się już wpisy na temat Terraforma, ale jeszcze nie mieliśmy okazji porozmawiać o Azure Bicep. Czyli rozwiązaniu, które ma zastąpić ARMy oraz konkurować ze wspomnianym już Terraformem. Dzisiaj spojrzymy na możliwości tworzenia modułów oraz odwoływania się do nich w Bicep’ie. Jeżeli temat cię interesuje to zapinamy pasy, siadamy głęboko w fotelach i startujemy.
Azure Bicep
Zacznijmy od tego czym w ogóle jest główny temat naszego wpisu. Azure Bicep jest językiem pozwalającym na deklaratywne tworzenie zasobów w Azure za pomocą kodu. W pliku w standardzie Bicep, opisujemy infrastrukturę, która powinna zostać stworzona w Azure, a następnie możemy taki plik zintegrować z cyklem życia aplikacji, aby w sposób w pełni zautomatyzowany tworzyć wymaganą infrastrukturę. W tle, wdrożenie pliku .bicep wymaga przetłumaczenia go na dobrze już nam znaną ARM template(JSON), a następnie wykorzystanie tego ARM’a do stworzenia infrastruktury. Zmienia się tak naprawdę syntax, który w ARM’ie nie był najprzyjemniejszą sprawą, w przypadku Bicep’a dostajemy naprawdę przyjemny produkt, który pozwala tworzyć przejrzyste wzory wdrożeń. W tym przypadku przypomina on bardzo Terraforma i osoby, które pracowały z Terraformem będą miały dużo łatwiej, aby przesiąść się na Bicep’a niż ARM’a.
Moduły w Azure Bicep
Moduły są ważnym aspektem podczas tworzenia infrastruktury z poziomu kodu, po pierwsze zwiększają czytelność kodu, a po drugie pozwalają na tworzenie kawałków kodu, które będą ponownie wykorzystywane w organizacji czy projekcie. Dodatkowo dzięki podejściu modułowym możemy zapewnić, że takie wdrożenie będzie zgodne z naszymi zasadami bezpieczeństwa czy standardami z zakresu nazewnictwa, rozmiaru zasobów i tym podobne. W przypadku ARM Template mieliśmy możliwość wykorzystania „nested templates” które były swego rodzaju modułami, a w przypadku Terraform’a mamy pełnoprawne moduły. Azure Bicep nie pozostaje tutaj bierny i również wprowadza możliwość tworzenia oraz wykorzystywania modułów.
Jak pracować z modułami
Moduły tworzymy w taki sam sposób jak najzwyklejszy plik .Bicep, jedyna różnica, że powinniśmy już tutaj mieć z tyłu głowy, że moduł najprawdopodobniej będzie wykorzystywany wielokrotnie więc jego struktura powinna to odzwierciedlać, oraz pozwalać na modyfikację koniecznych właściwości wdrożenia. Przykładowy kod modułu możemy znaleźć poniżej:
//PARAMETERS@description(’Lokacja w której ma znaleźć się resource group’a’)param Location string@description(’Nazwa Resource Group’y’)param ResourceGroupName string// SCOPEtargetScope = 'subscription’// RESOURCESresource ResourceGroup 'Microsoft.Resources/resourceGroups@2021-04-01′ = {location: Locationname: ResourceGroupName}
// OUTPUTS
output ResourceGroupId string = ResourceGroup.id
Demo – Azure Container Registry
W dzisiejszym wpisie zajmiemy się rejestrem prywatnym utrzymanym w usłudze Azure Container Registry.
- Zaczynamy od stworzenia takiego modułu, my wykorzystamy ten, który omówiliśmy we wcześniejszej części wpisu.
- Tworzymy główny plik .Bicep, który wywoła nasz moduł (obecnie, dzieje się to lokalnie).
3. Przetestujmy działanie naszego modułu oraz głównego pliku. Uruchamiamy deployment korzystając z komendy „az deployment sub create –location westeurope –template-file main.bicep –parameters main.param.json”. Po paru chwilach możemy zobaczyć w portalu, że nasze wdrożenie zostało wykonane poprawnie.
4. Teraz zajmijmy się naszym rejestrem. Aby zacząć, musimy stworzyć w Azure zasób Azure Container Registry.
5. Gdy już mamy nasz zasób, będziemy potrzebować odnośnik, który jest powiązany z tym zasobem. Możemy go zlokalizować wyszukując zasób w Azure, w naszym przypadku będzie to: bicepregistrymp.azurecr.io
6. Teraz należy opublikować nasz moduł, robimy to za pomocą komendy „az bicep publish –file example.bicep –target br:exampleregistry.azurecr.io/bicep/modules/name:<tag>”. W naszym przypadku komenda prezentuje się następująco „az bicep publish –file modules/RG.bicep –target br:bicepregistrymp.azurecr.io/bicep/modules/resourcegroup:stable”
7. W momencie, gdy moduł zostanie opublikowany, możemy potwierdzić z poziomu portalu czy faktycznie jest widoczny. Znajdziemy taką informację wchodząc w nasz zasób, a następnie wybierając zakładkę repositories.
8. Pozostaje nam już tylko odwołać się do naszego modułu oraz przetestować działanie. Odwołujemy się za pomocą poniższej struktury:
module name 'br:<registry-name>.azurecr.io/bicep/modules/resourcegroup:stable’
Czy w bicepach jest coś na zasadzie tfstate z Terraforma?
Nie ma 🙂