Udostępnij za pośrednictwem


Samouczek: wdrażanie aplikacji internetowej Quarkus w usługach Azure App Service i PostgreSQL

W tym samouczku wdrożysz opartą na danych aplikację internetową Quarkus w usłudze Azure App Service przy użyciu usługi relacyjnej bazy danych usługi Azure Database for PostgreSQL . Usługa Azure App Service obsługuje wersję Java Standard Edition (Java SE) w środowisku serwera z systemem Windows lub Linux.

Zrzut ekranu przedstawiający aplikację Quarkus przechowującą dane w usłudze PostgreSQL.

W tym poradniku nauczysz się, jak:

  • Utwórz domyślną architekturę dla usług Azure App Service i Azure Database for PostgreSQL — serwer elastyczny.
  • Zabezpieczanie wpisów tajnych połączenia przy użyciu tożsamości zarządzanej i odwołania do usługi Key Vault.
  • Wdróż przykładową aplikację Quarkus 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.
  • Wygeneruj schemat bazy danych, uruchamiając migracje baz danych.
  • Przesyłaj dzienniki diagnostyczne z Azure.
  • Zarządzaj aplikacją w portalu Azure.
  • 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ż dostać jeden za darmo.
  • Znajomość języka Java z programowaniem aplikacji Quarkus.
  • (Opcjonalnie) Aby wypróbować narzędzie GitHub Copilot, potrzebujesz konta 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.
  • Konto usługi GitHub. Możesz również dostać jeden za darmo.
  • 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 aplikacji Quarkus.
  • (Opcjonalnie) Aby wypróbować narzędzie GitHub Copilot, potrzebujesz konta GitHub Copilot. Dostępna jest 30-dniowa bezpłatna wersja próbna.

Przejdź do końca

Jeśli chcesz zobaczyć przykładową aplikację w tym samouczku uruchomionym na platformie Azure, uruchom następujące polecenia w usłudze Azure Cloud Shell i postępuj zgodnie z monitem:

mkdir msdocs-quarkus-postgresql-sample-app
cd msdocs-quarkus-postgresql-sample-app
azd init --template msdocs-quarkus-postgresql-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 Hibernate ORM z rozwiązaniem Panache i RESTEasy 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:

  1. Zaloguj się na istniejącym koncie GitHub.
  2. Przejdź do https://github.com/Azure-Samples/msdocs-quarkus-postgresql-sample-app/fork.
  3. Usuń zaznaczenie pola Kopiuj tylko gałąź główną. Chcesz, aby wszystkie gałęzie.
  4. Wybierz pozycję Utwórz rozwidlenie.

Krok 2. W rozwidleniu usługi GitHub:

  1. 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.
  2. Select Code>Utwórz przestrzeń kodową na starter-no-infra. Skonfigurowanie przestrzeni kodu zajmuje kilka minut.

Krok 3. W terminalu usługi Codespace:

  1. Uruchom program mvn quarkus:dev.
  2. Ignoruj powiadomienie Your application running on port 5005 is available.
  3. Po wyświetleniu powiadomienia Your application running on port 8080 is available.wybierz pozycję Otwórz w przeglądarce. Przykładowa aplikacja powinna być widoczna na nowej karcie przeglądarki. Aby zatrzymać serwer deweloperów Quarkus, wpisz Ctrl+C.

Aby uzyskać więcej informacji na temat sposobu tworzenia przykładowej aplikacji Quarkus, zobacz Artykuł Quarkus documentation Simplified Hibernate ORM with Panache and Configure data sources in Quarkus (Uproszczone hibernacji ORM z rozwiązaniem Panache i Konfigurowanie źródeł danych w usłudze Quarkus).

Napiwek

Możesz zapytać GitHub Copilot o to repozytorium. Na przykład:

  • @workspace Co robi ten projekt?
  • @workspace Do czego służy folder .devcontainer?

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

2. Tworzenie usług App Service i PostgreSQL

W tym kroku utworzysz zasoby platformy Azure. Kroki użyte w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługi App Service i usługę Azure Database for PostgreSQL. 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 także używane jako część nazwy DNS dla Twojej 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:

  1. Na górnym pasku wyszukiwania wpisz app service.
  2. Wybierz element oznaczony etykietą App Service pod nagłówkiem Usługi .
  3. Wybierz pozycję Utwórz>aplikację internetową. Możesz również przejść bezpośrednio do kreatora tworzenia.

Krok 2. Konfigurowanie nowej aplikacji Wypełnij formularz w następujący sposób.

  1. Nazwa: msdocs-quarkus-postgres. Zostanie wygenerowana grupa zasobów o nazwie msdocs-quarkus-postgres_group .
  2. Stos środowiska uruchomieniowego: Java 21.
  3. Stos serwera internetowego Java: Java SE (osadzony serwer internetowy).
  4. System operacyjny: Linux.
  5. Region: dowolny region świadczenia usługi Azure blisko Ciebie.
  6. Plan systemu Linux: utwórz nowy i użyj nazwy msdocs-quarkus-postgres.
  7. Plan cenowy: Podstawowa B1. Gdy wszystko będzie gotowe, możesz skalować w górę do innej warstwy cenowej.

Krok 3. Dodawanie bazy danych

  1. Wybierz kartę Baza danych .
  2. Wybierz pozycję Utwórz bazę danych.
  3. W obszarze Aparat wybierz pozycję PostgreSQL — serwer elastyczny. Nazwa serwera i nazwa bazy danych są domyślnie ustawione na odpowiednie wartości.

Krok 4. Konfigurowanie wdrożenia usługi GitHub

  1. Wybierz kartę Wdrożenie .
  2. Wybierz pozycję Ciągłe wdrażanie.
  3. Jeśli po raz pierwszy konfigurujesz wdrożenie usługi GitHub w usłudze App Service, wybierz pozycję Autoryzuj i uwierzytelnij się przy użyciu konta usługi GitHub.
  4. W obszarze Organizacja wybierz alias usługi GitHub.
  5. W obszarze Repozytorium wybierz pozycję msdocs-quarkus-postgresql-sample-app.
  6. W obszarze Gałąź wybierz pozycję starter-no-infra.
  7. Wybierz pozycję Przejrzyj i utwórz.
  8. Po zakończeniu walidacji wybierz pozycję Utwórz. Domyślnie kreator tworzenia tworzy tożsamość przypisaną przez użytkownika dla przepływu pracy do uwierzytelniania przy użyciu uwierzytelniania Microsoft Entra (OIDC). Aby zapoznać się z alternatywnymi opcjami uwierzytelniania, zobacz Wdrożenie do usługi App Service za pomocą GitHub Actions.

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 PostgreSQL: dostępny tylko z poziomu sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
  • Prywatne strefy DNS: Umożliwia rozpoznawanie nazw DNS kluczy w usłudze Key Vault i serwera bazy danych w sieci wirtualnej.

3. Zabezpieczenie tajnych danych połączenia

Kreator tworzenia wygenerował zmienne łączności już jako ustawienia aplikacji. Jednak najlepszą praktyką w zakresie zabezpieczeń jest całkowite wyeliminowanie tajemnic z usługi App Service. Przeniesiesz swoje tajne dane do magazynu kluczy i zmienisz ustawienie aplikacji na odwołania do magazynu kluczy Key Vault przy użyciu łączników serwisowych.

Krok 1. Pobieranie istniejącej parametry połączenia

  1. W menu po lewej stronie usługi App Service wybierz pozycję Ustawienia > Zmienne środowiskowe.
  2. Wybierz pozycję Parametry połączenia.
  3. Wybierz AZURE_POSTGRESQL_CONNECTIONSTRING.
  4. W ustawieniu Dodaj/Edytuj aplikację w polu Wartość znajdź części User Id= i Password= na końcu ciągu.
  5. Skopiuj ciągi nazwy użytkownika i hasła po identyfikatorze użytkownika = i hasło = do późniejszego użycia. To ustawienie aplikacji pozwala na nawiązanie połączenia z bazą danych Postgres zabezpieczoną 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 podsieci na potrzeby zabezpieczania usługi Key Vault Sieć wirtualna ma już dwie istniejące podsieci, ale jedna jest już delegowana do usługi App Service, a druga jest już delegowana do usługi Azure Database for PostgreSQL. Możesz utworzyć kolejny na potrzeby bezpiecznego dostępu do usługi Key Vault przy użyciu prywatnego punktu końcowego (aby uzyskać więcej informacji, zobacz Zabezpieczenia sieci dla usługi Azure Key Vault).

  1. W menu po lewej stronie usługi App Service wybierz kartę Przegląd .
  2. Wybierz grupę zasobów aplikacji.
  3. Wybierz sieć wirtualną w grupie zasobów.
  4. W menu po lewej stronie sieci wirtualnej wybierz pozycję Ustawienia > Podsieci.
  5. Wybierz pozycję + Podsieć.
  6. W polu Nazwa wpisz podsieć-keyvault. Zaakceptuj wartości domyślne.
  7. Wybierz Dodaj.

Krok 3. Tworzenie magazynu kluczy na potrzeby bezpiecznego zarządzania wpisami tajnymi

  1. Na górnym pasku wyszukiwania wpisz "key vault", następnie wybierz Marketplace>Key Vault.
  2. W obszarze Grupa zasobów wybierz pozycję msdocs-quarkus-postgres_group.
  3. Wpisz w Nazwa magazynu kluczy nazwę, która składa się tylko z liter i cyfr.
  4. W Regionie ustaw tę samą lokalizację co grupa zasobów.

Krok 4. Zabezpieczanie magazynu kluczy przy użyciu prywatnego punktu końcowego

  1. Wybierz kartę Sieć.
  2. Usuń zaznaczenie pozycji Włącz dostęp publiczny.
  3. Wybierz Utwórz prywatny punkt końcowy.
  4. W obszarze Grupa zasobów wybierz pozycję msdocs-quarkus-postgres_group.
  5. W oknie dialogowym, w Location, wybierz tę samą lokalizację, co twoja aplikacja App Service.
  6. W polu Nazwa wpisz msdocs-quarkus-postgresVaultEndpoint.
  7. W obszarze Sieć wirtualna wybierz pozycję vnet-xxxxxxx.
  8. W podsiecisubnet-keyvault.
  9. Kliknij przycisk OK.
  10. Wybierz Przegląd + utwórz, a następnie wybierz Utwórz. Poczekaj na zakończenie wdrożenia usługi Key Vault. Powinien zostać wyświetlony komunikat "Wdrożenie zostało ukończone".

Krok 5. Tworzenie łącznika postgreSQL

  1. Na górnym pasku wyszukiwania wpisz msdocs-quarkus-postgres, a następnie wybierz zasób usługi App Service o nazwie msdocs-quarkus-postgres.
  2. Na stronie App Service w menu po lewej stronie wybierz pozycję Ustawienia > Łącznik > usługi Utwórz.
  3. W polu Typ usługi wybierz pozycję DB for PostgreSQL — serwer elastyczny.
  4. Na serwerze elastycznym PostgreSQL należy już wybrać pozycję msdocs-quarkus-postgres-server .
  5. W bazie danych PostgreSQL wybierz pozycję msdocs-quarkus-postgres-database.
  6. W polu Typ klienta wybierz pozycję Java.

Krok 6. Zapisywanie wpisów tajnych w magazynie kluczy

  1. Wybierz kartę Uwierzytelnianie .
  2. Wybierz Ciąg połączenia.
  3. W obszarze Nazwa użytkownika i hasło wklej skopiowane wcześniej hasło.
  4. Wybierz Przechowuj tajemnicę w Key Vault.
  5. W sekcji Połączenie z Key Vault wybierz Utwórz nowe. Okno dialogowe Tworzenie połączenia jest otwierane w górnej części okna dialogowego edycji.

Krok 7. Ustanawianie połączenia z usługą Key Vault

  1. W oknie dialogowym Tworzenie połączenia dla połączenia Key Vault, w Key Vault wybierz utworzony wcześniej magazyn kluczy.
  2. W polu Typ klienta wybierz pozycję Java , aby uzyskać spójność. Kod aplikacji nie używa bezpośrednio magazynu kluczy.
  3. Wybierz pozycję Przejrzyj i utwórz.
  4. Gdy walidacja zostanie zakończona, wybierz Utwórz.

Krok 8. Finalizowanie ustawień łącznika PostgreSQL

  1. Wrócisz do okna dialogowego edycji łącznika PostgreSQL. Na karcie Uwierzytelnianie poczekaj na utworzenie łącznika usługi Key Vault. Gdy jest gotowe, rozwijane menu Key Vault Connection automatycznie je wybiera.
  2. Wybierz pozycję Przejrzyj i utwórz.
  3. Gdy walidacja zostanie zakończona, wybierz Utwórz. Poczekaj, aż zostanie wyświetlone powiadomienie Tworzenie zakończyło się pomyślnie .

Krok 9. Weryfikowanie integracji z usługą Key Vault

  1. W menu po lewej stronie ponownie wybierz pozycję Ustawienia > Zmienne środowiskowe .
  2. Obok pozycji AZURE_POSTGRESQL_CONNECTIONSTRING wybierz pozycję Pokaż wartość. Wartość powinna być @Microsoft.KeyVault(...), co oznacza, że jest to odwołanie do skarbca kluczy, ponieważ tajemnica jest teraz zarządzana w skarbcu kluczy.

Krok 10. Usuwanie poświadczeń bazy danych z usługi App Service

  1. Wybierz kartę Parametry połączenia .
  2. Po prawej stronie AZURE_POSTGRESQL_CONNECTIONSTRING wybierz pozycję Usuń. Pamiętaj, że kreator tworzenia utworzył te parametry połączenia na początku.

Podsumowując, proces zabezpieczania tajemnic połączenia obejmował:

  • Pobieranie tajnych danych połączenia ze zmiennych środowiskowych aplikacji App Service.
  • Tworzenie magazynu kluczy z prywatnym punktem końcowym.
  • Tworzenie połączenia usługi Key Vault z tożsamością zarządzaną przypisaną przez system.
  • Utwórz łącznik usługi do przechowywania wpisów tajnych połączenia w magazynie kluczy.
  • Usuń stare wpisy tajne połączenia z aplikacji usługi App Service.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

4. Wdrażanie przykładowego kodu

W kreatorze tworzenia skonfigurowano już ciągłe wdrażanie z przykładowego repozytorium 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 w twoim repozytorium GitHub uruchamia procesy budowania i wdrażania.

Należy zwrócić uwagę na następujące kwestie:

  • Quarkus domyślnie nasłuchuje portu 8080. W środowisku produkcyjnym należy skonfigurować go do nasłuchiwania portu określonego przez zmienną PORT środowiskową w usłudze App Service.
  • Wdrożony pakiet Java musi być plikiem Uber-Jar.
  • Dla uproszczenia samouczka wyłączysz testy podczas procesu wdrażania. Moduły uruchamiające funkcję GitHub Actions nie mają dostępu do bazy danych PostgreSQL na platformie Azure, więc wszystkie testy integracji wymagające dostępu do bazy danych nie powiedzą się, na przykład w przypadku przykładowej aplikacji Quarkus.

Krok 1: Wróć do codespace GitHub swojego przykładowego forka i uruchom polecenie git pull origin starter-no-infra. Spowoduje to ściągnięcie nowo zatwierdzonego pliku przepływu pracy usługi GitHub do przestrzeni kodu.

Krok 2 (opcja 1: z rozwiązaniem GitHub Copilot):

  1. Rozpocznij nową sesję czatu, wybierając widok Chat, a następnie wybierając +.
  2. Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych?". Copilot może wyjaśnić, jak ustawienia źródła danych Quarkus są skonfigurowane w pliku src/main/resources/application.properties.
  3. Powiedzmy: "@workspace utworzono łącznik usługi PostgreSQL w usłudze Azure App Service przy użyciu typu klienta Java, a nazwa ustawienia aplikacji jest AZURE_POSTGRESQL_CONNECTIONSTRING. Chcę użyć tych parametrów połączenia, gdy aplikacja jest uruchomiona w środowisku produkcyjnym. Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków GitHub Copilot , a nawet poinformuj o zmianie pliku src/main/resources/application.properties .
  4. Otwórz plik src/main/resources/application.properties w eksploratorze i dodaj sugestię kodu.
  5. Powiedz: "@workspace Jak skonfigurować ten projekt w celu utworzenia pliku Uber Jar?" Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków GitHub Copilot , a nawet poinformuj o zmianie pliku src/main/resources/application.properties .
  6. Otwórz plik src/main/resources/application.properties w eksploratorze i dodaj sugestię kodu.
  7. Powiedz: "@workspace Jak używać portu usługi App Service?" Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków GitHub Copilot , a nawet poinformuj o zmianie pliku src/main/resources/application.properties .
  8. Otwórz plik src/main/resources/application.properties w eksploratorze i dodaj sugestię kodu. Narzędzie GitHub Copilot nie daje tej samej odpowiedzi za każdym razem i nie zawsze jest poprawne. 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 2 (opcja 2: bez narzędzia GitHub Copilot):

  1. Otwórz plik src/main/resources/application.properties w eksploratorze. Aplikacja Quarkus używa tego pliku do ładowania właściwości języka Java.
  2. Usuń komentarz wiersze 10–12. Te ustawienia używają ustawienia aplikacji utworzonego za pomocą łącznika PostgreSQL, tworzy plik Uber Jar i ustawia port na ten używany przez usługę App Service.

Krok 3 (opcja 1: z rozwiązaniem GitHub Copilot):

  1. Zapytaj " @workspace w przypadku wdrożenia funkcji GitHub Actions chcę pominąć testy, aby uniknąć błędów związanych z bazą danych". Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków narzędzia GitHub Copilot , a nawet poinformować o zmianie w pliku .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml .
  2. Otwórz plik .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml w eksploratorze i dodaj sugestię kodu. Aby uzyskać porady, zobacz Co mogę zrobić z usługą GitHub Copilot w mojej przestrzeni kodu?.

Krok 3 (opcja 2: bez narzędzia GitHub Copilot):

  1. Otwórz plik .github/workflows/starter-no-infra_msdocs-quarkus-postgres.yml w eksploratorze. Jest to przepływ pracy funkcji GitHub Actions utworzony przez kreatora tworzenia.
  2. Znajdź krok i zmodyfikuj Build with Mavenrun polecenie na mvn clean install -DskipTests. -DskipTests polecenie maven pominąć testy, aby wdrożenie nie powiodło się w przypadku błędów bazy danych. Kontener funkcji GitHub Actions nie może nawiązać połączenia z serwerem PostgreSQL.

Krok 4:

  1. Wybierz rozszerzenie Kontroli źródła.
  2. W polu tekstowym wpisz komunikat zatwierdzenia, taki jak Configure DB and deployment. Albo wybierz i pozwól GitHub Copilot wygenerować dla Ciebie wiadomość zatwierdzenia.
  3. Wybierz pozycję Zatwierdź, a następnie potwierdź wartość Tak.
  4. Wybierz pozycję Synchronizuj zmiany 1, a następnie potwierdź przy użyciu przycisku OK.

Krok 5:

  1. W menu po lewej stronie wybierz pozycjęDzienniki>>.
  2. W elemencie dziennika dla przebiegu wdrożenia wybierz wpis Build/Deploy Logs (Wdróż dzienniki kompilacji/wdrażania) z najnowszym znacznikiem czasu.

Krok 6. Przejdź 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, aż uruchomienie na GitHubie pokaże stan Success. Trwa to około 5 minut.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

5. Przejdź do aplikacji

Krok 1. Na stronie usługi App Service:

  1. W menu po lewej stronie wybierz pozycję Przegląd.
  2. Wybierz adres URL aplikacji.

Krok 2. Dodaj kilka owoców do listy. Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for PostgreSQL.

6. 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 JBoss, aby zademonstrować tę funkcję, jak pokazano poniżej.

private static final Logger LOGGER = Logger.getLogger(FruitEntityResource.class.getName());

@GET
public List<FruitEntity> get() {
    LOGGER.info("In FruitEntityResource.get()");
    return FruitEntity.listAll(Sort.by("name"));
}

Krok 1. Na stronie usługi App Service:

  1. Z lewego menu wybierz Monitoring>Dzienniki usługi App Service.
  2. W obszarze Rejestrowanie aplikacji wybierz pozycję System plików.
  3. 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 temacie Włączanie usługi Azure Monitor OpenTelemetry dla platformy .NET, Node.js, python i Java.

7. 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:

  1. Wpisz nazwę grupy zasobów.
  2. Wybierz odpowiednią grupę zasobów.

Krok 2. Na stronie grupy zasobów wybierz pozycję Usuń grupę zasobów.

Krok 3:

  1. Wprowadź nazwę grupy zasobów, aby potwierdzić jej usunięcie.
  2. Wybierz Usuń.
  3. Potwierdź ponownie polecenie Usuń .

Zrzut ekranu przedstawiający okno dialogowe potwierdzenia dotyczące usuwania grupy zasobów w witrynie Azure Portal. :

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żyte w tym samouczku umożliwiają utworzenie zestawu bezpiecznych domyślnie zasobów obejmujących usługi App Service i usługę Azure Database for PostgreSQL.

Kontener deweloperski ma już interfejs wiersza polecenia dla deweloperów platformy Azure (AZD).

  1. W katalogu głównym repozytorium usługi GitHub codespace uruchom polecenie azd init.

    azd init --template javase-app-service-postgresql-infra
    
  2. Po wyświetleniu monitu podaj następujące odpowiedzi:

    Pytanie Odpowiedź
    Bieżący katalog nie jest pusty. Czy chciałbyś zainicjować projekt tutaj w '<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.
  3. Zaloguj się do platformy azd auth login Azure, uruchamiając polecenie i postępując zgodnie z wierszem polecenia:

    azd auth login
    
  4. Utwórz niezbędne zasoby platformy Azure za pomocą polecenia azd provision. Postępuj zgodnie z monitem, aby wybrać żądaną subskrypcję i lokalizację zasobów platformy Azure.

    azd provision
    

    Wykonanie polecenia azd provision trwa około 15 minut (pamięć podręczna Redis zajmuje najwięcej czasu). Później zmodyfikujesz kod, aby pracować z usługą App Service i wdrożyć zmiany za pomocą polecenia azd deploy. Gdy jest uruchomiona, polecenie udostępnia komunikaty dotyczące procesu aprowizacji i wdrażania, w tym link do wdrożenia na platformie Azure.

    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 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.
    • Prywatne punkty końcowe: Punkty dostępu do magazynu kluczy oraz pamięci podręcznej Redis w sieci wirtualnej.
    • Interfejsy sieciowe: Reprezentują prywatne adresy IP, po jednym dla każdego z prywatnych punktów końcowych.
    • Serwer elastyczny usługi Azure Database for PostgreSQL: dostępny tylko z poziomu sieci wirtualnej. Baza danych i użytkownik są tworzone dla Ciebie na serwerze.
    • strefa Prywatna strefa DNS: włącza rozpoznawanie nazw DNS serwera PostgreSQL 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.
    • Azure Cache for Redis: Dostępny tylko zza jego prywatnego punktu końcowego.
    • Sejf kluczy: Dostępny tylko z prywatnego punktu końcowego. Służy do zarządzania sekretami dla aplikacji App Service.
  5. Po zakończeniu aprowizacji znajdź ustawienie AZURE_POSTGRESQL_CONNECTIONSTRING w danych wyjściowych AZD. Aby zachować bezpieczeństwo wpisów tajnych, 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 settings:
             - AZURE_POSTGRESQL_CONNECTIONSTRING
             - AZURE_REDIS_CONNECTIONSTRING
             - AZURE_KEYVAULT_RESOURCEENDPOINT
             - AZURE_KEYVAULT_SCOPE
     

    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. Możesz również znaleźć bezpośredni link do strony ustawień aplikacji dla utworzonej aplikacji usługi App Service.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

3. Modyfikowanie przykładowego kodu i ponowne wdrażanie

Aby aplikacja działała z usługą App Service, musisz wprowadzić pewne zmiany w kodzie aplikacji:

  • Quarkus domyślnie nasłuchuje portu 8080. W środowisku produkcyjnym należy skonfigurować go do nasłuchiwania portu określonego przez zmienną PORT środowiskową w usłudze App Service.
  • Wdrożony pakiet Java musi być plikiem Uber-Jar.
  • Dla uproszczenia samouczka wyłączysz testy podczas procesu wdrażania. Moduły uruchamiające funkcję GitHub Actions nie mają dostępu do bazy danych PostgreSQL na platformie Azure, więc wszystkie testy integracji wymagające dostępu do bazy danych nie powiedzą się, na przykład w przypadku przykładowej aplikacji Quarkus.
  1. W przestrzeni kodowej GitHub, rozpocznij nową sesję czatu, wybierając widok Chat, a następnie wybierając +.

  2. Zapytaj: "@workspace Jak aplikacja łączy się z bazą danych?". Copilot może wyjaśnić, jak ustawienia źródła danych kwarkus są skonfigurowane w pliku src/main/resources/application.properties.

  3. Powiedzmy: "@workspace utworzono łącznik usługi PostgreSQL w usłudze Azure App Service przy użyciu typu klienta Java, a nazwa ustawienia aplikacji jest AZURE_POSTGRESQL_CONNECTIONSTRING. Chcę użyć tych parametrów połączenia, gdy aplikacja jest uruchomiona w środowisku produkcyjnym. Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków GitHub Copilot , a nawet poinformuj o zmianie pliku src/main/resources/application.properties .

  4. Dodaj sugestię kodu w pliku src/main/resources/application.properties.

  5. Powiedz: "@workspace Jak skonfigurować ten projekt w celu utworzenia pliku Uber Jar?" Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków GitHub Copilot , a nawet poinformuj o zmianie pliku src/main/resources/application.properties .

  6. Dodaj sugestię kodu w pliku src/main/resources/application.properties.

  7. Powiedz: "@workspace Jak używać portu usługi App Service?" Copilot może dać sugestię kodu podobną do tej w opcji 2: bez poniższych kroków GitHub Copilot , a nawet poinformuj o zmianie pliku src/main/resources/application.properties .

  8. Dodaj sugestię kodu w pliku src/main/resources/application.properties.

    Narzędzie GitHub Copilot nie daje tej samej odpowiedzi za każdym razem i nie zawsze jest poprawne. 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?.

  9. W terminalu uruchom polecenie azd deploy.

    azd deploy
    

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

5. Przejdź do aplikacji

  1. 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>.azurewebsites.net/
     
  2. Dodaj kilka owoców do listy.

    Zrzut ekranu przedstawiający aplikację internetową Quarkus z uruchomioną bazą danych PostgreSQL na platformie Azure z listą owoców.

    Gratulacje, uruchamiasz aplikację internetową w usłudze aplikacja systemu Azure z bezpieczną łącznością z usługą Azure Database for PostgreSQL.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

6. 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 umożliwia 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 JBoss, aby zademonstrować tę funkcję, jak pokazano poniżej.

private static final Logger LOGGER = Logger.getLogger(FruitEntityResource.class.getName());

@GET
public List<FruitEntity> get() {
    LOGGER.info("In FruitEntityResource.get()");
    return FruitEntity.listAll(Sort.by("name"));
}

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 temacie Włączanie usługi Azure Monitor OpenTelemetry dla platformy .NET, Node.js, python i Java.

Masz problemy? Zapoznaj się z sekcją Rozwiązywanie problemów.

7. 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

Uruchomienie funkcji GitHub Actions nie powiodło się na etapie kompilacji

Wybierz etap kompilacji, który zakończył się niepowodzeniem, aby zobaczyć, który krok zakończył się niepowodzeniem. Jeśli jest to etap Kompilacja z narzędziem Maven , rozwiń krok, aby sprawdzić, czy -DskipTests jest używana opcja. Jeśli nie, wróć do 4. Wdróż przykładowy kod i zmodyfikuj plik przepływu pracy usługi GitHub zgodnie z instrukcjami.

Uruchomienie aplikacji nie powiodło się i pokazano następujący błąd w strumieniu dziennika: "Klasy modelu są zdefiniowane dla domyślnej< jednostki >trwałości, ale nie znaleziono skonfigurowanego źródła<>danych: domyślna jednostka EntityManagerFactory nie zostanie utworzona".

Ten błąd Quarkus jest najbardziej prawdopodobny, ponieważ aplikacja nie może nawiązać połączenia z bazą danych platformy Azure. Upewnij się, że ustawienie AZURE_POSTGRESQL_CONNECTIONSTRING aplikacji nie zostało zmienione i że plik application.properties używa ustawienia aplikacji poprawnie.

Uruchomienie aplikacji nie powiodło się, a strumień dziennika zawiera komunikat "Oczekiwanie na odpowiedź na żądanie rozgrzewania kontenera"

Aplikacja prawdopodobnie nie jest skonfigurowana do nasłuchiwania portu określonego przez zmienną środowiskową usługi App Service PORT , więc nie może odpowiadać na żadne żądania. Jeśli usługa App Service nie otrzyma odpowiedzi z aplikacji, zakłada, że uruchomienie aplikacji nie powiodło się. Wróć do 4. Wdróż przykładowy kod i sprawdź, czy plik application.properties jest poprawnie skonfigurowany.

Aplikacja działa, ale widzę dziennik błędów "ERROR [org.acm.hib.orm.pan.ent.FruitEntityResource] (vert.x-eventloop-thread-0) Nie można obsłużyć żądania: jakarta.ws.rs.NotFoundException: HTTP 404 Nie znaleziono.

Jest to błąd Vert.x (zobacz Architektura reaktywna Quarkus), wskazujący, że klient zażądał nieznanej ścieżki. Może się to zdarzyć przy pierwszym uruchomieniu aplikacji, gdy klient żąda interfejsu API REST przed migracją bazy danych Hibernacji.

W usłudze App Service ten błąd występuje również podczas każdego uruchamiania aplikacji, ponieważ usługa App Service sprawdza, czy aplikacja rozpoczyna się od wysłania GET żądania do /robots933456.txtusługi .

Często zadawane pytania

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 PostgreSQL jest tworzony w najniższej warstwie z możliwością zwiększania szybkości Standard_B1ms z minimalnym rozmiarem magazynu, który można skalować w górę lub w dół. Zobacz Cennik usługi Azure Database for PostgreSQL.
  • 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 PostgreSQL zabezpieczonym za siecią wirtualną przy użyciu innych narzędzi?

  • Aby uzyskać podstawowy dostęp z poziomu narzędzia wiersza polecenia, można uruchomić psql z poziomu terminalu SSH aplikacji.
  • Aby nawiązać połączenie z poziomu narzędzia klasycznego, maszyna musi znajdować się w sieci wirtualnej. Na przykład może to być maszyna wirtualna Azure (VM), która jest podłączona do jednej z podsieci, albo maszyna w sieci lokalnej, która ma połączenie VPN typu site-to-site z wirtualną siecią 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

Co zrobić, jeśli chcę uruchomić testy za pomocą bazy danych PostgreSQL podczas przepływu pracy usługi GitHub?

Domyślna przykładowa aplikacja Quarkus zawiera testy z łącznością z bazą danych. Aby uniknąć błędów połączenia, dodano -skipTests właściwość . Jeśli chcesz, możesz uruchomić testy względem kontenera usługi PostgreSQL. Na przykład w pliku automatycznie wygenerowanego przepływu pracy w rozwidleniu usługi GitHub (.github/workflows/main_cephalin-quarkus.yml) wprowadź następujące zmiany:

  1. Dodaj kod YAML dla kontenera PostgreSQL do zadania, jak pokazano w poniższym fragmencie build kodu.

    ...
    jobs:
      build:
        runs-on: ubuntu-latest
    
        # BEGIN CODE ADDITION
        container: ubuntu
        services:
          # Hostname for the PostgreSQL container
          postgresdb:
            image: postgres
            env:
              POSTGRES_PASSWORD: postgres
              POSTGRES_USER: postgres
              POSTGRES_DB: postgres
            # Set health checks to wait until postgres has started
            options: >-
              --health-cmd pg_isready
              --health-interval 10s
              --health-timeout 5s
              --health-retries 5
    
        # END CODE ADDITION
    
        steps:
          - uses: actions/checkout@v4
          ...
    

    container: ubuntu informuje usługę GitHub o uruchomieniu build zadania w kontenerze. Dzięki temu parametry połączenia w środowisku jdbc:postgresql://postgresdb:5432/postgres deweloperskim mogą działać tak samo jak w przypadku uruchomienia przepływu pracy. Aby uzyskać więcej informacji na temat łączności postgreSQL w funkcji GitHub Actions, zobacz Creating PostgreSQL service containers (Tworzenie kontenerów usługi PostgreSQL).

  2. Build with Maven W kroku usuń element -DskipTests. Na przykład:

          - name: Build with Maven
            run: mvn clean install -Dquarkus.package.type=uber-jar
    

Nie mam uprawnień do tworzenia tożsamości przypisanej przez użytkownika

Zobacz Skonfiguruj wdrożenie funkcji GitHub Actions w Centrum wdrożeń.

Co mogę zrobić za pomocą narzędzia GitHub Copilot w swojej przestrzeni kodu?

Być może zauważyłeś, że widok czatu GitHub Copilot był już dostępny, gdy tworzyłeś swoją przestrzeń kodu. Potrzebujesz jednak konta GitHub Copilot (dostępna jest 30-dniowa bezpłatna wersja próbna).

Kilka wskazówek dla Ciebie, gdy rozmawiasz z GitHub Copilot:

  • Podczas jednej sesji czatu pytania i odpowiedzi wzajemnie się uzupełniają, a ty możesz modyfikować swoje pytania, aby doprecyzować uzyskaną odpowiedź.
  • Domyślnie GitHub Copilot nie ma dostępu do żadnego pliku w twoim repozytorium. Aby zadać pytania dotyczące pliku, najpierw otwórz plik w edytorze.
  • Aby umożliwić GitHub Copilot dostęp do wszystkich plików w repozytorium podczas przygotowywania odpowiedzi, rozpocznij pytanie od @workspace. Aby uzyskać więcej informacji, zobacz Use the @workspace agent.
  • Podczas sesji czatu, GitHub Copilot może sugerować zmiany i (za pomocą @workspace) nawet wskazać, gdzie te zmiany wprowadzić, ale nie może ich wprowadzać za ciebie. To od Ciebie zależy, czy dodasz sugerowane zmiany i je przetestujesz.

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.