Wdrażanie aplikacji Java przy użyciu biblioteki Open Liberty lub WebSphere Liberty w usłudze Azure Container Apps
W tym artykule pokazano, jak uruchomić program Open Liberty lub WebSphere Liberty w usłudze Azure Container Apps. W tym artykule wykonasz następujące działania:
- Uruchom aplikację Java, Java EE, Jakarta EE lub MicroProfile w środowisku uruchomieniowym Open Liberty lub WebSphere Liberty.
- Skompiluj obraz platformy 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. Aby uzyskać więcej informacji na temat IBM WebSphere Liberty, zobacz stronę produktu WebSphere Liberty.
Ten artykuł ma pomóc w szybkim rozpoczęciu wdrażania. Przed przejściem do środowiska produkcyjnego należy zapoznać się z tematem Tuning Liberty.
Jeśli chcesz przekazać opinię lub ściśle pracować nad scenariuszami migracji z zespołem inżynierów opracowującym rozwiązanie WebSphere na platformie Azure, wypełnij tę krótką ankietę dotyczącą migracji webSphere i dołącz 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.
- Zaloguj się za pomocą interfejsu wiersza poleceń platformy Azure, używając polecenia
az login
. Aby ukończyć proces uwierzytelniania, wykonaj kroki wyświetlane w terminalu. Zobacz Logowanie się do platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure, aby uzyskać inne opcje logowania. - Po wyświetleniu monitu 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
.
- Zaloguj się za pomocą interfejsu wiersza poleceń platformy Azure, używając polecenia
- Zainstaluj implementację java 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ń interfejsu wiersza polecenia platformy Azure można uruchamiać w programie PowerShell tak samo jak w powłoce Bash. Różnica istnieje tylko w przypadku używania zmiennych. W poniższych sekcjach różnica jest rozwiązywana na różnych kartach w razie potrzeby.
Jeśli masz wiele dzierżaw platformy Azure skojarzonych z poświadczeniami platformy Azure, musisz określić dzierżawę, do której chcesz się zalogować. 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 przy użyciu tej, której 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 wystąpienia usługi Azure Container Registry (ACR) i wystąpienia usługi Azure Container Apps.
export RESOURCE_GROUP_NAME=java-liberty-project
az group create --name $RESOURCE_GROUP_NAME --location eastus2
Tworzenie wystąpienia usługi 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 lub obrazów kontenerów WebSphere 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.
Wyewidencjonowywanie aplikacji
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. Oznacza to po prostu sprawdzenie tagu.
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
├─ Dockerfile-wlp
├─ 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 istnieją dwa pliki do utworzenia obrazu aplikacji za pomocą polecenia Open Liberty lub WebSphere Liberty.
W katalogu liberty/config plik server.xml służy do konfigurowania połączenia bazy danych dla klastra Open Liberty i WebSphere 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.
Kompilowanie 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, przed kontynuowaniem rozwiąż problem i rozwiąż go.
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, w tym 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ść w sekcji tożsamości zarządzanej przypisanej przez użytkownika z Integracja Azure SQL Database 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
- Otwieranie obrazów kontenera Liberty
- Obrazy kontenerów WebSphere 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?