Exportieren (0) Drucken
Alle erweitern

Bereitstellung erstellen

Letzte Aktualisierung: April 2015

Der asynchrone Create Deployment-Vorgang lädt ein neues Dienstpaket hoch und erstellt eine neue Bereitstellung in Staging- oder der Produktionsumgebung.

Bevor Sie diesen Vorgang ausführen können, müssen Sie folgende Aufgaben ausführen:

Die Create Deployment-Anforderung wird folgendermaßen angegeben. Ersetzen Sie <subscription-id> durch die Abonnement-ID, <cloudservice-name> durch den Namen des Cloud-Diensts und <deployment-slot> durch staging oder production.

 

Methode Anforderungs-URI

POST

https://management.core.windows.net/<subscription-id>/services/hostedservices/<cloudservice-name>/deploymentslots/<deployment-slot>

Sie müssen sicherstellen, dass die an den Verwaltungsdienst gestellte Anforderung sicher ist. Zusätzliche Informationen finden Sie im Thema Authentifizieren von Dienstverwaltungsanforderungen.

In der folgenden Tabelle werden die Anforderungsheader beschrieben.

 

Anforderungsheader Beschreibung

Content-Type

Erforderlich. Legen Sie diesen Header auf application/xml fest.

x-ms-version

Erforderlich. Gibt die Version des für die Anforderung zu verwendenden Vorgangs an. Dieser Header sollte auf 01.10.09 oder höher festgelegt werden. Weitere Informationen zu den Versionsangaben in den Headern finden Sie unter Dienstverwaltungs-Versionsverwaltung.

Der Anforderungstext weist das folgende Format auf:


<?xml version="1.0" encoding="utf-8"?>
<CreateDeployment xmlns="http://schemas.microsoft.com/windowsazure">
  <Name>deployment-name</Name>
  <PackageUrl>package-url-in-blob-storage</PackageUrl>
  <Label>base64-encoded-deployment-label</Label>
  <Configuration>base64-encoded-configuration-file</Configuration>
  <StartDeployment>start-deployment</StartDeployment>
  <TreatWarningsAsError>prioritize-warnings</TreatWarningsAsError>
  <ExtendedProperties>
    <ExtendedProperty>
      <Name>property-name</Name>
      <Value>property-value</Value>
    </ExtendedProperty>
  </ExtendedProperties>
  <ExtensionConfiguration>
    <AllRoles>
      <Extension>
        <Id>identifier-of-extension</Id>
        <State>state-of-extension</State>
      </Extension>
    </AllRoles>
    <NamedRoles>
      <Role>
        <RoleName>role_name1</RoleName>
        <Extensions>
          <Extension>
            <Id>identifier-of-extension</Id>
            <State>state-of-extension</State>
          </Extension>
        </Extensions>
      </Role>
    </NamedRoles>
  </ExtensionConfiguration>
</CreateDeployment>

In der folgenden Tabelle werden die Elemente im Anforderungstext beschrieben.

 

Elementname Beschreibung

Name

Erforderlich. Gibt den Namen der Bereitstellung an.

PackageUrl

Erforderlich. Gibt eine URL an, die auf den Speicherort des Dienstpakets im Blob-Dienst verweist. Das Dienstpaket kann sich in einem Speicherkonto unter demselben Abonnement oder einem SAS-URI (Freigegebene Zugriffssignatur) von jedem Speicherkonto befinden. Weitere Informationen zu freigegebenen Zugriffssignaturen finden Sie unter Delegieren des Zugriffs mit einer SAS (Shared Access Signature).

Konfiguration

Erforderlich. Gibt die Base-64-codierte Dienstkonfigurationsdatei für die Bereitstellung an.

Label

Erforderlich. Gibt einen Bezeichner für die Bereitstellung an, der Base-64-codiert ist. Der Bezeichner kann bis zu 100 Zeichen lang sein. Die Bezeichnung sollte innerhalb des Abonnements eindeutig sein. Die Bezeichnung kann für die Nachverfolgung verwendet werden.

StartDeployment

Optional. Gibt an, ob die Bereitstellung sofort nach dem Erstellen gestartet werden soll. Der Standardwert lautet false.

false gibt an, dass das Dienstmodell weiterhin bereitgestellt wird, der Code jedoch nicht sofort ausgeführt wird. Stattdessen ist der Dienst Suspended, bis Sie Bereitstellungsstatus aktualisieren aufrufen und den Status auf Runningfestlegen. Dann wird der Dienst gestartet. Ein bereitgestellter Dienst verursacht immer noch Gebühren, wenn er angehalten wurde.

Das StartDeployment-Element ist nur bei Version 01.04.10 und höher verfügbar.

TreatWarningsAsError

Optional. Gibt an, ob Paketüberprüfungswarnungen als Fehler behandelt werden sollen. Der Standardwert lautet false. Bei true wird beim Created Deployment-Vorgang ein Fehler erzeugt, wenn Überprüfungswarnungen für das Dienstpaket auftreten.

Das TreatWarningsAsError-Element ist nur bei Version 01.04.11 und höher verfügbar.

Name

Optional. Gibt den Namen einer erweiterten Bereitstellungseigenschaft an. Jede erweiterte Eigenschaft muss sowohl einen definierten Namen als auch einen definierten Wert aufweisen. Sie können über maximal 25 erweiterte Eigenschaftsnamen und Wertpaare verfügen.

Die maximale Länge des Namenelements beträgt 64 Zeichen, nur alphanumerische Zeichen und Unterstriche im Namen sind gültig, und der Name muss mit einem Buchstaben beginnen.

Das Name-Element ist nur bei Version 01.03.12 und höher verfügbar.

Wert

Optional. Gibt den Wert einer erweiterten Eigenschaft eines Cloud-Diensts an. Jede erweiterte Eigenschaft muss sowohl einen definierten Namen als auch einen definierten Wert aufweisen. Sie können über maximal 25 erweiterte Eigenschaftsnamen und Wertpaare verfügen, und jeder erweiterte Eigenschaftswert kann eine maximale Länge von 255 Zeichen aufweisen.

Das Value-Element ist nur bei Version 01.03.12 und höher verfügbar.

ExtensionConfiguration

Optional. Gibt eine Erweiterung an, die dem Cloud-Dienst hinzugefügt wird. In Azure kann ein Prozess als Erweiterung eines Cloud-Diensts ausgeführt werden. Sie müssen eine Erweiterung mit Erweiterung hinzufügen dem Cloud-Dienst hinzufügen, bevor sie der Bereitstellung hinzugefügt werden kann.

Das ExtensionConfiguration-Element ist nur bei Version 01.03.13 und höher verfügbar.

Gibt eine Erweiterung an, die dem Cloud-Dienst hinzugefügt wird.

 

Elementname Beschreibung

AllRoles

Optional. Gibt eine Liste von Erweiterungen an, die auf alle Rollen in einer Bereitstellung angewendet werden.

Erweiterung

Erforderlich. Gibt eine Erweiterung an, die für eine Rolle in einem Cloud-Dienst bereitgestellt werden soll.

NamedRoles

Optional. Gibt eine Liste von Erweiterungen an, die auf bestimmte Rollen in einer Bereitstellung angewendet werden.

Gibt eine Erweiterung an, die für eine Rolle in einem Cloud-Dienst bereitgestellt werden soll.

 

Elementname Beschreibung

ID

Erforderlich. Gibt den Bezeichner der Erweiterung an. Der Bezeichner wird erstellt, wenn die Erweiterung dem Cloud-Dienst hinzugefügt wird. Sie können den Bezeichner einer Erweiterung, die einem Cloud-Dienst hinzugefügt wurde, über Erweiterungen auflisten ermitteln.

US-Bundesstaat

Optional. Gibt den Zustand der Erweiterung an. Dieses Element gilt nur für JSON-konfigurierte Erweiterungen.

Folgende Werte sind möglich:

  • Enable

  • Disable

  • Uninstall

Der Standardwert lautet Enable.

Das State-Element ist nur bei Version 01.06.14 und höher verfügbar.

Gibt eine Liste von Erweiterungen an, die auf bestimmte Rollen in einer Bereitstellung angewendet werden.

 

Elementname Beschreibung

Rolle

Erforderlich. Gibt eine bestimmte Rolle an, der die Erweiterung hinzugefügt wird.

RoleName

Erforderlich. Gibt den Namen der Rolle an.

Erweiterung

Erforderlich. Gibt eine Erweiterung an, die für eine Rolle in einem Cloud-Dienst bereitgestellt werden soll.

Die Antwort enthält den HTTP-Statuscode und einen Satz von Antwortheadern.

Bei einem erfolgreichen Vorgang wird der Statuscode 200 (OK) zurückgegeben. Weitere Informationen zu Statuscodes finden Sie unter Dienstverwaltungsstatus und Fehlercodes.

Die Antwort für diesen Vorgang umfasst die folgenden Header. Die Antwort kann außerdem weitere HTTP-Standardheader enthalten. Alle Standardheader entsprechen der HTTP/1.1-Protokollspezifikation.

 

Antwortheader Beschreibung

x-ms-request-id

Ein Wert, der eine für den Verwaltungsdienst ausgeführte Anforderung eindeutig identifiziert. Bei einem asynchronen Vorgang können Sie Vorgangsstatus abrufen mit dem Wert dieses Headers aufrufen, um zu bestimmen, ob der Vorgang abgeschlossen wurde, fehlgeschlagen ist oder noch ausgeführt wird.

Keine.

Sie können eine Anwendung auch mithilfe folgender Ressourcen bereitstellen:

Next step:

Nachdem Sie eine Anwendung bereitgestellt haben, besteht der nächste Schritt in der Verwaltung der Anwendung. Weitere Informationen finden Sie unter den folgenden Links:

Das folgende Beispiel für eine Konsolenanwendung veranschaulicht, wie eine Anwendung bereitgestellt wird. Ersetzen Sie die nachstehenden Variablenwerte wie folgt:

  • Thumbprint – durch den Fingerabdruck eines Verwaltungszertifikats in Ihrem Abonnement.

  • SubscriptionId – durch den Abonnementbezeichner, den Sie im Verwaltungsportal erhalten haben.

  • ServiceName – durch den Namen des erstellten Cloud-Diensts.

  • DeploymentName – durch den Namen, den Sie für die Bereitstellung verwenden möchten.



    noteHinweis
    Mithilfe von Standorte auflisten können Sie den geeigneten Standort abrufen.

  • PackageName – durch den Pfad zur Paketdatei im BLOB-Speicher.

  • ConfigFile – durch den Namen der Dienstkonfigurationsdatei.


using System;
using System.Collections.Generic;
using System.Xml.Linq;
using System.Text;
using System.Security.Cryptography.X509Certificates;
using System.Net;
using System.IO;
using System.Xml;
namespace CreateDeployment
{
  class Program
  {
    private static XNamespace wa = "http://schemas.microsoft.com/windowsazure";
    private const string Thumbprint = "certificate-thumbprint";
    private const string SubscriptionId = "identifier-of-subscription";
    private const string ServiceName = "name-of-cloud-service";
    private const string DeploymentName = "name-of-deployment-name";
    private const string PackageName = "location-of-package";
    private const string ConfigFile = "name-of-configuration-file";
    private const string Version = "2013-08-01";
    static void Main(string[] args)
    {
      // Set the certificate that matches the Thumbprint value.
      X509Certificate2 certificate = GetStoreCertificate(Thumbprint);
      
       // Create the URI for the request
      string uriFormat = "https://management.core.windows.net/{0}/" +
        "services/hostedservices/{1}/deploymentslots/production";
      Uri uri = new Uri(String.Format(uriFormat, SubscriptionId, ServiceName));
      
      // Base-64 encode the label of the deployment   
      byte[] bytes = System.Text.Encoding.UTF8.GetBytes(ServiceName);
      string base64Label = Convert.ToBase64String(bytes);
       // Create the request body
      XDocument requestBody = new XDocument(
      new XDeclaration("1.0", "UTF-8", "no"),
        new XElement(wa + "CreateDeployment",
          new XElement(wa + "Name", DeploymentName),
          new XElement(wa + "PackageUrl", PackageName),
          new XElement(wa + "Label", base64Label),
          new XElement(wa + "Configuration", ConvertFile(ConfigFile)),
          new XElement(wa + "StartDeployment", true)));
       // Submit the request and get the response
      XDocument responseBody;
      HttpWebResponse response = InvokeRequest(uri, "POST", certificate, requestBody, out responseBody);
      string requestId = String.Empty;
      if (response.Headers != null)
      {
        requestId = response.Headers["x-ms-request-id"];
      }
      if (responseBody != null)
      {
        Console.WriteLine(responseBody.ToString(SaveOptions.OmitDuplicateNamespaces));
      }
      
      XDocument statusResponse = GetStatus(requestId);
      if (statusResponse != null)
      {
        Console.WriteLine(statusResponse.ToString(SaveOptions.OmitDuplicateNamespaces));
      }
      Console.Write("Press any key to continue:");
      Console.ReadKey();
    }
    //Get the status of the request    
    private static XDocument GetStatus(string requestId)
    {
      // Set the certificate that matches the Thumbprint value.
      X509Certificate2 certificate = GetStoreCertificate(Thumbprint);
      
       // Create the URI for the request
      string uriFormat = "https://management.core.windows.net/{0}/" + "operations/" + requestId;
      Uri uri = new Uri(String.Format(uriFormat, SubscriptionId));
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
      request.Method = "GET";
      request.Headers.Add("x-ms-version", Version);
      request.ClientCertificates.Add(certificate);
      request.ContentType = "application/xml";
       // Submit the request and get the response
      XDocument responseBody = null;
      HttpWebResponse response;
      try
      {
        response = (HttpWebResponse)request.GetResponse();
      }
      catch (WebException ex)
      {
        response = (HttpWebResponse)ex.Response;
      }
      if (response.ContentLength > 0)
      {
        using (XmlReader reader = XmlReader.Create(response.GetResponseStream()))
        {
          responseBody = XDocument.Load(reader);
        }
      }
      response.Close();
      return responseBody;
    }
        
    // Add the request headers and get the response from the request
    private static HttpWebResponse InvokeRequest(
      Uri uri,
      string method,
      X509Certificate2 certificate,
      XDocument requestBody,
      out XDocument responseBody)
    {
      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
      request.Method = method;
      request.Headers.Add("x-ms-version", Version);
      request.ClientCertificates.Add(certificate);
      request.ContentType = "application/xml";
      if (requestBody != null)
      {
        using (Stream requestStream = request.GetRequestStream())
        {
          using (StreamWriter streamWriter = new StreamWriter(
            requestStream, System.Text.UTF8Encoding.UTF8))
          {
            requestBody.Save(streamWriter, SaveOptions.DisableFormatting);
          }
        }
      }
      responseBody = null;
      HttpWebResponse response;
      try
      {
        response = (HttpWebResponse)request.GetResponse();
      }
      catch (WebException ex)
      {
        response = (HttpWebResponse)ex.Response;
      }
      XmlReaderSettings settings = new XmlReaderSettings();
      settings.DtdProcessing = DtdProcessing.Ignore;
      if (response.ContentLength > 0)
      {
        using (XmlReader reader = XmlReader.Create(response.GetResponseStream(), settings))
        {
          try
          {
            responseBody = XDocument.Load(reader);
          }
          catch
          {
            responseBody = null;
          }
        }
      }
      response.Close();
      return response;
    }
    
    // Base-64 encode the contents of the service configuration file.
    private static string ConvertFile(string configFileName)
    {
      string fileContents;
      string base64String = "";
      try
      {
        using (StreamReader reader = new StreamReader(
          File.Open(configFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read)))
        {
          fileContents = reader.ReadToEnd();
        }
      }
      catch (System.Exception exp)
      {
        Console.WriteLine(exp.Message);
        return base64String;
      }
      // Convert the binary input into base-64 encoded output. 
      try
      {
        base64String = Convert.ToBase64String(Encoding.UTF8.GetBytes(fileContents));
        return base64String;
      }
      catch (System.ArgumentNullException)
      {
        Console.WriteLine("Binary data array is null.");
        return base64String;
      }
    }
    // Gets the certificate matching the thumbprint from the local store.
    // Throws an ArgumentException if a matching certificate is not found.
    private static X509Certificate2 GetStoreCertificate(string thumbprint)
    {
      List<StoreLocation> locations = new List<StoreLocation>
      { 
        StoreLocation.CurrentUser, 
        StoreLocation.LocalMachine
      };
      foreach (var location in locations)
      {
        X509Store store = new X509Store("My", location);
        try
        {
          store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
          X509Certificate2Collection certificates = store.Certificates.Find(
            X509FindType.FindByThumbprint, thumbprint, false);
          if (certificates.Count == 1)
          {
            return certificates[0];
          }
        }
        finally
        {
          store.Close();
        }
      }
      throw new ArgumentException(string.Format(
        "A Certificate with Thumbprint '{0}' could not be located.",
        thumbprint));
    }
  }
}

Anzeigen:
© 2015 Microsoft