Samouczek: tworzenie aplikacji internetowej Tomcat przy użyciu usługi aplikacja systemu Azure w systemach Linux i MySQL
W tym samouczku pokazano, jak utworzyć, skonfigurować i wdrożyć bezpieczną aplikację Tomcat w usłudze aplikacja systemu Azure Service, która łączy się z bazą danych MySQL (przy użyciu usługi Azure Database for MySQL). aplikacja systemu Azure Service to wysoce skalowalna, samoobsługowa usługa hostingu sieci Web, która może łatwo wdrażać aplikacje w systemie Windows lub Linux. Po zakończeniu masz aplikację Tomcat działającą w usłudze aplikacja systemu Azure w systemie Linux.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Utwórz domyślną architekturę dla usług aplikacja systemu Azure Service i Azure Database for MySQL.
- Zabezpieczanie wpisów tajnych połączenia przy użyciu tożsamości zarządzanej i odwołań usługi Key Vault.
- Wdróż przykładową aplikację Tomcat w usłudze App Service z repozytorium GitHub.
- Uzyskaj dostęp do ustawień aplikacji usługi App Service w kodzie aplikacji.
- Wprowadź aktualizacje i ponownie wdróż kod aplikacji.
- Przesyłanie strumieniowe dzienników diagnostycznych z usługi App Service.
- Zarządzanie aplikacją w witrynie Azure Portal.
- Aprowizuj tę samą architekturę i wdróż przy użyciu interfejsu wiersza polecenia dla deweloperów platformy Azure.
- Zoptymalizuj przepływ pracy programowania za pomocą usług GitHub Codespaces i GitHub Copilot.
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.
- Konto usługi GitHub. Możesz również uzyskać jeden za darmo.
- Znajomość języka Java z programowaniem usługi Tomcat.
- (Opcjonalnie) Aby wypróbować narzędzie GitHub Copilot, konto narzędzia GitHub Copilot. Dostępna jest 30-dniowa bezpłatna wersja próbna.
- Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz konta platformy Azure, możesz go utworzyć bezpłatnie.
- Zainstalowany interfejs wiersza polecenia dla deweloperów platformy Azure. Możesz wykonać kroki opisane w usłudze Azure Cloud Shell, ponieważ ma już zainstalowany interfejs wiersza polecenia dla deweloperów platformy Azure.
- Znajomość języka Java z programowaniem usługi Tomcat.
- (Opcjonalnie) Aby wypróbować narzędzie GitHub Copilot, konto narzędzia GitHub Copilot. Dostępna jest 30-dniowa bezpłatna wersja próbna.
Przejdź do końca
Przykładową aplikację można szybko wdrożyć w tym samouczku i zobaczyć, jak działa na platformie Azure. Uruchom następujące polecenia w usłudze Azure Cloud Shell i postępuj zgodnie z monitem:
mkdir msdocs-tomcat-mysql-sample-app
cd msdocs-tomcat-mysql-sample-app
azd init --template msdocs-tomcat-mysql-sample-app
azd up
1. Uruchamianie przykładu
Najpierw należy skonfigurować przykładową aplikację opartą na danych jako punkt wyjścia. Dla wygody przykładowe repozytorium zawiera konfigurację kontenera deweloperskiego . Kontener deweloperski ma wszystko, czego potrzebujesz, aby opracować aplikację, w tym bazę danych, pamięć podręczną i wszystkie zmienne środowiskowe wymagane przez przykładową aplikację. Kontener deweloperski może działać w usłudze GitHub codespace, co oznacza, że można uruchomić przykład na dowolnym komputerze z przeglądarką internetową.
Krok 1. W nowym oknie przeglądarki:
- Zaloguj się na istniejącym koncie GitHub.
- Przejdź do https://github.com/Azure-Samples/msdocs-tomcat-mysql-sample-app/fork.
- Usuń zaznaczenie pola Kopiuj tylko gałąź główną. Chcesz, aby wszystkie gałęzie.
- Wybierz pozycję Utwórz rozwidlenie.
Krok 2. W rozwidleniu usługi GitHub:
- Wybierz opcję main>starter-no-infra dla gałęzi początkowej. Ta gałąź zawiera tylko przykładowy projekt i brak plików ani konfiguracji związanych z platformą Azure.
- Wybierz pozycję Code>Create codespace on starter-no-infra (Utwórz przestrzeń kodu w infrastrukturze starter-no-infra). Skonfigurowanie przestrzeni kodu zajmuje kilka minut.
Krok 3. W terminalu usługi Codespace:
- Uruchom program
mvn jetty:run
. - Po wyświetleniu powiadomienia
Your application running on port 80 is available.
wybierz pozycję Otwórz w przeglądarce. Przykładowa aplikacja powinna być widoczna na nowej karcie przeglądarki. Aby zatrzymać serwer Jetty, wpiszCtrl
+C
.
Napiwek
Możesz zapytać narzędzie GitHub Copilot o to repozytorium. Na przykład:
- @workspace Co robi ten projekt?
- @workspace Co robi folder devcontainer?
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
2. Tworzenie usług App Service i MySQL
Najpierw należy utworzyć zasoby platformy Azure. Kroki używane w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługi App Service i usługę Azure Database for MySQL. W przypadku procesu tworzenia należy określić:
- Nazwa aplikacji internetowej. Jest ona używana jako część nazwy DNS aplikacji w postaci
https://<app-name>-<hash>.<region>.azurewebsites.net
. - Region do fizycznego uruchamiania aplikacji na świecie. Jest ona również używana jako część nazwy DNS aplikacji.
- Stos środowiska uruchomieniowego dla aplikacji. W tym miejscu wybierasz wersję języka Java, która ma być używana dla aplikacji.
- Plan hostingu aplikacji. Jest to warstwa cenowa obejmująca zestaw funkcji i pojemność skalowania aplikacji.
- Grupa zasobów dla aplikacji. Grupa zasobów umożliwia grupowanie (w kontenerze logicznym) wszystkich zasobów platformy Azure potrzebnych dla aplikacji.
Zaloguj się do witryny Azure Portal i wykonaj następujące kroki, aby utworzyć zasoby usługi aplikacja systemu Azure.
Krok 1. W witrynie Azure Portal:
- Wprowadź ciąg "baza danych aplikacji internetowej" na pasku wyszukiwania w górnej części witryny Azure Portal.
- Wybierz element z etykietą Web App + Database w obszarze nagłówka Marketplace . Możesz również przejść bezpośrednio do kreatora tworzenia.
Krok 2. Na stronie Tworzenie aplikacji internetowej i bazy danych wypełnij formularz w następujący sposób.
- Grupa zasobów: wybierz pozycję Utwórz nową i użyj nazwy msdocs-tomcat-mysql-tutorial.
- Region: dowolny region świadczenia usługi Azure blisko Ciebie.
- Nazwa: msdocs-tomcat-mysql-XYZ, gdzie XYZ jest dowolnymi trzema losowymi znakami.
- Stos środowiska uruchomieniowego: Java 17.
- Stos serwera internetowego Java: Apache Tomcat 10.1.
- Aparat: MySQL — serwer elastyczny jest wybierany domyślnie jako aparat bazy danych. Jeśli nie, wybierz ją. Azure Database for MySQL — serwer elastyczny to w pełni zarządzana baza danych MySQL jako usługa na platformie Azure zgodna z najnowszymi wersjami społeczności.
- Plan hostingu: Podstawowy. Gdy wszystko będzie gotowe, możesz skalować w górę do warstwy cenowej produkcyjnej.
- Wybierz pozycję Przejrzyj i utwórz.
- Po zakończeniu walidacji wybierz pozycję Utwórz.
Krok 3. Ukończenie wdrożenia trwa kilka minut. Po zakończeniu wdrażania wybierz przycisk Przejdź do zasobu . Jesteś przekierowany bezpośrednio do aplikacji usługi App Service, ale tworzone są następujące zasoby:
- Grupa zasobów: kontener dla wszystkich utworzonych zasobów.
- Plan usługi App Service: definiuje zasoby obliczeniowe dla usługi App Service. Zostanie utworzony plan systemu Linux w warstwie Podstawowa.
- App Service: reprezentuje aplikację i działa w planie usługi App Service.
- Sieć wirtualna: zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
- Serwer elastyczny usługi Azure Database for MySQL: dostępny tylko z sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
- Prywatna strefa DNS strefy: włącz rozpoznawanie nazw DNS serwera bazy danych w sieci wirtualnej.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
3. Zabezpieczanie wpisów tajnych połączenia
Kreator tworzenia wygenerował parametry łączności bazy danych dla Ciebie już jako ustawienie aplikacji. Jednak najlepszym rozwiązaniem w zakresie zabezpieczeń jest całkowite przechowywanie wpisów tajnych z usługi App Service. Możesz przenieść wpisy tajne do magazynu kluczy i zmienić ustawienie aplikacji na odwołanie do usługi Key Vault za pomocą łączników usługi.
Krok 1. Pobieranie istniejącej parametry połączenia
- W menu po lewej stronie usługi App Service wybierz pozycję Ustawienia > Zmienne środowiskowe.
- Wybierz pozycję AZURE_MYSQL_CONNECTIONSTRING. Zawiera parametry połączenia JDBC. Jeśli dodasz ustawienie aplikacji zawierające prawidłowe źródło danych Oracle, SQL Server, PostgreSQL lub MySQL parametry połączenia, usługa App Service wprowadza je jako źródło danych Java Naming and Directory Interface (JNDI) w pliku context.xml serwera Tomcat.
- W ustawieniu Dodaj/Edytuj aplikację w polu Wartość znajdź hasło = część na końcu ciągu.
- Skopiuj ciąg hasła po polu Password= do późniejszego użycia. To ustawienie aplikacji umożliwia nawiązanie połączenia z bazą danych MySQL zabezpieczoną za prywatnym punktem końcowym. Wpis tajny jest jednak zapisywany bezpośrednio w aplikacji usługi App Service, co nie jest najlepsze. Zmienisz to.
Krok 2. Tworzenie magazynu kluczy na potrzeby bezpiecznego zarządzania wpisami tajnymi
- Na górnym pasku wyszukiwania wpisz "key vault", a następnie wybierz pozycję Marketplace>Key Vault.
- W obszarze Grupa zasobów wybierz pozycję msdocs-tomcat-mysql-tutorial.
- W polu Nazwa magazynu kluczy wpisz nazwę składającą się tylko z liter i cyfr.
- W obszarze Region ustaw tę samą lokalizację co grupa zasobów.
Krok 3. Zabezpieczanie magazynu kluczy przy użyciu prywatnego punktu końcowego
- Wybierz kartę Sieć.
- Usuń zaznaczenie pozycji Włącz dostęp publiczny.
- Wybierz pozycję Utwórz prywatny punkt końcowy.
- W obszarze Grupa zasobów wybierz pozycję msdocs-tomcat-mysql-tutorial.
- W polu Nazwa wpisz nazwę prywatnego punktu końcowego, który składa się tylko z liter i cyfr.
- W obszarze Region ustaw tę samą lokalizację co grupa zasobów.
- W oknie dialogowym w polu Lokalizacja wybierz tę samą lokalizację co aplikacja usługi App Service.
- W obszarze Grupa zasobów wybierz pozycję msdocs-tomcat-mysql-tutorial.
- W polu Nazwa wpisz msdocs-tomcat-mysql-XYZVaultEndpoint.
- W obszarze Sieć wirtualna wybierz pozycję msdocs-tomcat-mysql-XYZVnet.
- W podsieci msdocs-tomcat-mysql-XYZSubnet.
- Wybierz przycisk OK.
- Wybierz pozycję Przeglądanie i tworzenie, a następnie wybierz pozycję Utwórz. Poczekaj na zakończenie wdrożenia magazynu kluczy. Powinien zostać wyświetlony komunikat "Wdrożenie zostało ukończone".
Krok 4. Konfigurowanie łącznika usługi
- Na górnym pasku wyszukiwania wpisz msdocs-tomcat-mysql, a następnie zasób usługi App Service o nazwie msdocs-tomcat-mysql-XYZ.
- Na stronie App Service w menu po lewej stronie wybierz pozycję Ustawienia > Łącznik usługi. Istnieje już łącznik, który został utworzony przez kreatora tworzenia aplikacji.
- Zaznacz pole wyboru obok łącznika, a następnie wybierz pozycję Edytuj.
- Na karcie Podstawy ustaw wartość Typ klienta na Java.
- Wybierz kartę Uwierzytelnianie.
- W polu Hasło wklej skopiowane wcześniej hasło.
- Wybierz pozycję Zapisz wpis tajny w usłudze Key Vault.
- W obszarze Połączenie z usługą Key Vault wybierz pozycję Utwórz nową. Okno dialogowe Tworzenie połączenia jest otwierane w górnej części okna dialogowego edycji.
Krok 5. Ustanawianie połączenia usługi Key Vault
- W oknie dialogowym Tworzenie połączenia dla połączenia usługi Key Vault w usłudze Key Vault wybierz utworzony wcześniej magazyn kluczy.
- Wybierz pozycję Przejrzyj i utwórz. Powinna zostać wyświetlona opcja Wybrana tożsamość zarządzana przypisana przez system.
- Po zakończeniu walidacji wybierz pozycję Utwórz.
Krok 6. Finalizowanie konfiguracji łącznika usługi
- Wrócisz do okna dialogowego edycji domyślnegoŁącznika. Na karcie Uwierzytelnianie poczekaj na utworzenie łącznika magazynu kluczy. Po zakończeniu zostanie automatycznie wybrana lista rozwijana Połączenie usługi Key Vault.
- Wybierz pozycję Dalej: Sieć.
- Wybierz pozycję Zapisz. Zaczekaj na wyświetlenie powiadomienia Aktualizacja powiodła się .
Krok 7. Weryfikowanie integracji z usługą Key Vault
- W menu po lewej stronie ponownie wybierz pozycję Ustawienia > Zmienne środowiskowe .
- Obok pozycji AZURE_MYSQL_CONNECTIONSTRING wybierz pozycję Pokaż wartość. Wartość powinna mieć
@Microsoft.KeyVault(...)
wartość , co oznacza, że jest to odwołanie do magazynu kluczy, ponieważ wpis tajny jest teraz zarządzany w magazynie kluczy.
Podsumowując, proces pobierania parametry połączenia MySQL ze zmiennych środowiskowych usługi App Service, tworzenia usługi Azure Key Vault na potrzeby bezpiecznego zarządzania wpisami tajnymi przy użyciu dostępu prywatnego i aktualizowania łącznika usługi w celu przechowywania hasła w magazynie kluczy. Nawiązano bezpieczne połączenie między aplikacją usługi App Service i magazynem kluczy przy użyciu tożsamości zarządzanej przypisanej przez system, a konfiguracja została zweryfikowana przez potwierdzenie, że parametry połączenia używa odwołania do usługi Key Vault.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
4. Potwierdź źródło danych JNDI
Jeśli dodasz ustawienie aplikacji zawierające prawidłowe parametry połączenia JDBC dla baz danych Oracle, SQL Server, PostgreSQL lub MySQL, usługa App Service dodaje źródło danych Java Naming and Directory Interface (JNDI) dla niego w pliku context.xml serwera Tomcat. W tym kroku użyjesz połączenia SSH z kontenerem aplikacji, aby zweryfikować źródło danych JNDI. W tym procesie dowiesz się, jak uzyskać dostęp do powłoki SSH dla kontenera Tomcat.
Krok 1. Powrót na stronę usługi App Service:
- W menu po lewej stronie wybierz pozycję SSH.
- Wybierz pozycję Idź.
Krok 2. W terminalu SSH uruchom polecenie cat /usr/local/tomcat/conf/context.xml
. Powinien zostać wyświetlony dodany zasób JNDI o nazwie jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
. Tego źródła danych użyjesz później.
Uwaga
Tylko zmiany w plikach w /home
programie mogą być utrwalane poza ponownymi uruchomieniami aplikacji. Na przykład w przypadku edytowania /usr/local/tomcat/conf/server.xml
zmiany nie będą utrwalane poza ponownym uruchomieniem aplikacji.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
5. Wdrażanie przykładowego kodu
W tym kroku skonfigurujesz wdrożenie usługi GitHub przy użyciu funkcji GitHub Actions. Jest to tylko jeden z wielu sposobów wdrażania w usłudze App Service, ale także doskonały sposób ciągłej integracji w procesie wdrażania. Domyślnie każde git push
repozytorium GitHub rozpoczyna akcję kompilacji i wdrażania.
Podobnie jak w przypadku konwencji Tomcat, jeśli chcesz wdrożyć w kontekście głównym serwera Tomcat, nazwij skompilowany artefakt ROOT.war.
Krok 1. Po powrocie do strony usługi App Service w menu po lewej stronie wybierz pozycję Centrum wdrażania.
Krok 2. Na stronie Centrum wdrażania:
- W obszarze Źródło wybierz pozycję GitHub. Domyślnie funkcja GitHub Actions jest wybierana jako dostawca kompilacji.
- Zaloguj się do konta usługi GitHub i postępuj zgodnie z monitem, aby autoryzować platformę Azure.
- W obszarze Organizacja wybierz swoje konto.
- W obszarze Repozytorium wybierz pozycję msdocs-tomcat-mysql-sample-app.
- W obszarze Gałąź wybierz pozycję starter-no-infra. Jest to ta sama gałąź, w której pracowaliśmy z przykładową aplikacją bez żadnych plików ani konfiguracji związanych z platformą Azure.
- W polu Typ uwierzytelniania wybierz pozycję Tożsamość przypisana przez użytkownika.
- W górnym menu wybierz pozycję Zapisz. Usługa App Service zatwierdza plik przepływu pracy w wybranym repozytorium GitHub w
.github/workflows
katalogu. Domyślnie centrum wdrażania tworzy tożsamość przypisaną przez użytkownika dla przepływu pracy do uwierzytelniania przy użyciu uwierzytelniania Microsoft Entra (OIDC). Aby uzyskać informacje o opcjach uwierzytelniania alternatywnego, zobacz Wdrażanie w usłudze App Service przy użyciu funkcji GitHub Actions.
Krok 3. Po powrocie do przestrzeni kodu usługi GitHub przykładowego rozwidlenia uruchom polecenie git pull origin starter-no-infra
.
Spowoduje to ściągnięcie nowo zatwierdzonego pliku przepływu pracy do przestrzeni kodu.
Krok 4 (opcja 1: w usłudze GitHub Copilot):
- Rozpocznij nową sesję czatu, klikając widok Czat , a następnie klikając pozycję +.
- Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych?". Copilot może podać pewne wyjaśnienia dotyczące
jdbc/MYSQLDS
źródła danych i sposobu jego konfiguracji. - Zapytaj: "@workspace chcę zamienić źródło danych zdefiniowane w persistence.xml na istniejące źródło danych JNDI w usłudze Tomcat, ale chcę to zrobić dynamicznie. Copilot może dać sugestię dotyczącą kodu podobną do tej w opcji 2: bez poniższych kroków narzędzia GitHub Copilot , a nawet poinformuj Cię, aby wprowadzić zmianę w klasie ContextListener .
- Otwórz plik src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java w eksploratorze i dodaj sugestię kodu w metodzie
contextInitialized
. GitHub Copilot nie daje tej samej odpowiedzi za każdym razem, może być konieczne zadawanie większej liczby pytań, aby dostosować jego odpowiedź. Aby uzyskać porady, zobacz Co mogę zrobić z usługą GitHub Copilot w mojej przestrzeni kodu?.
Krok 4 (opcja 2: bez narzędzia GitHub Copilot):
- Otwórz plik src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java w eksploratorze. Po uruchomieniu aplikacji ta klasa ładuje ustawienia bazy danych w pliku src/main/resources/META-INF/persistence.xml.
- W metodzie
contextIntialized()
znajdź skomentowany kod (wiersze 29–33) i usuń komentarz. Ten kod sprawdza, czyAZURE_MYSQL_CONNECTIONSTRING
ustawienie aplikacji istnieje, i zmienia źródło danych najava:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
, czyli źródło danych znalezione wcześniej w context.xml w powłoce SSH.
Krok 5:
- Wybierz rozszerzenie Kontroli źródła.
- W polu tekstowym wpisz komunikat zatwierdzenia, taki jak
Configure Azure data source
. - Wybierz pozycję Zatwierdź, a następnie potwierdź wartość Tak.
- Wybierz pozycję Synchronizuj zmiany 1, a następnie potwierdź przy użyciu przycisku OK.
Krok 6. Powrót do strony Centrum wdrażania w witrynie Azure Portal:
- Wybierz pozycję Dzienniki. Nowe uruchomienie wdrożenia zostało już uruchomione z zatwierdzonych zmian.
- W elemencie dziennika dla przebiegu wdrożenia wybierz wpis Build/Deploy Logs (Wdróż dzienniki kompilacji/wdrażania) z najnowszym znacznikiem czasu.
Krok 7. Wykonano cię do repozytorium GitHub i zobaczysz, że akcja usługi GitHub jest uruchomiona. Plik przepływu pracy definiuje dwa oddzielne etapy, kompilowanie i wdrażanie. Poczekaj na uruchomienie usługi GitHub, aby wyświetlić stan Ukończono. Trwa to około 5 minut.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
6. Przejdź do aplikacji
Krok 1. Na stronie usługi App Service:
- W menu po lewej stronie wybierz pozycję Przegląd.
- Wybierz adres URL aplikacji.
Krok 2. Dodaj kilka zadań do listy. Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for MySQL.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
7. Przesyłanie strumieniowe dzienników diagnostycznych
usługa aplikacja systemu Azure przechwytuje wszystkie komunikaty wyjściowe do konsoli, aby ułatwić diagnozowanie problemów z aplikacją. Przykładowa aplikacja zawiera standardowe instrukcje rejestrowania log4j, aby zademonstrować tę funkcję, jak pokazano w poniższym fragmencie kodu:
@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("GET /");
EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");
Krok 1. Na stronie usługi App Service:
- W menu po lewej stronie wybierz pozycję Dzienniki usługi App Service.
- W obszarze Rejestrowanie aplikacji wybierz pozycję System plików.
- W górnym menu wybierz pozycję Zapisz.
Krok 2. W menu po lewej stronie wybierz pozycję Strumień dziennika. Zobaczysz dzienniki aplikacji, w tym dzienniki platformy i dzienniki z wewnątrz kontenera.
Dowiedz się więcej na temat rejestrowania w aplikacjach Java w serii włączanie usługi Azure Monitor OpenTelemetry dla platformy .NET, Node.js, python i aplikacji Java.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
8. Czyszczenie zasobów
Po zakończeniu możesz usunąć wszystkie zasoby z subskrypcji platformy Azure, usuwając grupę zasobów.
Krok 1. Na pasku wyszukiwania w górnej części witryny Azure Portal:
- Wpisz nazwę grupy zasobów.
- Wybierz odpowiednią grupę zasobów.
Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.
Krok 3:
- Potwierdź usunięcie, wpisując nazwę grupy zasobów.
- Wybierz Usuń.
- Potwierdź ponownie polecenie Usuń .
2. Tworzenie zasobów platformy Azure i wdrażanie przykładowej aplikacji
W tym kroku utworzysz zasoby platformy Azure i wdrożysz przykładową aplikację w celu App Service dla systemu Linux. Kroki używane w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługi App Service i usługę Azure Database for MySQL.
Kontener deweloperski ma już interfejs wiersza polecenia dla deweloperów platformy Azure (AZD).
W katalogu głównym repozytorium uruchom polecenie
azd init
.azd init --template tomcat-app-service-mysql-infra
Po wyświetleniu monitu podaj następujące odpowiedzi:
Pytanie Odpowiedź Bieżący katalog nie jest pusty. Czy chcesz zainicjować projekt tutaj w katalogu "<your-directory>"? Y Co chcesz zrobić z tymi plikami? Zachowaj istniejące pliki bez zmian Wprowadź nową nazwę środowiska Wpisz unikatową nazwę. Szablon AZD używa tej nazwy jako części nazwy DNS aplikacji internetowej na platformie Azure ( <app-name>-<hash>.azurewebsites.net
). Znaki alfanumeryczne i łączniki są dozwolone.Zaloguj się do platformy
azd auth login
Azure, uruchamiając polecenie i postępując zgodnie z wierszem polecenia:azd auth login
Utwórz niezbędne zasoby platformy Azure i wdróż kod aplikacji za
azd up
pomocą polecenia . Postępuj zgodnie z monitem, aby wybrać żądaną subskrypcję i lokalizację zasobów platformy Azure.azd up
Wykonanie
azd up
polecenia trwa około 15 minut (pamięć podręczna Redis cache zajmuje najwięcej czasu). Kompiluje również i wdraża kod aplikacji, ale kod można zmodyfikować później w celu pracy z usługą App Service. Gdy jest uruchomiona, polecenie udostępnia komunikaty dotyczące procesu aprowizacji i wdrażania, w tym link do wdrożenia na platformie Azure. Po zakończeniu polecenie wyświetli również link do aplikacji wdrażania.Ten szablon AZD zawiera pliki (azure.yaml i katalog infra ), które generują domyślną architekturę secure-by-default z następującymi zasobami platformy Azure:
- Grupa zasobów: kontener dla wszystkich utworzonych zasobów.
- Plan usługi App Service: definiuje zasoby obliczeniowe dla usługi App Service. Zostanie utworzony plan systemu Linux w warstwie B1 .
- App Service: reprezentuje aplikację i działa w planie usługi App Service.
- Sieć wirtualna: zintegrowana z aplikacją usługi App Service i izoluje ruch sieciowy zaplecza.
- Serwer elastyczny usługi Azure Database for MySQL: dostępny tylko z sieci wirtualnej za pośrednictwem integracji strefy DNS. Baza danych jest tworzona dla Ciebie na serwerze.
- Azure Cache for Redis: dostępne tylko z poziomu sieci wirtualnej.
- Prywatne punkty końcowe: dostęp do punktów końcowych magazynu kluczy i pamięci podręcznej Redis w sieci wirtualnej.
- Prywatna strefa DNS strefy: włącz rozpoznawanie nazw DNS magazynu kluczy, serwera bazy danych i pamięci podręcznej Redis w sieci wirtualnej.
- Obszar roboczy usługi Log Analytics: działa jako kontener docelowy aplikacji w celu wysłania dzienników, gdzie można również wykonywać zapytania dotyczące dzienników.
- Magazyn kluczy: służy do przechowywania hasła bazy danych tak samo podczas ponownego wdrażania za pomocą usługi AZD.
Po zakończeniu tworzenia zasobów i wdrażaniu kodu aplikacji po raz pierwszy wdrożona przykładowa aplikacja nie działa jeszcze, ponieważ musisz wprowadzić niewielkie zmiany, aby połączyć się z bazą danych na platformie Azure.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
3. Sprawdź parametry połączenia
Szablon AZD wygenerował zmienne łączności dla Ciebie już jako ustawienia aplikacji i wyprowadza je do terminalu dla wygody. Ustawienia aplikacji to jeden ze sposobów przechowywania wpisów tajnych połączenia z repozytorium kodu.
W danych wyjściowych usługi AZD znajdź ustawienie
AZURE_MYSQL_CONNECTIONSTRING
aplikacji . Wyświetlane są tylko nazwy ustawień. Wyglądają one następująco w danych wyjściowych usługi AZD:App Service app has the following connection strings: - AZURE_MYSQL_CONNECTIONSTRING - AZURE_REDIS_CONNECTIONSTRING - AZURE_KEYVAULT_RESOURCEENDPOINT - AZURE_KEYVAULT_SCOPE
AZURE_MYSQL_CONNECTIONSTRING
zawiera parametry połączenia do bazy danych MySQL na platformie Azure. Należy go użyć w kodzie później.Dla wygody szablon AZD wyświetla bezpośredni link do strony ustawień aplikacji. Znajdź link i otwórz go na nowej karcie przeglądarki.
Jeśli dodasz ustawienie aplikacji zawierające prawidłowe źródło danych Oracle, SQL Server, PostgreSQL lub MySQL parametry połączenia, usługa App Service doda je jako źródło danych Java Naming and Directory Interface (JNDI) w pliku context.xml serwera Tomcat.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
4. Potwierdź źródło danych JNDI
W tym kroku użyjesz połączenia SSH z kontenerem aplikacji, aby zweryfikować źródło danych JNDI na serwerze Tomcat. W tym procesie dowiesz się, jak uzyskać dostęp do powłoki SSH dla kontenera Tomcat.
W danych wyjściowych usługi AZD znajdź adres URL sesji SSH i przejdź do niego w przeglądarce. Wygląda na to w danych wyjściowych:
Open SSH session to App Service container at: https://<app-name>-<hash>.scm.azurewebsites.net/webssh/host
W terminalu SSH uruchom polecenie
cat /usr/local/tomcat/conf/context.xml
. Powinien zostać wyświetlony dodany zasób JNDI o nazwiejdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
. Tego źródła danych użyjesz później.
Uwaga
Tylko zmiany w plikach w /home
programie mogą być utrwalane poza ponownymi uruchomieniami aplikacji. Na przykład w przypadku edytowania /usr/local/tomcat/conf/server.xml
zmiany nie będą utrwalane poza ponownym uruchomieniem aplikacji.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
5. Modyfikowanie przykładowego kodu i ponowne wdrażanie
W usłudze GitHub Codespace rozpocznij nową sesję czatu, klikając widok Czat , a następnie klikając +pozycję .
Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych?". Copilot może podać pewne wyjaśnienia dotyczące
jdbc/MYSQLDS
źródła danych i sposobu jego konfiguracji.Zapytaj: "@workspace chcę zamienić źródło danych zdefiniowane w persistence.xml na istniejące źródło danych JNDI w usłudze Tomcat, ale chcę to zrobić dynamicznie". Copilot może dać sugestię dotyczącą kodu podobną do tej w opcji 2: bez poniższych kroków narzędzia GitHub Copilot , a nawet poinformuj Cię, aby wprowadzić zmianę w klasie ContextListener .
Otwórz plik src/main/java/com/microsoft/azure/appservice/examples/tomcatmysql/ContextListener.java w eksploratorze i dodaj sugestię kodu w metodzie
contextInitialized
.GitHub Copilot nie daje tej samej odpowiedzi za każdym razem, może być konieczne zadawanie innych pytań, aby dostosować jego odpowiedź. Aby uzyskać porady, zobacz Co mogę zrobić z usługą GitHub Copilot w mojej przestrzeni kodu?.
W terminalu usługi Codespace uruchom polecenie
azd deploy
.azd deploy
Napiwek
Możesz również użyć azd up
zawsze, co wykonuje wszystkie polecenia azd package
, azd provision
i azd deploy
.
Aby dowiedzieć się, jak plik War jest spakowany, możesz uruchomić azd package --debug
samodzielnie.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
6. Przejdź do aplikacji
W danych wyjściowych usługi AZD znajdź adres URL aplikacji i przejdź do niej w przeglądarce. Adres URL wygląda następująco w danych wyjściowych usługi AZD:
Deploying services (azd deploy) (✓) Done: Deploying service web - Endpoint: https://<app-name>-<hash>.azurewebsites.net/
Dodaj kilka zadań do listy.
Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for MySQL.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
7. Przesyłanie strumieniowe dzienników diagnostycznych
usługa aplikacja systemu Azure może przechwytywać dzienniki konsoli, aby ułatwić diagnozowanie problemów z aplikacją. Dla wygody szablon AZD włączył już rejestrowanie w lokalnym systemie plików i wysyła dzienniki do obszaru roboczego usługi Log Analytics.
Przykładowa aplikacja zawiera standardowe instrukcje rejestrowania log4j, aby zademonstrować tę funkcję, jak pokazano w poniższym fragmencie kodu:
@WebServlet(urlPatterns = "/")
public class ViewServlet extends HttpServlet {
private static Logger logger = LogManager.getLogger(ViewServlet.class.getName());
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
logger.info("GET /");
EntityManagerFactory emf = (EntityManagerFactory) req.getServletContext().getAttribute("EMFactory");
W danych wyjściowych usługi AZD znajdź link do strumieniowego przesyłania dzienników usługi App Service i przejdź do niego w przeglądarce. Link wygląda następująco w danych wyjściowych usługi AZD:
Stream App Service logs at: https://portal.azure.com/#@/resource/subscriptions/<subscription-guid>/resourceGroups/<group-name>/providers/Microsoft.Web/sites/<app-name>/logStream
Dowiedz się więcej na temat rejestrowania w aplikacjach Java w serii włączanie usługi Azure Monitor OpenTelemetry dla platformy .NET, Node.js, python i aplikacji Java.
Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.
8. Czyszczenie zasobów
Aby usunąć wszystkie zasoby platformy Azure w bieżącym środowisku wdrażania, uruchom polecenie azd down
i postępuj zgodnie z monitami.
azd down
Rozwiązywanie problemów
- Widzę wiele <ostrzeżeń klasy> skanowanych z wielu lokalizacji za pomocą mvn jetty:run
- Widok wdrażania portalu dla usługi Azure Database for MySQL — serwer elastyczny pokazuje stan konfliktu
- Wdrożona przykładowa aplikacja nie wyświetla aplikacji listy zadań
- Widzę błąd 404 Nie znaleziono strony w wdrożonej przykładowej aplikacji
Widzę wiele <ostrzeżeń klasy> skanowanych z wielu lokalizacji za pomocą mvn jetty:run
Można zignorować te ostrzeżenia. Wtyczka Maven Jetty wyświetla ostrzeżenia, ponieważ pom.xml aplikacji zawiera zależność dla jakarta.servlet.jsp.jstl
elementu , która usługa Jetty już udostępnia gotowe do użycia. Potrzebna jest zależność dla serwera Tomcat.
Widok wdrażania portalu dla usługi Azure Database for MySQL — serwer elastyczny pokazuje stan konfliktu
W zależności od wybranej subskrypcji i regionu stan wdrożenia dla serwera elastycznego usługi Azure Database for MySQL może mieć wartość Conflict
, z następującym komunikatem w obszarze Szczegóły operacji:
InternalServerError: An unexpected error occured while processing the request.
Ten błąd jest najprawdopodobniej spowodowany limitem subskrypcji dla wybranego regionu. Spróbuj wybrać inny region wdrożenia.
Wdrożona przykładowa aplikacja nie wyświetla aplikacji listy zadań
Jeśli zostanie wyświetlona Hey, Java developers!
strona zamiast aplikacji listy zadań, usługa App Service najprawdopodobniej nadal ładuje zaktualizowany kontener z najnowszego wdrożenia kodu. Poczekaj kilka minut i odśwież stronę.
Widzę błąd 404 Nie znaleziono strony w wdrożonej przykładowej aplikacji
Upewnij się, że wprowadzono zmiany kodu w celu korzystania ze java:comp/env/jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS
źródła danych. Jeśli wprowadzono zmiany i wdrożono ponownie kod, usługa App Service najprawdopodobniej nadal ładuje zaktualizowany kontener. Poczekaj kilka minut i odśwież stronę.
Często zadawane pytania
- Ile kosztuje ta konfiguracja?
- Jak mogę nawiązać połączenie z serwerem MySQL za siecią wirtualną przy użyciu innych narzędzi?
- W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?
- Nie mam uprawnień do tworzenia tożsamości przypisanej przez użytkownika
- Co mogę zrobić za pomocą narzędzia GitHub Copilot w swojej przestrzeni kodu?
Ile kosztuje ta konfiguracja?
Cennik utworzonych zasobów jest następujący:
- Plan usługi App Service jest tworzony w warstwie Podstawowa i można go skalować w górę lub w dół. Zobacz Cennik usługi App Service.
- Serwer elastyczny MySQL jest tworzony w warstwie B1ms i można go skalować w górę lub w dół. W przypadku bezpłatnego konta platformy Azure warstwa B1ms jest bezpłatna przez 12 miesięcy, do miesięcznych limitów. Zobacz Cennik usługi Azure Database for MySQL.
- Usługa Azure Cache for Redis jest tworzona w warstwie Podstawowa z minimalnym rozmiarem pamięci podręcznej. Z tą warstwą wiąże się niewielki koszt. Można ją skalować w górę do wyższych warstw wydajności w celu uzyskania wyższej dostępności, klastrowania i innych funkcji. Zobacz Cennik usługi Azure Cache for Redis.
- Sieć wirtualna nie powoduje naliczania opłat, chyba że skonfigurujesz dodatkowe funkcje, takie jak komunikacja równorzędna. Zobacz Cennik usługi Azure Virtual Network.
- Prywatna strefa DNS wiąże się z niewielką opłatą. Zobacz Cennik usługi Azure DNS.
Jak mogę nawiązać połączenie z serwerem MySQL za siecią wirtualną przy użyciu innych narzędzi?
- Kontener Tomcat obecnie nie ma terminalu
mysql-client
. Jeśli chcesz, musisz go zainstalować ręcznie. Pamiętaj, że wszystkie zainstalowane elementy nie są utrwalane podczas ponownego uruchamiania aplikacji. - Aby nawiązać połączenie z poziomu narzędzia klasycznego, takiego jak MySQL Workbench, maszyna musi znajdować się w sieci wirtualnej. Na przykład może to być maszyna wirtualna platformy Azure w jednej z podsieci lub maszyna w sieci lokalnej, która ma połączenie sieci VPN typu lokacja-lokacja z siecią wirtualną platformy Azure.
- Usługę Azure Cloud Shell można również zintegrować z siecią wirtualną.
W jaki sposób programowanie aplikacji lokalnych działa z funkcją GitHub Actions?
Na przykład przy użyciu automatycznie wygenerowanego pliku przepływu pracy z usługi App Service każdy git push
rozpoczyna nowy przebieg kompilacji i wdrożenia. Z lokalnego klonu repozytorium GitHub należy wprowadzić żądane aktualizacje i wypchnąć je do usługi GitHub. Na przykład:
git add .
git commit -m "<some-message>"
git push origin main
Nie mam uprawnień do tworzenia tożsamości przypisanej przez użytkownika
Zobacz Konfigurowanie wdrożenia funkcji GitHub Actions z Centrum wdrażania.
Co mogę zrobić za pomocą narzędzia GitHub Copilot w swojej przestrzeni kodu?
Możesz zauważyć, że widok czatu Copilot w usłudze GitHub był już dostępny podczas tworzenia przestrzeni kodu. Dla Twojej wygody dołączamy rozszerzenie czatu Copilot w usłudze GitHub w definicji kontenera (zobacz .devcontainer/devcontainer.json). Potrzebujesz jednak konta GitHub Copilot (dostępna jest 30-dniowa bezpłatna wersja próbna).
Kilka wskazówek dotyczących rozmowy z usługą GitHub Copilot:
- W jednej sesji czatu pytania i odpowiedzi opierają się na sobie i możesz dostosować swoje pytania, aby dostosować uzyskaną odpowiedź.
- Domyślnie narzędzie GitHub Copilot nie ma dostępu do żadnego pliku w repozytorium. Aby zadać pytania dotyczące pliku, najpierw otwórz plik w edytorze.
- Aby umożliwić usłudze GitHub Copilot dostęp do wszystkich plików w repozytorium podczas przygotowywania odpowiedzi, zacznij od pytania
@workspace
. Aby uzyskać więcej informacji, zobacz Use the @workspace agent. - W sesji czatu narzędzie GitHub Copilot może sugerować zmiany i (z
@workspace
) nawet tam, gdzie wprowadzić zmiany, ale nie może wprowadzać zmian. Wystarczy dodać sugerowane zmiany i przetestować je.
Oto kilka innych rzeczy, które można powiedzieć, aby dostroić uzyskaną odpowiedź:
- Zmień ten kod, aby używać źródła danych jdbc/AZURE_MYSQL_CONNECTIONSTRING_DS.
- Niektóre importy w kodzie używają języka javax, ale mam aplikację Dżakarta.
- Chcę, aby ten kod był uruchamiany tylko wtedy, gdy zmienna środowiskowa AZURE_MYSQL_CONNECTIONSTRING jest ustawiona.
- Chcę, aby ten kod był uruchamiany tylko w usłudze aplikacja systemu Azure, a nie lokalnie.
Następne kroki
Dowiedz się więcej na temat uruchamiania aplikacji Java w usłudze App Service w przewodniku dla deweloperów.
Dowiedz się, jak zabezpieczyć aplikację przy użyciu domeny niestandardowej i certyfikatu.