Co to jest model usługi w chmurze (wersja klasyczna) i jak mogę go spakowania?

Ważne

Cloud Services (wersja klasyczna) jest teraz przestarzała dla nowych klientów i zostanie wycofana 31 sierpnia 2024 r. dla wszystkich klientów. Nowe wdrożenia powinny używać nowego modelu wdrażania opartego na usłudze Azure Resource Manager Azure Cloud Services (wsparcie dodatkowe).

Usługa w chmurze jest tworzona na podstawie trzech składników, definicji usługi (csdef), konfiguracji usługi (cscfg) i pakietu usługi (cspkg). Pliki ServiceDefinition.csdef i ServiceConfig.cscfg są oparte na formacie XML i opisują strukturę usługi w chmurze oraz sposób jej konfigurowania; nazwany zbiorczo modelem. Plik ServicePackage.cspkg jest plikiem zip generowanym na podstawie pliku ServiceDefinition.csdef i między innymi zawiera wszystkie wymagane zależności binarne. Platforma Azure tworzy usługę w chmurze zarówno z pliku ServicePackage.cspkg , jak i serviceConfig.cscfg.

Po uruchomieniu usługi w chmurze na platformie Azure można ją ponownie skonfigurować za pomocą pliku ServiceConfig.cscfg , ale nie można zmienić definicji.

O czym chcesz dowiedzieć się więcej?

ServiceDefinition.csdef

Plik ServiceDefinition.csdef określa ustawienia używane przez platformę Azure do konfigurowania usługi w chmurze. Schemat definicji usługi platformy Azure (plik csdef) udostępnia dozwolony format pliku definicji usługi. W poniższym przykładzie przedstawiono ustawienia, które można zdefiniować dla ról Sieć Web i Proces roboczy:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole1" vmsize="Medium">
    <Sites>
      <Site name="Web">
        <Bindings>
          <Binding name="HttpIn" endpointName="HttpIn" />
        </Bindings>
      </Site>
    </Sites>
    <Endpoints>
      <InputEndpoint name="HttpIn" protocol="http" port="80" />
      <InternalEndpoint name="InternalHttpIn" protocol="http" />
    </Endpoints>
    <Certificates>
      <Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" />
    </Certificates>
    <Imports>
      <Import moduleName="Connect" />
      <Import moduleName="Diagnostics" />
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <LocalResources>
      <LocalStorage name="localStoreOne" sizeInMB="10" />
      <LocalStorage name="localStoreTwo" sizeInMB="10" cleanOnRoleRecycle="false" />
    </LocalResources>
    <Startup>
      <Task commandLine="Startup.cmd" executionContext="limited" taskType="simple" />
    </Startup>
  </WebRole>

  <WorkerRole name="WorkerRole1">
    <ConfigurationSettings>
      <Setting name="DiagnosticsConnectionString" />
    </ConfigurationSettings>
    <Imports>
      <Import moduleName="RemoteAccess" />
      <Import moduleName="RemoteForwarder" />
    </Imports>
    <Endpoints>
      <InputEndpoint name="Endpoint1" protocol="tcp" port="10000" />
      <InternalEndpoint name="Endpoint2" protocol="tcp" />
    </Endpoints>
  </WorkerRole>
</ServiceDefinition>

Możesz zapoznać się ze schematem definicji usługi , aby lepiej zrozumieć schemat XML użyty tutaj, jednak poniżej przedstawiono krótkie wyjaśnienie niektórych elementów:

Witryny
Zawiera definicje witryn internetowych lub aplikacji internetowych hostowanych w usługach IIS7.

InputEndpoints
Zawiera definicje punktów końcowych używanych do kontaktowania się z usługą w chmurze.

Wewnętrzne punkty końcowe
Zawiera definicje punktów końcowych, które są używane przez wystąpienia ról do komunikowania się ze sobą.

Configurationsettings
Zawiera definicje ustawień dla funkcji określonej roli.

Certyfikaty
Zawiera definicje certyfikatów, które są wymagane dla roli. W poprzednim przykładzie kodu pokazano certyfikat używany do konfiguracji programu Azure Connect.

Zasoby lokalne
Zawiera definicje zasobów magazynu lokalnego. Zasób magazynu lokalnego jest katalogiem zarezerwowanym w systemie plików maszyny wirtualnej, na której jest uruchomione wystąpienie roli.

Przywozu
Zawiera definicje importowanych modułów. W poprzednim przykładzie kodu pokazano moduły podłączania pulpitu zdalnego i programu Azure Connect.

Uruchamianie
Zawiera zadania uruchamiane po uruchomieniu roli. Zadania są definiowane w pliku cmd lub pliku wykonywalnym.

ServiceConfiguration.cscfg

Konfiguracja ustawień usługi w chmurze zależy od wartości w pliku ServiceConfiguration.cscfg . Należy określić liczbę wystąpień, które mają zostać wdrożone dla każdej roli w tym pliku. Wartości ustawień konfiguracji zdefiniowanych w pliku definicji usługi są dodawane do pliku konfiguracji usługi. Odciski palca dla wszystkich certyfikatów zarządzania skojarzonych z usługą w chmurze są również dodawane do pliku. Schemat konfiguracji usługi platformy Azure (plik cscfg) udostępnia dozwolony format pliku konfiguracji usługi.

Plik konfiguracji usługi nie jest spakowany z aplikacją, ale jest przekazywany na platformę Azure jako oddzielny plik i służy do konfigurowania usługi w chmurze. Możesz przekazać nowy plik konfiguracji usługi bez ponownego wdrożenia usługi w chmurze. Wartości konfiguracji usługi w chmurze można zmienić podczas działania usługi w chmurze. W poniższym przykładzie przedstawiono ustawienia konfiguracji, które można zdefiniować dla ról Sieć Web i Proces roboczy:

<?xml version="1.0"?>
<ServiceConfiguration serviceName="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration">
  <Role name="WebRole1">
    <Instances count="2" />
    <ConfigurationSettings>
      <Setting name="SettingName" value="SettingValue" />
    </ConfigurationSettings>

    <Certificates>
      <Certificate name="CertificateName" thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
      <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption"
         thumbprint="CertThumbprint" thumbprintAlgorithm="sha1" />
    </Certificates>
  </Role>
</ServiceConfiguration>

Możesz zapoznać się ze schematem konfiguracji usługi , aby lepiej zrozumieć schemat XML używany tutaj, jednak poniżej przedstawiono krótkie wyjaśnienie elementów:

Wystąpienia
Konfiguruje liczbę uruchomionych wystąpień dla roli. Aby zapobiec potencjalnie niedostępności usługi w chmurze podczas uaktualniania, zaleca się wdrożenie więcej niż jednego wystąpienia ról dostępnych w Internecie. Wdrażając więcej niż jedno wystąpienie, przestrzegasz wytycznych w umowie dotyczącej poziomu usług obliczeniowych (SLA) platformy Azure, która gwarantuje łączność zewnętrzną na poziomie 99,95% dla ról dostępnych z Internetu po wdrożeniu co najmniej dwóch wystąpień roli dla usługi.

Configurationsettings
Konfiguruje ustawienia dla uruchomionych wystąpień roli. Nazwa <Setting> elementów musi być zgodna z definicjami ustawień w pliku definicji usługi.

Certyfikaty
Konfiguruje certyfikaty używane przez usługę. W poprzednim przykładzie kodu pokazano, jak zdefiniować certyfikat dla modułu RemoteAccess. Wartość atrybutu odcisku palca musi być ustawiona na odcisk palca certyfikatu do użycia.

Uwaga

Odcisk palca certyfikatu można dodać do pliku konfiguracji przy użyciu edytora tekstów. Można również dodać wartość na karcie Certyfikaty na stronie Właściwości roli w programie Visual Studio.

Definiowanie portów dla wystąpień roli

Platforma Azure zezwala tylko na jeden punkt wejścia do roli internetowej. Oznacza to, że cały ruch odbywa się za pośrednictwem jednego adresu IP. Witryny internetowe można skonfigurować tak, aby współużytkować port, konfigurując nagłówek hosta w celu przekierowania żądania do poprawnej lokalizacji. Możesz również skonfigurować aplikacje do nasłuchiwania dobrze znanych portów na adresie IP.

Poniższy przykład przedstawia konfigurację roli sieci Web z witryną internetową i aplikacją internetową. Witryna internetowa jest skonfigurowana jako domyślna lokalizacja wpisu na porcie 80, a aplikacje internetowe są skonfigurowane do odbierania żądań z alternatywnego nagłówka hosta o nazwie "mail.mysite.cloudapp.net".

<WebRole>
  <ConfigurationSettings>
    <Setting name="DiagnosticsConnectionString" />
  </ConfigurationSettings>
  <Endpoints>
    <InputEndpoint name="HttpIn" protocol="http" port="80" />
    <InputEndpoint name="Https" protocol="https" port="443" certificate="SSL"/>
    <InputEndpoint name="NetTcp" protocol="tcp" port="808" certificate="SSL"/>
  </Endpoints>
  <LocalResources>
    <LocalStorage name="Sites" cleanOnRoleRecycle="true" sizeInMB="100" />
  </LocalResources>
  <Site name="Mysite" packageDir="Sites\Mysite">
    <Bindings>
      <Binding name="http" endpointName="HttpIn" />
      <Binding name="https" endpointName="Https" />
      <Binding name="tcp" endpointName="NetTcp" />
    </Bindings>
  </Site>
  <Site name="MailSite" packageDir="MailSite">
    <Bindings>
      <Binding name="mail" endpointName="HttpIn" hostHeader="mail.mysite.cloudapp.net" />
    </Bindings>
    <VirtualDirectory name="artifacts" />
    <VirtualApplication name="storageproxy">
      <VirtualDirectory name="packages" packageDir="Sites\storageProxy\packages"/>
    </VirtualApplication>
  </Site>
</WebRole>

Zmienianie konfiguracji roli

Możesz zaktualizować konfigurację usługi w chmurze, gdy jest ona uruchomiona na platformie Azure, bez przełączenia usługi w tryb offline. Aby zmienić informacje o konfiguracji, możesz przekazać nowy plik konfiguracji lub edytować plik konfiguracji i zastosować go do uruchomionej usługi. W konfiguracji usługi można wprowadzić następujące zmiany:

  • Zmienianie wartości ustawień konfiguracji
    Gdy ustawienie konfiguracji ulegnie zmianie, wystąpienie roli może zdecydować się na zastosowanie zmiany, gdy wystąpienie jest w trybie online, lub aby bezpiecznie odzyskać wystąpienie i zastosować zmianę, gdy wystąpienie jest w trybie offline.
  • Zmienianie topologii usługi wystąpień roli
    Zmiany topologii nie mają wpływu na uruchomione wystąpienia, z wyjątkiem sytuacji, w których wystąpienie jest usuwane. Wszystkie pozostałe wystąpienia zazwyczaj nie muszą być poddawane recyklingu; Można jednak wybrać odtwarzanie wystąpień roli w odpowiedzi na zmianę topologii.
  • Zmienianie odcisku palca certyfikatu
    Certyfikat można zaktualizować tylko wtedy, gdy wystąpienie roli jest w trybie offline. Jeśli certyfikat jest dodawany, usuwany lub zmieniany, gdy wystąpienie roli jest w trybie online, platforma Azure bezpiecznie przełącza wystąpienie w tryb offline, aby zaktualizować certyfikat i przywrócić go do trybu online po zakończeniu zmiany.

Obsługa zmian konfiguracji za pomocą zdarzeń środowiska uruchomieniowego usługi

Biblioteka środowiska uruchomieniowego platformy Azure zawiera przestrzeń nazw Microsoft.WindowsAzure.ServiceRuntime, która udostępnia klasy umożliwiające interakcję ze środowiskiem platformy Azure z roli. Klasa RoleEnvironment definiuje następujące zdarzenia, które są wywoływane przed i po zmianie konfiguracji:

  • Zmienianie zdarzenia
    Dzieje się tak przed zastosowaniem zmiany konfiguracji do określonego wystąpienia roli, co daje szansę na usunięcie wystąpień roli w razie potrzeby.
  • Zmienione zdarzenie
    Występuje po zastosowaniu zmiany konfiguracji do określonego wystąpienia roli.

Uwaga

Ponieważ zmiany certyfikatu zawsze powodują przełączenie wystąpień roli w tryb offline, nie zgłaszają one zdarzeń RoleEnvironment.Changing lub RoleEnvironment.Changed.

ServicePackage.cspkg

Uwaga

Maksymalny rozmiar pakietu, który można wdrożyć, wynosi 600 MB

Aby wdrożyć aplikację jako usługę w chmurze na platformie Azure, należy najpierw spakować aplikację w odpowiednim formacie. Możesz użyć narzędzia wiersza polecenia CSPack (zainstalowanego z zestawem Azure SDK), aby utworzyć plik pakietu jako alternatywę dla programu Visual Studio.

Pakiet CSPack używa zawartości pliku definicji usługi i pliku konfiguracji usługi w celu zdefiniowania zawartości pakietu. Pakiet CSPack generuje plik pakietu aplikacji (cspkg), który można przekazać na platformę Azure przy użyciu Azure Portal. Domyślnie pakiet ma nazwę [ServiceDefinitionFileName].cspkg, ale można określić inną nazwę przy użyciu /out opcji CSPack.

Pakiet CSPack znajduje się w lokalizacji
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\[sdk-version]\bin\

Uwaga

CSPack.exe (w systemie Windows) jest dostępny przez uruchomienie skrótu wiersza polecenia platformy Microsoft Azure zainstalowanego z zestawem SDK.

Uruchom sam program CSPack.exe, aby wyświetlić dokumentację wszystkich możliwych przełączników i poleceń.

Porada

Uruchom usługę w chmurze lokalnie w emulatorze usługi Microsoft Azure Compute, użyj opcji /copyonly . Ta opcja kopiuje pliki binarne aplikacji do układu katalogu, z którego można je uruchomić w emulatorze obliczeniowym.

Przykładowe polecenie do spakowania usługi w chmurze

W poniższym przykładzie tworzony jest pakiet aplikacji zawierający informacje dotyczące roli sieci Web. Polecenie określa plik definicji usługi do użycia, katalog, w którym można znaleźć pliki binarne, oraz nazwę pliku pakietu.

cspack [DirectoryName]\[ServiceDefinition]
       /role:[RoleName];[RoleBinariesDirectory]
       /sites:[RoleName];[VirtualPath];[PhysicalPath]
       /out:[OutputFileName]

Jeśli aplikacja zawiera zarówno rolę internetową, jak i rolę procesu roboczego, używane jest następujące polecenie:

cspack [DirectoryName]\[ServiceDefinition]
       /out:[OutputFileName]
       /role:[RoleName];[RoleBinariesDirectory]
       /sites:[RoleName];[VirtualPath];[PhysicalPath]
       /role:[RoleName];[RoleBinariesDirectory];[RoleAssemblyName]

Gdzie zmienne są definiowane w następujący sposób:

Zmienna Wartość
[DirectoryName] Podkatalog w katalogu głównym projektu zawierający plik csdef projektu platformy Azure.
[ServiceDefinition] Nazwa pliku definicji usługi. Domyślnie ten plik nosi nazwę ServiceDefinition.csdef.
[OutputFileName] Nazwa wygenerowanego pliku pakietu. Zazwyczaj jest ona ustawiana na nazwę aplikacji. Jeśli nie określono nazwy pliku, pakiet aplikacji zostanie utworzony jako [ApplicationName].cspkg.
[RoleName] Nazwa roli zgodnie z definicją w pliku definicji usługi.
[RoleBinariesDirectory] Lokalizacja plików binarnych roli.
[VirtualPath] Katalogi fizyczne dla każdej ścieżki wirtualnej zdefiniowanej w sekcji Lokacje definicji usługi.
[PhysicalPath] Katalogi fizyczne zawartości dla każdej ścieżki wirtualnej zdefiniowanej w węźle lokacji definicji usługi.
[RoleAssemblyName] Nazwa pliku binarnego roli.

Następne kroki

Tworzysz pakiet usług w chmurze i chcę...

Używam programu Visual Studio i chcę...