Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikację z wieloma kontenerami można wdrożyć w usłudze Azure Container Apps przy użyciu programu Visual Studio. Zazwyczaj każdy kontener wdraża się w oddzielnym wystąpieniu aplikacji kontenera, ale wszystkie kontenery aplikacji umieszcza się w tym samym środowisku aplikacji kontenerowej, aby umożliwić im łatwą i bezpieczną komunikację między sobą. Każdą aplikację kontenera można skonfigurować tak, aby akceptowała żądania z poziomu środowiska kontenera lub zezwalała na ruch zewnętrzny. Usługa Azure Container Apps jest wysoce elastyczna i konfigurowalna, umożliwiając korzystanie z wielu możliwych scenariuszy mikrousług oraz pełny zestaw zaawansowanych narzędzi do monitorowania. Jeśli używasz narzędzia Docker Compose do zarządzania lokalnymi aplikacjami kontenerów, możesz rozważyć próbę przeniesienia jej do środowiska aplikacji kontenera na platformie Azure.
Proces obejmuje kilka kroków przy użyciu programu Visual Studio i witryny Azure Portal. Możesz również użyć interfejsu wiersza polecenia platformy Azure do wykonania tych akcji, ale wykracza to poza zakres tego samouczka. Najpierw używamy aplikacji utworzonej przy użyciu polecenia Tworzenie aplikacji z wieloma kontenerami i wdrażamy ją przy użyciu procesu publikowania . Program Visual Studio przeprowadzi Cię przez kroki tworzenia pierwszej aplikacji kontenera, środowiska aplikacji kontenera, a także tworzenia rejestru kontenerów do przechowywania obrazów kontenerów. Następnie ponownie przeprowadzisz proces publikowania z inną aplikacją kontenera. W szczególności należy wybrać to samo środowisko aplikacji kontenera w procesie publikowania. Na koniec trzeba skonfigurować pamięć podręczną Redis do pracy z usługą Azure Redis Cache. Zmodyfikujesz kod konfiguracji pamięci podręcznej i ponownie opublikujesz internetowy interfejs API. Następnie skonfigurujesz uprawnienia, aby udzielić przypisanej przez system tożsamości zarządzanej aplikacji dostępu do pamięci podręcznej.
Wymagania wstępne
- Subskrypcja platformy Azure. Utwórz konto w celu uzyskania bezpłatnej wersji próbnej.
- Program Visual Studio z zainstalowanymi pakietami roboczymi Programowaniena platformie Azure oraz ASP.NET i tworzenie aplikacji internetowych .
- Projekt MulticontainerSample znajduje się w folderze
https://github.com/MicrosoftDocs/vs-tutorial-samplesw . Przykładowe rozwiązanie zawiera dwa projekty: zaplecze aplikacyjne (Web API) i front-end oparty na ASP.NET Razor, które zostały utworzone w innym samouczku. Możesz również utworzyć dwa projekty od podstaw, ponieważ są to bardzo proste modyfikacje szablonów domyślnych, postępując zgodnie z tym samouczkiem. Kroki narzędzia Docker Compose można pominąć.
Wymagania wstępne
- Subskrypcja platformy Azure. Utwórz konto w celu uzyskania bezpłatnej wersji próbnej.
- Program Visual Studio lub nowszy z zainstalowanymi pakietami roboczymi Programowaniena platformie Azure oraz ASP.NET i tworzenie aplikacji internetowych .
- Projekt MulticontainerSample znajduje się w folderze
https://github.com/MicrosoftDocs/vs-tutorial-samplesw . Przykładowe rozwiązanie zawiera dwa projekty: zaplecze aplikacyjne (Web API) i front-end oparty na ASP.NET Razor, które zostały utworzone w innym samouczku. Możesz również utworzyć dwa projekty od podstaw, ponieważ są to bardzo proste modyfikacje szablonów domyślnych, postępując zgodnie z tym samouczkiem. Kroki narzędzia Docker Compose można pominąć.
Wdrażanie zaplecza internetowego interfejsu API
W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy na węzeł projektu interfejsu Web API, a następnie wybierz pozycję Publikuj.
Wybierz docelową platformę Azure, a następnie wybierz pozycję Azure Container Apps.
Jeśli jeszcze nie zalogowałeś się przy użyciu konta skojarzonego z subskrypcją platformy Azure, możesz zalogować się teraz lub zmienić dzierżawę, jeśli chcesz.
Na ekranie, na którym określisz aplikację kontenera, wybierz pozycję Utwórz nową , aby utworzyć nową aplikację kontenera.
Na stronie Tworzenie aplikacji kontenera platformy Azure wprowadź szczegóły, takie jak grupa zasobów. W tym kroku utworzysz nową grupę zasobów, nowe środowisko kontenera i nowy rejestr kontenerów.
Utworzenie zasobów może trochę potrwać. Po zakończeniu kliknij przycisk Dalej , aby przejść do następnego kroku.
W następnym kroku utworzysz rejestr kontenerów. Jeśli tworzysz nowy rejestr kontenerów, zostanie wyświetlony monit o podanie kilku szczegółów. Możesz wybrać ten sam region i grupę zasobów co aplikacja kontenera.
W następnym kroku zostanie wyświetlony monit o wybranie typu kompilacji kontenera. Wybierz SDK platformy .NET, jeśli nie masz pliku Dockerfile, lub Docker Desktop, jeśli go masz.
Dla typu wdrożenia wybierz pozycję Publikuj (generuj plik pubxml), aby utworzyć profil publikowania.
Wybierz pozycję Zakończ , aby ukończyć proces publikowania i utworzyć profil publikowania. Jeśli zostanie wyświetlony monit o dodatkową konfigurację dostępu do opublikowanego kontenera, wybierz pozycję Tak.
Zobaczysz stronę przedstawiającą aktywność na platformie Azure, a po jej zamknięciu ekran Publikowania zawiera teraz informacje o aplikacji kontenera, takie jak adres URL dla dostępu do interfejsu API sieciowego.
Kliknij przycisk Publikuj, aby opublikować w aplikacji kontenera platformy Azure. Program Visual Studio żąda utworzenia zasobów platformy Azure i uruchamia proces publikowania aplikacji kontenera WebAPI.
Program Visual Studio może spróbować załadować stronę dla nowej aplikacji kontenera, ale nie powinno to działać na tym etapie.
Teraz, gdy już raz opublikowałeś i stworzyłeś profil publikowania (.pubxml plik), nie musisz powtarzać tych kroków przy następnym opublikowaniu. Wystarczy kliknąć przycisk Publikuj na tym ekranie, chyba że chcesz zacząć od nowa lub zmienić dowolne określone zasoby platformy Azure.
Później użyjesz Azure Portal, aby wprowadzić dalsze zmiany konfiguracji dla Ingress i wspierać usługę Azure Redis Cache, ale najpierw w następnej sekcji opublikujesz front-end webowy.
Wdrażanie front-endu
Zmodyfikuj plik kodu front-endu w Index.cshtml.cs, aby odwołać się do nowego adresu URL aplikacji kontenerowej API sieci Web. Jest to nazwa wyświetlana w obszarze Nazwa zasobu na ekranie publikowania interfejsu API sieci Web. W przypadku komunikacji między kontenerami można bezpośrednio użyć protokołu HTTP z nazwą aplikacji kontenera bez określania w pełni kwalifikowanej nazwy domeny (FQDN) i numeru portu. W metodzie
OnGetzastąp istniejący wiersz, który ustawiaRequestUri, aby odwoływać się do nazwy kontenerowej aplikacji Web API, jak w poniższym kodzie.request.RequestUri = new Uri("http://<mywebapi-container-app-name>/Counter");W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy węzeł projektu dla projektu Webfrontend, a następnie wybierz pozycję Publikuj. Na następnym ekranie wybierz pozycję Utwórz nową , aby utworzyć nową aplikację kontenera.
Na ekranie Tworzenie nowej aplikacji kontenerowej Azure wybierz tę samą grupę zasobów i to samo środowisko kontenerowe, które utworzyłeś podczas publikowania projektu Web API.
Ważne! Wybierz ten sam rejestr kontenerów, który został utworzony wcześniej.
Wybierz te same opcje, co w przypadku internetowego interfejsu API, aby wykonać inne kroki. Typ kompilacji kontenera to Docker Desktop, a typ wdrożenia to Publish (generuje plik pubxml).
Wybierz pozycję Zakończ , aby ukończyć proces publikowania i utworzyć profil publikowania. Zostanie wyświetlona strona przedstawiająca aktywność na platformie Azure, a po jej zamknięciu ekran Publikowania zawiera teraz informacje o aplikacji kontenera, takie jak adres URL dla ruchu przychodzącego do aplikacji Webfrontend.
Wyświetlanie i konfigurowanie aplikacji kontenera w witrynie Azure Portal
- Zaloguj się do witryny Azure Portal.
- Wyszukaj aplikacje kontenerowe i znajdź te, które właśnie utworzyłeś.
- Wybierz Ingress i skonfiguruj następujące opcje.
Na ekranie Ingress ustaw Ruch przychodzący na Ograniczone do środowiska aplikacji kontenerowych. Oznacza to, że tylko usługa Webfrontend może wysyłać żądania. Nawet Visual Studio nie uzyska dostępu do tej usługi. Na przykład, po zakończeniu procesu publikowania, kiedy Visual Studio spróbuje załadować stronę, zamiast dostępu do usługi, w przeglądarce pojawi się błąd. Jest to oczekiwane.
Sprawdź port Ingress (powinien być 8080). Używasz protokołu HTTP do wywołania interfejsu API i możesz bezpośrednio odwoływać się do aplikacji kontenerowej według nazwy w identyfikatorze URI żądania. W pełni kwalifikowana nazwa domeny (FQDN) wygenerowana przez aplikacje kontenerowe platformy Azure używa adresu URL HTTPS (jak pokazano w programie Visual Studio na ekranie publikowania), jednak ruch wewnętrzny może ominąć konieczność używania tego adresu.
W przypadku komponentu Ingress Webfrontend można zaakceptować wartości domyślne. Port docelowy wynosi 8080, ponieważ Ingress obsługuje wszystkie żądania przychodzące bezpiecznie przy użyciu nazwy FQDN i protokołu HTTPS (lub przekierowania HTTP do HTTPS), a następnie przekazuje je do Webfrontend za pomocą protokołu HTTP na porcie kontenera 8080.
Tworzenie pamięci podręcznej Azure Redis
Wykonaj następujące kroki, aby utworzyć pamięć podręczną Azure Redis Cache w tej samej grupie zasobów co aplikacje kontenerowe.
W portalu Azure otwórz utworzoną wcześniej aplikację kontenera Web API. Otwórz ekran Łącznik usługi i wybierz pozycję Utwórz. Zostanie wyświetlona sekcja Tworzenie połączenia .
Na ekranie Tworzenie połączenia wprowadź typ usługi jako Pamięć podręczna dla Redis, a następnie wybierz Utwórz nową, aby utworzyć nową pamięć podręczną Redis.
Wybierz pamięć podręczną lub postępuj zgodnie z linkiem Utwórz nową , aby utworzyć pamięć podręczną. Jeśli tworzysz nową pamięć podręczną, może być konieczne, aby wrócić do aplikacji kontenerowej i łącznika usługi oraz powtórzyć poprzednie kroki, aby utworzyć połączenie.
W przypadku bazy danych wybierz pozycję "0", aby utworzyć pierwszą numerowaną bazę danych dla tej pamięci podręcznej.
Przejdź do karty Uwierzytelnianie . Wybierz pozycję Tożsamość zarządzana przypisana przez system. Zaakceptuj wszystkie inne wartości domyślne i wybierz pozycję Utwórz. Spowoduje to utworzenie połączenia z pamięcią podręczną.
Wróć do sekcji Łącznik usługi w aplikacji kontenera interfejsu API sieci Web, odśwież stronę, aby zobaczyć nowo połączoną pamięć podręczną (jeśli jeszcze jej nie widzisz) i zaznacz pole wyboru obok pamięci podręcznej. Wybierz pozycję Weryfikuj , aby sprawdzić stan połączenia. Węzeł pamięci podręcznej można rozwinąć, aby wyświetlić wartości zmiennych środowiskowych dla tej pamięci podręcznej platformy Azure. Na potrzeby tego samouczka potrzebujesz tylko AZURE_REDIS_HOST, ale możesz użyć innych elementów w kodzie rzeczywistym lub w celu uzyskania bardziej kompletnej konfiguracji. Użyj tutaj wartości, aby ustawić zmienne środowiskowe w pliku Dockerfile zgodnie z opisem w następnej sekcji, aby internetowy interfejs API mógł nawiązać połączenie z pamięcią podręczną.
Aby uzyskać więcej informacji, zobacz Szybki start: tworzenie połączenia usługi dla usługi Azure Container Apps w witrynie Azure Portal.
Konfigurowanie ról dla tożsamości zarządzanej
W portalu Azure używasz kontroli dostępu (IAM) w usłudze Azure Redis Cache, aby nadać dostęp Współtwórcy do zarządzanej tożsamości przypisanej przez system dla aplikacji kontenera.
- W witrynie Azure Portal otwórz stronę usługi Azure Redis Cache i wybierz pozycję Kontrola dostępu (IAM).
- Wybierz kolejno Dodaj>Dodaj przypisanie roli. Otwarcie strony Dodawanie przypisania roli.
- Wybierz kartę Członkowie i wybierz pozycję Tożsamość zarządzana.
- Wybierz Wybierz członków. Zostanie otwarta strona Wybieranie członków, a następnie wybierz Tożsamość zarządzaną przypisaną przez system.
- Wybierz Aplikacja kontenerowa i wybierz aplikację kontenerową interfejsu API sieciowego.
- Na karcie Rola wybierz pozycję Kontrybutor Redis Cache.
- Wybierz pozycję Przejrzyj i przypisz. System przetwarza żądanie.
- Otwórz Przypisywanie ról, aby wyświetlić tożsamość zarządzaną przypisaną przez system w ramach roli Kontrybutor usługi Redis Cache.
Następnym krokiem jest zmodyfikowanie konfiguracji pamięci podręcznej w kliencie interfejsu API sieci Web w celu użycia DefaultAzureCredential, co jest zalecanym sposobem uwierzytelniania w przypadku korzystania z tożsamości zarządzanej przypisanej systemowo. Każda osoba, która uzyskuje dostęp do aplikacji zewnętrznie, nie musi mieć określonych przypisań ról na poziomie użytkownika w celu uzyskania dostępu do zasobów za pośrednictwem tej formy zarządzania tożsamościami. Aby uzyskać więcej informacji, zobacz Integracja usługi Azure Redis Cache - zarządzana tożsamość przypisana przez system.
Zmodyfikuj projekt Web API, aby odwoływać się do usługi Azure Redis Cache.
Przed opublikowaniem projektu internetowego interfejsu API do uruchomienia na platformie Azure zaktualizuj go w celu odwołania się do usługi Azure Redis Cache i użyj tożsamości zarządzanej, aby bezpiecznie uzyskać do niej dostęp. W tym celu można zmodyfikować kod konfiguracji pamięci podręcznej w Program.cs.
W przypadku usługi Azure Redis Cache należy ustawić zmienną środowiskową AZURE_REDIS_HOST z informacjami o połączeniu, a następnie odczytać ją w kodzie uruchamiania w celu nawiązania połączenia z usługą Azure Redis Cache i skonfigurować pamięć podręczną.
Z pomocą Azure.Identity uzyskuje się DefaultAzureCredential, które obsługuje bezpieczne uwierzytelnianie przy użyciu tożsamości zarządzanej.
W programie Visual Studio w projekcie Web API dodaj odwołanie do pakietów NuGet
Azure IdentityiMicrosoft.Azure.StackExchange.Redis.Dodaj dyrektywy 'using' dla pakietów, które właśnie dodałeś.
using Azure.Identity; using Microsoft.Azure.StackExchange.Redis;Zaktualizuj kod konfiguracji Redis Cache. Usuń stary kod i zastąp go następującym kodem. Możesz przejrzeć komentarze później i odkomentować dowolny opcjonalny kod, aby dopasować go do własnych bardziej zaawansowanych scenariuszy.
// Check the environment variable for the Redis cache host name var cacheHostName = Environment.GetEnvironmentVariable("AZURE_REDIS_HOST"); if (string.IsNullOrEmpty(cacheHostName)) { throw new InvalidOperationException("The environment variable 'AZURE_REDIS_HOST' is not set."); } var configurationOptions = ConfigurationOptions.Parse($"{cacheHostName}:6380"); // For system-assigned identity. // In the Azure portal, we need to set up Redis service to grant Contributor access to the system-assigned identity // for the container app that hosts this Web API service. await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential()); var connectionMultiplexer = await ConnectionMultiplexer.ConnectAsync(configurationOptions); builder.Services.AddStackExchangeRedisCache(options => { options.ConfigurationOptions = configurationOptions; options.InstanceName = "SampleInstance"; }); // Uncomment the following line if you need to use the ConnectionMultiplexer directly // (for example, for advanced Redis operations like Pub/Sub or working with Redis data structures). // builder.Services.AddSingleton<IConnectionMultiplexer>(sp => // ConnectionMultiplexer.Connect(configurationOptions));Metoda uwierzytelniania ustawiona wcześniej podczas tworzenia połączenia pamięci podręcznej to zarządzana tożsamość przypisana przez system, więc kod tutaj jest zgodny z tym wyborem. Jeśli chcesz również użyć innych metod uwierzytelniania, musisz wprowadzić zmiany w kodzie tutaj. Zobacz Integrowanie usługi Azure Redis Cache — tożsamość zarządzana przypisana przez system.
Skompiluj projekt internetowego interfejsu API, aby sprawdzić, czy nie ma żadnych błędów.
Jeśli masz plik Dockerfile, zaktualizuj podstawowy etap pliku Dockerfile, aby zdefiniować zmienną środowiskową
AZURE_REDIS_HOST. Host jest pobierany z witryny Azure Portal podczas tworzenia pamięci podręcznej Azure Redis Cache lub z sekcji Łącznik usługi na stronie aplikacji kontenera interfejsu API sieci Web w portalu (zobacz poprzednią sekcję).ENV AZURE_REDIS_HOST mycache.redis.cache.windows.net(Opcjonalnie) Można zdefiniować inne opcje konfiguracji w zmiennych środowiskowych, na przykład
AZURE_REDIS_PORT, co jest zwykle 6380. Dla uproszczenia ta wartość jest zakodowana na stałe zamiast używać zmiennej środowiskowej. Możesz również ustawićASPNETCORE_ENVIRONMENTna Rozwój.Jeśli używasz kontenerowego typu kompilacji .NET SDK (bez pliku Dockerfile), możesz ustawić zmienną środowiskową w launchSettings.json w sekcji
profiles > http."http": { "commandName": "Project", "dotnetRunMessages": true, "launchBrowser": true, "launchUrl": "swagger", "applicationUrl": "http://localhost:5107", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development", "AZURE_REDIS_HOST": "cache11.redis.cache.windows.net" } }Jesteś gotowy do opublikowania i zweryfikowania tych zmian. Wybierz przycisk Publikuj na ekranie Publikowanie . Program Visual Studio podejmie próbę załadowania strony, ale zakończy się to niepowodzeniem, ponieważ interfejs API kontenera nie jest dostępny dla żądań spoza środowiska aplikacji kontenera.
Przed uruchomieniem aplikacji za pomocą usługi Azure Redis Cache należy skonfigurować tożsamość zarządzaną z odpowiednimi uprawnieniami dostępu do pamięci podręcznej.
Testowanie aplikacji
Wróć do ekranu Publikowanie w projekcie Webfrontend i kliknij link w adresie URL aplikacji Webfrontend. Powinieneś zobaczyć aplikację Webfrontend z licznikiem, który aktualizuje się po odświeżeniu strony.
Wskazówka
Usługa Azure Container Apps ma na celu zmaksymalizowanie dostępności Twoich usług. Jeśli coś pójdzie nie tak z jedną z usług, na przykład jeśli nie przejdzie sondy kondycji, Azure Container Apps nie ustawi jej jako aktywnej poprawki ani nie użyje jej do obsługi żądań. W związku z tym podczas procesu programowania i testowania możesz od czasu do czasu stwierdzić, że najnowsze wprowadzone zmiany nie zostaną odzwierciedlone w witrynie na żywo. W witrynie Azure Portal wybierz pozycję Poprawki i repliki , aby wyświetlić stan najnowszej opublikowanej poprawki. W tym miejscu możesz otworzyć dzienniki, aby rozwiązać ten problem.
Gratulacje! Pomyślnie przesłałeś aplikację wielokontenerową do usługi Azure Container Apps i zweryfikowałeś komunikację między kontenerami oraz użycie usługi Azure Redis Cache w aplikacji.
Uprzątnij zasoby
Aby wyczyścić zasoby utworzone podczas tego samouczka, przejdź do witryny Azure Portal i usuń grupę zasobów zawierającą aplikacje kontenerów, pamięć podręczną i rejestr kontenerów.
Dalsze kroki
- Dowiedz się więcej o usłudze Azure Container Apps.
- Dowiedz się więcej o technologii .NET Aspire, która ułatwia tworzenie złożonych konteneryzowanych aplikacji i usług, które integrują się z różnymi zasobami na platformie Azure. Platforma .NET Aspire obsługuje orkiestrację czasu programowania, ustandaryzowaną integrację z tablicą usług, a także obsługę narzędzi przy użyciu szablonów projektów programu Visual Studio.
- Możesz również używać interfejsu wiersza polecenia (CLI) platformy Azure do pracy z aplikacjami kontenerowymi. Zainstaluj interfejs wiersza polecenia platformy Azure i rozpocznij pracę z usługą Azure Container Apps przy użyciu poleceń interfejsu wiersza polecenia platformy Azure, wykonując czynności opisane w temacie Deploy Azure Container Apps with the az containerapp up command (Wdrażanie usługi Azure Container Apps za pomocą polecenia az containerapp up).