Seskupení souvisejících prostředků pomocí modulů

Dokončeno

Začali jste používat šablony Bicep pro některé nedávné starty produktů a byly úspěšné. Vzhledem k tomu, že jste prostředky deklarovali v souboru šablony, můžete prostředky rychle nasadit pro nové spuštění toy bez nutnosti ruční konfigurace prostředků na webu Azure Portal.

Správce IT může vidět, že váš kód Bicep je složitější a má definovaný rostoucí počet prostředků, takže se zeptal, jestli můžete kód zvýšit modularizovat. Pro různé části nasazení můžete vytvořit jednotlivé soubory Bicep označované jako moduly. Na tyto moduly může odkazovat hlavní šablona Bicep. Moduly se na pozadí překládají do jedné šablony JSON pro nasazení.

Moduly představují také způsob, jak kód Bicep ještě více opakovaně použít. Můžete mít jeden modul Bicep, který používá mnoho dalších šablon Bicep.

Často budete také muset generovat výstupy z modulů a šablon Bicep. Výstupy představují způsob, jak kód Bicep odesílat data zpět komukoli nebo komukoli, kdo nasazení spustil. Nejprve se podíváme na výstupy.

Poznámka:

Příkazy v této lekci jsou znázorněny pro ilustraci konceptů. Zatím nespouštět příkazy. Brzy si procvičíte, co se tady naučíte.

Výstupy

Člověk může šablony Bicep nasadit ručně nebo je může nasadit nějaký druh automatizovaného procesu vydávání. V obou směrech je běžné mít nějaká data ze šablony, kterou potřebujete odeslat zpět komukoli nebo komukoliv, kdo provádí nasazení šablony.

Tady je několik ukázkových scénářů, ve kterých můžete potřebovat získat informace z nasazení šablony:

  • Vytvoříte šablonu Bicep, která nasadí virtuální počítač, a potřebujete získat veřejnou IP adresu, abyste do počítače mohli připojit SSH.
  • Vytvoříte šablonu Bicep, která přijímá sadu parametrů, jako je název prostředí a název aplikace. Šablona používá výraz k pojmenování aplikace Aplikace Azure Service, kterou nasadí. Musíte vytvořit výstup názvu aplikace, který šablona nasadila, abyste ji mohli použít v rámci kanálu nasazení k publikování binárních souborů aplikace.

Pro tyto scénáře můžete použít výstupy. Pokud chcete definovat výstup v šabloně Bicep, použijte output klíčové slovo takto:

output appServiceAppName string = appServiceAppName

Definice výstupu obsahuje několik klíčových částí:

  • Klíčové output slovo říká Bicep, že definujete výstup.
  • appServiceAppName je název výstupu. Když někdo úspěšně nasadí šablonu, budou výstupní hodnoty obsahovat zadaný název, aby mohl získat přístup k očekávaným hodnotám.
  • string je výstupní typ. Výstupy Bicep podporují stejné typy jako parametry.
  • Pro každý výstup musí být zadána hodnota. Na rozdíl od parametrů musí výstupy vždy obsahovat hodnoty. Výstupní hodnoty můžou být výrazy, odkazy na parametry nebo proměnné nebo vlastnosti prostředků nasazených v souboru.

Tip

Výstupy můžou používat stejné názvy jako proměnné a parametry. Tato konvence může být užitečná, pokud vytvoříte složitý výraz v rámci proměnné, který se použije v rámci prostředků šablony, a potřebujete také vystavit hodnotu proměnné jako výstup.

Tady je další příklad výstupu. Tato hodnota bude mít nastavenou plně kvalifikovaný název domény (FQDN) prostředku veřejné IP adresy.

output ipFqdn string = publicIPAddress.properties.dnsSettings.fqdn

Tip

Zkuste použít vlastnosti prostředků jako výstupy a nemyslet, jak se budou prostředky chovat. Pokud například potřebujete mít výstup pro adresu URL aplikace služby App Service, použijte vlastnost aplikace defaultHostName místo vytvoření řetězce pro adresu URL sami. Někdy tyto předpoklady nejsou platné v různých prostředích nebo způsob, jakým prostředek funguje, takže je bezpečnější mít prostředek, aby vám řekl vlastní vlastnosti.

Upozornění

Nevytvávejte výstupy pro tajné hodnoty, jako jsou připojovací řetězec nebo klíče. Každý, kdo má přístup k vaší skupině prostředků, může číst výstupy ze šablon. Existují další přístupy, které můžete použít k získání přístupu k vlastnostem tajných prostředků, které probereme v pozdějším modulu.

Definování modulu

Moduly Bicep umožňují uspořádat a opakovaně používat kód Bicep vytvořením menších jednotek, které se dají skládat do šablony. Libovolnou šablonu Bicep můžete použít jako modul jiné šablony. V tomto výukovém modulu jste vytvořili šablony Bicep. To znamená, že jste už vytvořili soubory, které je možné použít jako moduly Bicep!

Představte si, že máte šablonu Bicep, která nasazuje aplikační, databázové a síťové prostředky pro řešení A. Tuto šablonu můžete rozdělit na tři moduly, z nichž každá se zaměřuje na vlastní sadu prostředků. Jako bonus můžete nyní znovu použít moduly v jiných šablonách i pro jiná řešení; takže při vývoji šablony pro řešení B, která má podobné síťové požadavky jako řešení A, můžete znovu použít síťový modul.

Diagram znázorňující šablonu pro řešení A odkazující na tři moduly: aplikace, databáze a sítě Síťový modul se pak znovu použije v jiné šabloně řešení B.

Pokud chcete, aby šablona obsahovala odkaz na soubor modulu, použijte module klíčové slovo. Definice modulu vypadá podobně jako deklarace prostředků, ale místo zahrnutí typu prostředku a verze rozhraní API použijete název souboru modulu:

module myModule 'modules/mymodule.bicep' = {
  name: 'MyModule'
  params: {
    location: location
  }
}

Pojďme se podrobněji podívat na některé klíčové části této definice modulu:

  • Klíčové module slovo říká Bicep, že se chystáte použít jiný soubor Bicep jako modul.
  • Stejně jako prostředky potřebují moduly symbolický název , jako myModuleje . Symbolický název použijete při odkazování na výstupy modulu v jiných částech šablony.
  • modules/mymodule.bicep je cesta k souboru modulu vzhledem k souboru šablony. Nezapomeňte, že soubor modulu je jen běžný soubor Bicep.
  • Stejně jako prostředky name je vlastnost povinná. Azure používá název modulu, protože pro každý modul v souboru šablony vytvoří samostatné nasazení. Tato nasazení mají názvy, které můžete použít k jejich identifikaci.
  • Pomocí klíčového params slova můžete zadat libovolné parametry modulu. Když nastavíte hodnoty jednotlivých parametrů v šabloně, můžete použít výrazy, parametry šablony, proměnné, vlastnosti prostředků nasazených v šabloně a výstupy z jiných modulů. Bicep automaticky pochopí závislosti mezi prostředky.

Moduly a výstupy

Stejně jako šablony můžou moduly Bicep definovat výstupy. V rámci šablony je běžné zřetězovat moduly. V takovém případě může výstup z jednoho modulu být parametrem pro jiný modul. Pomocí modulů a výstupů můžete společně vytvářet výkonné a opakovaně použitelné soubory Bicep.

Návrh modulů

Dobrý modul Bicep se řídí některými klíčovými principy:

  • Modul by měl mít jasný účel. Pomocí modulů můžete definovat všechny prostředky související s konkrétní částí vašeho řešení. Můžete například vytvořit modul, který obsahuje všechny prostředky používané k monitorování aplikace. Modul můžete také použít k definování sady prostředků, které patří dohromady, jako jsou všechny databázové servery a databáze.

  • Nevkládejte každý prostředek do vlastního modulu. Pro každý nasazený prostředek byste neměli vytvářet samostatný modul. Pokud máte prostředek, který má mnoho složitých vlastností, může být vhodné tento prostředek umístit do vlastního modulu, ale obecně je lepší, aby moduly zkombinovaly více prostředků.

  • Modul by měl mít jasné parametry a výstupy, které mají smysl. Zvažte účel modulu. Zamyslete se nad tím, jestli má modul manipulovat s hodnotami parametrů, nebo jestli má nadřazená šablona zpracovat, a pak modulu předat jednu hodnotu. Podobně se zamyslete nad výstupy, které by modul měl vrátit, a ujistěte se, že jsou užitečné pro šablony, které budou modul používat.

  • Modul by měl být co nejvíce samostatný. Pokud modul potřebuje použít proměnnou k definování části modulu, měla by být proměnná obecně zahrnuta do souboru modulu, nikoli v nadřazené šabloně.

  • Modul by neměl vypouštět tajné kódy. Stejně jako šablony nevytvávejte výstupy modulu pro tajné hodnoty, jako jsou připojovací řetězec nebo klíče.