Ověřování nasazení do služby Azure App Service

Dokončeno

K dokončení cvičení v tomto modulu jste byli přihlášení k prostředí sandboxu. Vzhledem k tomu, že je toto prostředí interaktivní, jsou všechna vaše nasazení ověřena pomocí přihlašovacích údajů, které jste použili při inicializaci sandboxu. Pokud ale automatizujete proces sestavení, vaše nasazení toto interaktivní prostředí nebudou používat. Ve scénáři automatizace budete muset projekt nakonfigurovat tak, aby používal jednu z podporovaných metod ověřování.

V této lekci se dozvíte, jak může vaše společnost nakonfigurovat Maven tak, aby používala ověřování Azure.

Ověřování webové aplikace

Azure nabízí flexibilitu při rozhodování, jak chcete aplikaci ověřit. Možnost, kterou zvolíte, závisí na prostředí sestavení vaší společnosti. Tady jsou uvedené tři možnosti ověření kódu aplikace pomocí Mavenu v pořadí složitosti (od nejmenšího po většinu):

  • Ověřte se pomocí Azure CLI nebo použijte Cloud Shell na webu Azure Portal.

  • Vytvořte instanční objekt Azure, vytvořte soubor JSON s přihlašovacími údaji instančního objektu a upravte soubor pom.xml projektu.

  • Vytvořte instanční objekt Azure, přidejte přihlašovací údaje instančního objektu do souboru settings.xml Mavenu a upravte soubor pom.xml projektu tak, aby používal nastavení Mavenu.

Společnost Microsoft doporučuje třetí možnost, protože poskytuje nejspolehlivější, flexibilní a konzistentní přístup k ověřování. V reálném prostředí můžou stávající webové aplikace Java vaší společnosti běžet na místních serverech, které nemají nainstalované nástroje Azure CLI. S ohledem na to byste pravděpodobně implementovali doporučení přidat ověřování pomocí instančního objektu a souboru settings.xml Mavenu. V tomto cvičení však sandbox nemá dostatečná oprávnění k vytváření service principal.

Ověřování pomocí Azure CLI

Nejjednodušší způsob, jak ověřit Maven, je přihlásit se pomocí Azure CLI. Modul plug-in Maven pro Azure App Service pak může aplikaci nasadit pomocí vašich přihlašovacích údajů bez nutnosti další konfigurace.

Pokud používáte Azure Cloud Shell, jako jste byli při provádění cvičení s sandboxem Microsoft Learn v tomto modulu, jste ve výchozím nastavení přihlášeni k Azure; Nemusíte spouštět žádné další příkazy. Pokud ale používáte Azure CLI z samostatného počítače, budete se muset přihlásit pomocí příkazu az login.

Ověřování pomocí služebního principálu

Druhá metoda ověřování webové aplikace zahrnuje vytvoření instančního objektu Azure a uložení přihlašovacích údajů instančního objektu do souboru, na který budete odkazovat z nastavení projektu.

K vytvoření instančního objektu Azure pomocí Azure CLI použijte následující postup.

  1. Spuštěním následujícího příkazu z Azure CLI vytvořte instanční objekt Azure:

    az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
    

    Kde https://mywebapp-1234567890.azurewebsites.net/ je adresa URL vaší webové aplikace.

    Tento příkaz vrátí odpověď s objektem JSON, který se podobá následujícímu příkladu:

    Creating 'Contributor' role assignment under scope '/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss'
    The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
    
    {
      "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
      "displayName": "mywebapp-1234567890.azurewebsites.net/",
      "name": "https://mywebapp-1234567890.azurewebsites.net/",
      "password": "...",
      "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
    }
    
  2. Upravte soubor pom.xml webové aplikace tak, aby používal informace ve výstupu JSON.

    1. Otevřete soubor pom.xml pomocí editoru kódu:

      cd ~/MyWebApp
      code pom.xml
      
    2. Vyhledejte oddíl <configuration> pro azure-webapp-maven-plugin.

    3. Za řádek obsahující prvek <region> přidejte následující kód XML a použijte informace ve výstupu JSON:

      <auth>
          <type>service_principal</type>
          <client>value-of-appId</client>
          <tenant>value-of-tenant</tenant>
          <key>value-of-password</key>
          <environment>azure</environment>
      </auth>
      

      Oddíl azure-webapp-maven-plugin by nyní měl vypadat podobně jako v následujícím příkladu:

      <plugin>
          <groupId>com.microsoft.azure</groupId>
          <artifactId>azure-webapp-maven-plugin</artifactId>
          <version>2.13.0</version>
          <configuration>
              <schemaVersion>v2</schemaVersion>
              <resourceGroup>MyWebApp-1714654093047-rg</resourceGroup>
              <appName>MyWebApp-1714654093047</appName>
              <pricingTier>S1</pricingTier>
              <region>centralus</region>
              <auth>
                  <type>service_principal</type>
                  <client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client>
                  <tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant>
                  <key>abcdefghijklmnopqrstuvwxyz1234567890</key>
                  <environment>azure</environment>
              </auth>
              <runtime>
                  <os>Linux</os>
                  <javaVersion>Java 17</javaVersion>
                  <webContainer>Tomcat 10.0</webContainer>
              </runtime>
              <deployment>
                  <resources>
                      <resource>
                          <directory>${project.basedir}/target</directory>
                          <includes>
                              <include>*.war</include>
                          </includes>
                      </resource>
                  </resources>
              </deployment>
          </configuration>
      </plugin>
      
      
    4. Uložte změny zadáním Ctrl+S.

    5. Ukončete editor kódu zadáním Ctrl+Q.

  3. Pomocí Mavenu sestavte a nasaďte webovou aplikaci do Azure App Service:

    mvn azure-webapp:deploy
    

    Maven zobrazí řadu zpráv sestavení a konečná zpráva by měla indikovat úspěšné nasazení do Azure:

    [INFO] Scanning for projects...
    [INFO] 
    [INFO] -------------------< com.microsoft.example:MyWebApp >-------------------
    [INFO] Building MyWebApp Maven Webapp 1.0-SNAPSHOT
    [INFO] --------------------------------[ war ]---------------------------------
    [INFO] 
    [INFO] --- azure-webapp-maven-plugin:2.13.0:deploy (default-cli) @ MyWebApp ---
    [INFO] Auth type: SERVICE_PRINCIPAL
    [INFO] Username: 74d82376-184f-400e-a08e-27cd522d7559
    [INFO] There is only one subscription '...' in your account, will use it automatically.
    [INFO] Subscription: ...
    [INFO] Failed to get version of your artifact, skip artifact compatibility test
    [INFO] Trying to deploy external resources to MyWebApp-1714654093047...
    [INFO] Successfully deployed the resources to MyWebApp-1714654093047
    [INFO] Trying to deploy artifact to MyWebApp-1714654093047...
    [INFO] Deploying (/home/cephas/MyWebApp/target/MyWebApp.war)[war]  ...
    [INFO] Application url: https://mywebapp-1714654093047.azurewebsites.net                            
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  47.052 s
    [INFO] Finished at: 2024-05-02T13:10:54Z
    [INFO] ------------------------------------------------------------------------
    

    Řádek Auth type: SERVICE_PRINCIPAL v odpovědi označuje, že se služební principal použil k publikování vaší webové aplikace do Azure.

Ověřování pomocí souboru Mavenu settings.xml

Třetí metodou ověřování webové aplikace je vytvoření instančního objektu Azure, vytvoření souboru settings.xml Mavenu, který obsahuje přihlašovací údaje instančního objektu, a úpravou souboru pom.xml projektu tak, aby používal nastavení Mavenu.

Postup vytvoření instančního objektu Azure pomocí Azure CLI je stejný jako v předchozí části této lekce.

  1. Spuštěním následujícího příkazu z Azure CLI vytvořte instanční objekt Azure:

    az ad sp create-for-rbac --name https://mywebapp-1234567890.azurewebsites.net/ --role Contributor --scopes /subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss
    

    Kde https://mywebapp-1234567890.azurewebsites.net/ je adresa URL vaší webové aplikace.

    Tento příkaz vrátí odpověď s objektem JSON, který se podobá následujícímu příkladu:

    Creating 'Contributor' role assignment under scope '/subscriptions/ssssssss-ssss-ssss-ssss-ssssssssssss'
    The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli
    
    {
      "appId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
      "displayName": "mywebapp-1234567890.azurewebsites.net/",
      "name": "https://mywebapp-1234567890.azurewebsites.net/",
      "password": "...",
      "tenant": "tttttttt-tttt-tttt-tttt-tttttttttttt"
    }
    
  2. Vytvořte uživatelskou verzi souboru settings.xml, který má Maven používat.

    1. Vytvořte nový soubor XML pro nastavení Mavenu pomocí editoru kódu:

      code ~/.m2/settings.xml
      
    2. Do souboru vložte následující kód XML:

      <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        <servers>
          <server>
             <id>azure-auth</id>
             <configuration>
                 <client>aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa</client>
                 <tenant>tttttttt-tttt-tttt-tttt-tttttttttttt</tenant>
                 <key>pppppppp-pppp-pppp-pppp-pppppppppppp</key>
             </configuration>
          </server>
        </servers>
      </settings>
      

      Kde:

      Parametr Popis
      client Určuje hodnotu appId hlavního objektu služby.
      key Určuje hodnotu password služebního hlavního objektu.
      tenant Určuje hodnotu tenant instančního objektu.
    3. Uložte změny zadáním Ctrl+S.

    4. Ukončete editor kódu zadáním Ctrl+Q.

  3. Upravte soubor pom.xml webové aplikace tak, aby odkazoval na soubor autentizace.

    1. Otevřete soubor pom.xml pomocí editoru kódu:

      cd ~/MyWebApp
      code pom.xml
      
    2. Vyhledejte oddíl <configuration> pro azure-webapp-maven-plugin.

    3. Za řádek obsahující prvek <region> přidejte následující kód XML:

      <auth>
        <type>service_principal</type>
        <serverId>azure-auth</serverId>
      </auth>
      

      Oddíl azure-webapp-maven-plugin by teď měl vypadat podobně jako v následujícím příkladu:

      <plugin> 
        <groupId>com.microsoft.azure</groupId>  
        <artifactId>azure-webapp-maven-plugin</artifactId>  
        <version>2.13.0</version>  
        <configuration> 
          <schemaVersion>V2</schemaVersion>  
          <resourceGroup>maven-publish</resourceGroup>  
          <appName>MyWebApp-1234567890</appName>  
          <pricingTier>S1</pricingTier>  
          <region>centralus</region>
          <auth>
            <type>service_principal</type>
            <serverId>azure-auth</serverId>
          </auth>
          <runtime>
              <os>Linux</os>
              <javaVersion>Java 17</javaVersion>
              <webContainer>Tomcat 10.0</webContainer>
          </runtime>
          <deployment> 
            <resources> 
              <resource> 
                <directory>${project.basedir}/target</directory>  
                <includes> 
                  <include>*.war</include> 
                </includes> 
              </resource> 
            </resources> 
          </deployment> 
        </configuration> 
      </plugin> 
      
    4. Uložte změny zadáním Ctrl+S.

    5. Ukončete editor kódu zadáním Ctrl+Q.

  4. Pomocí Mavenu sestavte a nasaďte webovou aplikaci do Azure App Service:

    mvn azure-webapp:deploy
    

    Maven zobrazí řadu zpráv sestavení a konečná zpráva by měla indikovat úspěšné nasazení do Azure:

    [INFO] -------------------< com.microsoft.example:MyWebApp >-------------------
    [INFO] Building MyWebApp Maven Webapp 1.0-SNAPSHOT
    [INFO] --------------------------------[ war ]---------------------------------
    [INFO] 
    [INFO] --- azure-webapp-maven-plugin:2.13.0:deploy (default-cli) @ MyWebApp ---
    [INFO] Auth type: SERVICE_PRINCIPAL
    [INFO] Username: aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
    [INFO] There is only one subscription '...' in your account, will use it automatically.
    [INFO] Subscription: ...
    [INFO] Failed to get version of your artifact, skip artifact compatibility test
    [INFO] Trying to deploy external resources to MyWebApp-1714654093047...
    [INFO] Successfully deployed the resources to MyWebApp-1714654093047
    [INFO] Trying to deploy artifact to MyWebApp-1714654093047...
    [INFO] Deploying (/home/cephas/MyWebApp/target/MyWebApp.war)[war]  ...
    [INFO] Application url: https://mywebapp-1714654093047.azurewebsites.net                            
    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time:  53.611 s
    [INFO] Finished at: 2024-05-02T13:53:31Z
    [INFO] ------------------------------------------------------------------------
    

    Řádek Auth type: SERVICE_PRINCIPAL v odpovědi značí, že vaše přihlašovací údaje instančního objektu se použily k publikování vaší webové aplikace do Azure.