Udostępnij za pośrednictwem


Co to jest model usługi w chmurze platformy Azure i jak można go spakować?

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 i jej konfigurację. Zbiorczo nazywamy te pliki modelem. ServicePackage.cspkg to plik zip generowany na podstawie pliku ServiceDefinition.csdef i między innymi zawiera wszystkie wymagane zależności oparte na plikach binarnych. Platforma Azure tworzy usługę w chmurze zarówno na podstawie pakietu ServicePackage.cspkg , jak i pliku 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 Sieci Web i Procesu roboczego:

<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="MyServiceName" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition">
  <WebRole name="WebRole1" vmsize="Standard_D1_v2">
    <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>

Aby lepiej zrozumieć schemat XML używany w tym miejscu, możesz zapoznać się z schematem definicji usługi, jednak poniżej przedstawiono krótkie wyjaśnienie niektórych elementów:

Witryn
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ń funkcji określonej roli.

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

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

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

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

ServiceConfiguration.cscfg

Konfiguracja ustawień usługi w chmurze jest określana przez 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ą. Przekazuje ona 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 wdrażania usługi w chmurze. Wartości konfiguracji usługi w chmurze można zmienić, gdy usługa w chmurze jest uruchomiona. W poniższym przykładzie przedstawiono ustawienia konfiguracji, które można zdefiniować dla ról sieci Web i procesu roboczego:

<?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 w tym miejscu, 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, zalecamy wdrożenie więcej niż jednego wystąpienia ról dostępnych w Internecie. Wdrażając więcej niż jedno wystąpienie, należy przestrzegać wytycznych w umowie dotyczącej poziomu usług obliczeniowych platformy Azure (SLA), która gwarantuje łączność zewnętrzną na poziomie 99,95% dla ról dostępnych z Internetu, gdy co najmniej dwa wystąpienia roli są wdrażane 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 występuje za pośrednictwem jednego adresu IP. Witryny sieci Web można skonfigurować tak, aby współużytkować port, konfigurując nagłówek hosta w celu przekierowania żądania do właściwej lokalizacji. Aplikacje można również skonfigurować tak, aby nasłuchiwać 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ń ról
    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 zrezygnować z wystąpień ról 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 w celu zaktualizowania certyfikatu. Platforma Azure przywraca ją 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 przyjmują wystąpienia roli w trybie offline, nie zgłaszają one zdarzeń RoleEnvironment.Changing lub RoleEnvironment.Changed.

ServicePackage.cspkg

Uwaga

Maksymalny rozmiar pakietu, który można wdrożyć, to 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 witryny 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 za pomocą zestawu SDK.

Uruchom program CSPack.exe sam w celu wyświetlenia dokumentacji wszystkich możliwych przełączników i poleceń.

Napiwek

Uruchom usługę w chmurze lokalnie w emulatorze obliczeń platformy Microsoft Azure, użyj opcji /copyonly. Ta opcja kopiuje pliki binarne aplikacji do układu katalogu, z którego mogą być uruchamiane w emulatorze obliczeniowym.

Przykładowe polecenie w celu 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ą zdefiniowane 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 ma nazwę ServiceDefinition.csdef.
[OutputFileName] Nazwa wygenerowanego pliku pakietu. Zazwyczaj ta zmienna jest ustawiana na nazwę aplikacji. Jeśli nie określono nazwy pliku, pakiet aplikacji zostanie utworzony jako [ApplicationName].cspkg.
[RoleName] Nazwa roli zdefiniowanej 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 każdej ścieżki wirtualnej zdefiniowanej w węźle lokacji definicji usługi.
[RoleAssemblyName] Nazwa pliku binarnego roli.

Następne kroki