Wdrażanie aplikacji Java za pomocą biblioteki Open Liberty w usłudze Azure Container Apps
W tym artykule pokazano, jak uruchomić aplikację Open Liberty w usłudze Azure Container Apps. W tym artykule wykonasz następujące działania:
- Uruchom aplikację Java, Java Enterprise Edition (EE), Jakarta EE lub MicroProfile w środowisku uruchomieniowym Open Liberty.
- Zbuduj obraz Docker aplikacji przy użyciu obrazów kontenera Liberty.
- Wdróż konteneryzowaną aplikację w usłudze Azure Container Apps.
Aby uzyskać więcej informacji na temat platformy Open Liberty, zobacz stronę projektu Open Liberty. Ten artykuł ma pomóc w szybkim rozpoczęciu wdrażania. Przed przejściem do środowiska produkcyjnego należy zbadać Tuning Liberty.
Jeśli chcesz przekazać opinię lub ściśle pracować nad scenariuszami migracji z zespołem inżynierów opracowującym rozwiązania Java na platformie Azure, wypełnij tę krótką ankietę dotyczącą migracji platformy Azure i dołącz swoje informacje kontaktowe. Zespół menedżerów programów, architektów i inżynierów natychmiast skontaktuje się z Tobą w celu zainicjowania ścisłej współpracy.
Wymagania wstępne
- Subskrypcja platformy Azure. Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
- Przygotuj maszynę lokalną z zainstalowanym systemem operacyjnym Windows lub Unix — na przykład Ubuntu, macOS lub Podsystem Windows dla systemu Linux.
-
Zainstaluj interfejs wiersza polecenia platformy Azure 2.62.0 lub nowszy, aby uruchomić polecenia interfejsu wiersza polecenia platformy Azure.
- Jeśli zostanie wyświetlony monit, zainstaluj rozszerzenie interfejsu wiersza polecenia platformy Azure podczas pierwszego użycia. Aby uzyskać więcej informacji na temat rozszerzeń, zobacz Używanie rozszerzeń i zarządzanie nimi za pomocą interfejsu wiersza polecenia platformy Azure.
- Uruchom
az version
, aby znaleźć zainstalowaną wersję i biblioteki zależne. Aby przeprowadzić uaktualnienie do najnowszej wersji, uruchom polecenieaz upgrade
.
- Zainstaluj implementację java Standard Edition (SE) w wersji 17 — na przykład microsoft build of OpenJDK.
- Zainstaluj program Maven 3.9.8 lub nowszy.
- Upewnij się, że usługa Git jest zainstalowana.
Logowanie się do platformy Azure
Zaloguj się do subskrypcji platformy Azure przy użyciu polecenia az login
i postępuj zgodnie z instrukcjami wyświetlanymi na ekranie.
az login
Uwaga
Większość poleceń Azure CLI można uruchamiać w PowerShell tak samo jak w Bash. Różnica istnieje tylko w przypadku używania zmiennych. W poniższych sekcjach różnica jest omawiana na różnych zakładkach, w razie potrzeby.
Jeśli masz wielu dzierżawców Azure skojarzonych z Twoimi poświadczeniami Azure, musisz wybrać dzierżawcę, do którego chcesz zalogować się. Najemcę można określić przy użyciu opcji --tenant
— na przykład az login --tenant contoso.onmicrosoft.com
.
Jeśli masz wiele subskrypcji w ramach jednej dzierżawy, upewnij się, że jesteś zalogowany na tę, którą zamierzasz używać, korzystając z az account set --subscription <subscription-id>
.
Tworzenie grupy zasobów
Grupa zasobów platformy Azure to logiczna grupa przeznaczona do wdrażania zasobów platformy Azure i zarządzania nimi.
Utwórz grupę zasobów o nazwie java-liberty-project
przy użyciu polecenia az group create
w lokalizacji eastus2
. Ta grupa zasobów jest później używana do tworzenia instancji Azure Container Registry (ACR) i instancji Azure Container Apps.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus2
** Utwórz wystąpienie ACR
Użyj polecenia az acr create
, aby utworzyć instancję ACR. Poniższy przykład tworzy wystąpienie ACR o nazwie youruniqueacrname
. Upewnij się, że youruniqueacrname
jest unikatowa na platformie Azure.
Uwaga
W tym artykule użyto zalecanego mechanizmu uwierzytelniania bez hasła dla usługi Container Registry. Nadal można użyć nazwy użytkownika i hasła z docker login
po użyciu az acr credential show
w celu uzyskania nazwy użytkownika i hasła. Użycie nazwy użytkownika i hasła jest mniej bezpieczne niż uwierzytelnianie bez hasła.
export REGISTRY_NAME=youruniqueacrname
az acr create \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--sku Basic
Po krótkim czasie powinny zostać wyświetlone dane wyjściowe JSON zawierające następujące wiersze:
"provisioningState": "Succeeded",
"publicNetworkAccess": "Enabled",
"resourceGroup": "java-liberty-project",
Następnie użyj następującego polecenia, aby pobrać serwer logowania się dla instancji rejestru kontenerów. Ta wartość będzie potrzebna później, gdy będziesz wdrażać obraz aplikacji w usłudze Azure Container Apps.
export ACR_LOGIN_SERVER=$(az acr show \
--resource-group $RESOURCE_GROUP_NAME \
--name $REGISTRY_NAME \
--query 'loginServer' \
--output tsv)
Utwórz środowisko
Środowisko w usłudze Azure Container Apps tworzy bezpieczną granicę wokół grupy aplikacji kontenera. Aplikacje kontenera wdrożone w tym samym środowisku są wdrażane w tej samej sieci wirtualnej i zapisują dzienniki w tym samym obszarze roboczym usługi Log Analytics. Użyj polecenia az containerapp env create
, aby utworzyć środowisko. Poniższy przykład tworzy środowisko o nazwie youracaenvname
:
export ACA_ENV=youracaenvname
az containerapp env create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_ENV
Jeśli zostanie wyświetlony monit o zainstalowanie rozszerzenia, odpowiedz Y.
Po krótkim czasie powinny zostać wyświetlone dane wyjściowe JSON zawierające następujące wiersze:
"provisioningState": "Succeeded",
"type": "Microsoft.App/managedEnvironments"
"resourceGroup": "java-liberty-project",
Tworzenie pojedynczej bazy danych w usłudze Azure SQL Database
W tej sekcji utworzysz pojedynczą bazę danych w usłudze Azure SQL Database do użycia z aplikacją.
Najpierw użyj następujących poleceń, aby ustawić zmienne środowiskowe związane z bazą danych. Zastąp <your-unique-sql-server-name>
unikatową nazwą serwera usługi Azure SQL Database.
export SQL_SERVER_NAME=<your-unique-sql-server-name>
export DB_NAME=demodb
Następnie użyj następujących poleceń, aby utworzyć pojedynczą bazę danych w usłudze Azure SQL Database i ustawić bieżącego zalogowanego użytkownika jako administratora firmy Microsoft Entra. Aby uzyskać więcej informacji, zobacz przewodnik Szybki start : Tworzenie pojedynczej bazy danych — Azure SQL Database.
export ENTRA_ADMIN_NAME=$(az account show --query user.name --output tsv)
az sql server create \
--name $SQL_SERVER_NAME \
--resource-group $RESOURCE_GROUP_NAME \
--enable-ad-only-auth \
--external-admin-principal-type User \
--external-admin-name $ENTRA_ADMIN_NAME \
--external-admin-sid $(az ad signed-in-user show --query id --output tsv)
az sql db create \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name $DB_NAME \
--edition GeneralPurpose \
--compute-model Serverless \
--family Gen5 \
--capacity 2
Następnie użyj następujących poleceń, aby dodać lokalny adres IP do reguł zapory serwera usługi Azure SQL Database, aby umożliwić maszynie lokalnej nawiązywanie połączenia z bazą danych na potrzeby testowania lokalnego później.
export AZ_LOCAL_IP_ADDRESS=$(curl -s https://whatismyip.akamai.com)
az sql server firewall-rule create \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
Uwaga
Tworzysz serwer Azure SQL z wyłączonym uwierzytelnianiem SQL ze względu na kwestie bezpieczeństwa. Tylko identyfikator Entra firmy Microsoft jest używany do uwierzytelniania na serwerze. Jeśli musisz włączyć uwierzytelnianie SQL, zobacz az sql server create
.
Konfigurowanie i kompilowanie obrazu aplikacji
Aby wdrożyć i uruchomić aplikację Liberty w usłudze Azure Container Apps, konteneryzuj aplikację jako obraz platformy Docker przy użyciu obrazów kontenerów Open Liberty.
Wykonaj kroki opisane w tej sekcji, aby wdrożyć przykładową aplikację w środowisku uruchomieniowym Liberty. W tych krokach użyto narzędzia Maven.
Sprawdź aplikację
Użyj następujących poleceń, aby przygotować przykładowy kod dla tego przewodnika. Przykład znajduje się w witrynie GitHub.
git clone https://github.com/Azure-Samples/open-liberty-on-aca.git
cd open-liberty-on-aca
export BASE_DIR=$PWD
git checkout 20241118
Jeśli zostanie wyświetlony komunikat o stanie detached HEAD
, ten komunikat jest bezpieczny do zignorowania. To po prostu oznacza, że sprawdziłeś tag.
W tym artykule użyto języka java-app. Oto struktura plików ważnych plików aplikacji:
java-app
├─ src/main/
│ ├─ liberty/config/
│ │ ├─ server.xml
│ ├─ java/
│ ├─ resources/
│ ├─ webapp/
├─ Dockerfile
├─ pom.xml
├─ pom-azure-identity.xml
Katalogi java, zasoby i aplikacja internetowa zawierają kod źródłowy przykładowej aplikacji. Kod deklaruje i używa źródła danych o nazwie jdbc/JavaEECafeDB
.
W katalogu głównym java-app znajduje się plik Dockerfile umożliwiający utworzenie obrazu aplikacji za pomocą narzędzia Open Liberty.
W katalogu liberty/config plik server.xml służy do konfigurowania połączenia bazy danych dla biblioteki Open Liberty. Definiuje zmienną azure.sql.connectionstring
, która jest używana do nawiązywania połączenia z usługą Azure SQL Database.
Plik pom.xml to plik modelu obiektów projektu Maven (POM), który zawiera informacje o konfiguracji projektu. Plik pom-azure-identity.xml deklaruje zależność azure-identity
, która jest używana do uwierzytelniania w usługach platformy Azure przy użyciu identyfikatora Entra firmy Microsoft.
Uwaga
W tym przykładzie użyto biblioteki azure-identity
do uwierzytelniania w usłudze Azure SQL Database przy użyciu uwierzytelniania entra firmy Microsoft, co jest zalecane w przypadku zagadnień dotyczących zabezpieczeń. Jeśli potrzebujesz zastosować uwierzytelnianie SQL w aplikacji Liberty, zobacz połączenia z relacyjną bazą danych za pomocąJDBC.
Budowanie projektu
Użyj następujących poleceń, aby skompilować aplikację:
cd $BASE_DIR/java-app
mvn clean install
mvn dependency:copy-dependencies -f pom-azure-identity.xml -DoutputDirectory=target/liberty/wlp/usr/shared/resources
Jeśli kompilacja zakończy się pomyślnie, powinny zostać wyświetlone dane wyjściowe podobne do poniższych na końcu kompilacji.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 22.651 s
[INFO] Finished at: 2023-10-26T18:58:40-04:00
[INFO] ------------------------------------------------------------------------
Jeśli te dane wyjściowe nie są widoczne, rozwiąż problem przed kontynuacją.
Testowanie projektu lokalnie
Teraz możesz użyć poniższych kroków, aby uruchomić i przetestować projekt lokalnie przed wdrożeniem na platformie Azure. Dla wygody użyj liberty-maven-plugin
. Aby dowiedzieć się więcej na temat programu liberty-maven-plugin
, zobacz Tworzenie aplikacji internetowej za pomocą narzędzia Maven. W przypadku aplikacji możesz zrobić coś podobnego przy użyciu dowolnego innego mechanizmu, takiego jak lokalne środowisko IDE.
Uwaga
Jeśli wybrano wdrożenie bazy danych "bezserwerowe", sprawdź, czy baza danych SQL nie wchodzi w tryb wstrzymania. Jednym ze sposobów przeprowadzenia weryfikacji jest zalogowanie się do edytora zapytań bazy danych zgodnie z opisem w Szybki start: użycie edytora zapytań w portalu Azure (wersja zapoznawcza) do wykonywania zapytań w usłudze Azure SQL Database.
Uruchom aplikację przy użyciu polecenia
liberty:run
.cd $BASE_DIR/java-app # The value of environment variable AZURE_SQL_CONNECTIONSTRING is read by the configuration variable azure.sql.connectionstring in server.xml. export AZURE_SQL_CONNECTIONSTRING="jdbc:sqlserver://$SQL_SERVER_NAME.database.windows.net:1433;databaseName=$DB_NAME;authentication=ActiveDirectoryDefault" mvn liberty:run
Sprawdź, czy aplikacja działa zgodnie z oczekiwaniami. Jeśli się powiedzie, w wynikach polecenia powinien zostać wyświetlony komunikat podobny do
[INFO] [AUDIT ] CWWKZ0001I: Application javaee-cafe started in 11.086 seconds.
. Przejdź dohttp://localhost:9080/
w przeglądarce, aby sprawdzić, czy aplikacja jest dostępna, a wszystkie funkcje działają.Naciśnij Ctrl+C, aby zatrzymać. Wybierz Y, jeśli zostanie wyświetlony monit o zakończenie zadania wsadowego.
Po zakończeniu usuń regułę zapory, która umożliwia lokalnemu adresowi IP uzyskiwanie dostępu do usługi Azure SQL Database przy użyciu następującego polecenia:
az sql server firewall-rule delete \
--resource-group $RESOURCE_GROUP_NAME \
--server $SQL_SERVER_NAME \
--name AllowLocalIP
Tworzenie obrazu dla wdrożenia usługi Azure Container Apps
Teraz możesz uruchomić polecenie az acr build
, aby skompilować obraz, jak pokazano w poniższym przykładzie:
cd $BASE_DIR/java-app
az acr build \
--registry ${REGISTRY_NAME} \
--image javaee-cafe:v1 \
.
Polecenie az acr build
przekazuje artefakty określone w pliku Dockerfile do wystąpienia usługi Container Registry, kompiluje obraz i przechowuje je w wystąpieniu usługi Container Registry.
Wdrażanie aplikacji w usłudze Azure Container Apps
Użyj następujących poleceń, aby utworzyć wystąpienie usługi Azure Container Apps w celu uruchomienia aplikacji po ściągnięciu obrazu z usługi ACR. W tym przykładzie jest tworzone wystąpienie usługi Azure Container Apps o nazwie youracainstancename
:
export ACA_NAME=youracainstancename
az containerapp create \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--image ${ACR_LOGIN_SERVER}/javaee-cafe:v1 \
--environment $ACA_ENV \
--registry-server $ACR_LOGIN_SERVER \
--registry-identity system \
--target-port 9080 \
--ingress 'external' \
--min-replicas 1
Pomyślne dane wyjściowe to obiekt JSON, który zawiera właściwość "type": "Microsoft.App/containerApps"
.
Następnie połącz serwer usługi Azure SQL Database z aplikacją kontenera przy użyciu łącznika usługi, wykonując następujące czynności:
W tym przykładzie użyto łącznika usługi w celu ułatwienia nawiązywania połączenia z bazą danych. Aby uzyskać więcej informacji na temat łącznika usługi, zobacz Co to jest łącznik usługi? Zainstaluj rozszerzenie bez hasła dla interfejsu wiersza polecenia platformy Azure przy użyciu następującego polecenia:
az extension add --name serviceconnector-passwordless --upgrade --allow-preview true
Połącz bazę danych z aplikacją kontenera przy użyciu tożsamości zarządzanej przypisanej przez system przy użyciu następującego polecenia:
az containerapp connection create sql \ --resource-group $RESOURCE_GROUP_NAME \ --name $ACA_NAME \ --target-resource-group $RESOURCE_GROUP_NAME \ --server $SQL_SERVER_NAME \ --database $DB_NAME \ --system-identity \ --container $ACA_NAME \ --client-type java
Pomyślne dane wyjściowe to obiekt JSON, w tym właściwość
"type": "microsoft.servicelinker/linkers"
.
Uwaga
Łącznik serwisowy tworzy klucz tajny w aplikacji kontenerowej, który zawiera wartość AZURE_SQL_CONNECTIONSTRING
, będącą parametrem połączenia bez hasła do usługi Azure SQL Database. Aby uzyskać więcej informacji, zobacz przykładową wartość z sekcji Tożsamość zarządzana przypisana przez użytkownika w Integracja bazy danych Azure SQL z łącznikiem usługi.
Testowanie aplikacji
Użyj następującego polecenia, aby uzyskać w pełni kwalifikowany adres URL w celu uzyskania dostępu do aplikacji:
echo https://$(az containerapp show \
--resource-group $RESOURCE_GROUP_NAME \
--name $ACA_NAME \
--query properties.configuration.ingress.fqdn \
--output tsv)
Aby uzyskać dostęp do aplikacji i przetestować ją, otwórz przeglądarkę internetową pod adresem URL. Poniższy zrzut ekranu przedstawia uruchomioną aplikację:
Czyszczenie zasobów
Aby uniknąć opłat za platformę Azure, należy wyczyścić niepotrzebne zasoby. Gdy klaster nie jest już potrzebny, użyj polecenia az group delete
, aby usunąć grupę zasobów, rejestr kontenerów, aplikacje kontenerów, serwer bazy danych i wszystkie powiązane zasoby.
az group delete --name $RESOURCE_GROUP_NAME --yes --no-wait
Następne kroki
Więcej informacji można uzyskać w dokumentacji używanej w tym przewodniku:
- Azure Container Apps
- Integracja usługi Azure SQL Database z Service Connector
- Połączenie przy użyciu uwierzytelniania Microsoft Entra
- Open Liberty
- Konfiguracja serwera Open Liberty Server
- Wtyczka Liberty Maven
- Obrazy kontenerów Open Liberty
Aby zapoznać się z opcjami uruchamiania produktów WebSphere na platformie Azure, zobacz Co to są rozwiązania do uruchamiania rodziny produktów WebSphere na platformie Azure?