Speicherkonto aktualisieren
Die Update Storage Account
asynchroner Vorgang aktualisiert die Bezeichnung, die Beschreibung und aktiviert oder deaktiviert den Status der geografischen Replikation für das angegebene Speicherkonto.
Anforderung
Die Update Storage Account
-Anforderung kann wie folgt angegeben werden. Ersetzen Sie <subscription-id>
durch Ihre Abonnement-ID und <service-name>
mit dem Namen Ihres Speicherkontos.
Methode | Anforderungs-URI |
---|---|
PUT | https://management.core.windows.net/<subscription-id>/services/storageservices/<service-name> |
Sie müssen sicherstellen, dass die an den Verwaltungsdienst gestellte Anforderung sicher ist. Weitere Informationen finden Sie unter Authentifizieren von Dienstverwaltungsanforderungen.
URI-Parameter
Keine.
Anforderungsheader
In der folgenden Tabelle werden die Anforderungsheader beschrieben.
Anforderungsheader | Beschreibung |
---|---|
Content-Type |
Erforderlich. Legen Sie diesen Header auf application/xml . |
x-ms-version |
Erforderlich. Gibt die Version des für die Anforderung zu verwendenden Vorgangs an. Der Wert dieses Headers muss festgelegt werden, um 2011-06-01 oder höher. Die Version sollte mindestens "2012-03-01" sein, damit Georeplikationsfunktionen verwendet werden können.Die Version sollte mindestens "2013-06-01" sein, damit benutzerdefinierte Domänenfunktionen verwendet werden können. Die Version sollte mindestens "2013-11-01" sein, damit die SecondaryReadEnabled-Funktion verwendet werden kann. Die Version muss mindestens "2014-06-01" mit dem AccountType Feld. Beachten Sie, dass GeoReplicationEnabled und SecondaryReadEnabled sind nicht mehr unterstützte zukünftig – ihre Funktionalität befindet sich im AccountType .Weitere Informationen zu versionsverwaltungsheadern finden Sie unter Service-Versionsverwaltung. |
Anforderungstext
Der Anforderungstext weist das folgende Format auf:
<?xml version="1.0" encoding="utf-8"?> <UpdateStorageServiceInput xmlns="https://schemas.microsoft.com/windowsazure"> <Description>description-of-storage-account</Description> <Label>base64-encoded-label</Label> <GeoReplicationEnabled>geo-replication-indicator</GeoReplicationEnabled> <ExtendedProperties> <ExtendedProperty> <Name>property-name</Name> <Value>property-value</Value> </ExtendedProperty> </ExtendedProperties> <CustomDomains> <CustomDomain> <Name>name-of-custom-domain</Name> <UseSubDomainName>cname-validation-indicator</UseSubDomainName> </CustomDomain> </CustomDomains> <SecondaryReadEnabled>secondary-read-indicator</SecondaryReadEnabled> <AccountType>type-of-storage-account</AccountType> </UpdateStorageServiceInput>
In der folgenden Tabelle werden die Elemente des Anforderungstexts beschrieben.
Name des Elements | Beschreibung |
Label | Optional. Gibt einen Base-64-codierten Name für das Speicherkonto an. Die Bezeichnung kann bis zu 100 Zeichen lang sein. Die Bezeichnung kann verwendet werden, um das Speicherkonto für die Nachverfolgung zu identifizieren. Sie müssen einen Wert angeben, entweder Label oder Description , oder für beides. |
Beschreibung | Optional. Eine Beschreibung des Speicherkontos. Die Beschreibung kann bis zu 1024 Zeichen lang sein. Sie müssen einen Wert angeben, entweder Label oder Description , oder für beides. |
GeoReplicationEnabled | Optional. Aktiviert oder deaktiviert die geografische Replikation für den angegebenen Speicher. Wenn festgelegt true , die Daten im Speicherkonto werden repliziert, mehr als einem geografischen Standort, um Flexibilität bei schwerwiegenden Ausfällen zu aktivieren. Wenn festgelegt false , geografische Replikation deaktiviert ist. Wenn das Element nicht im Anforderungstext enthalten ist, bleibt der aktuelle Wert unverändert. Important: Wenn Sie die geografische Replikation aktiviert haben, können Sie diese deaktivieren, indem Sie dieses Element auf false festlegen. Wenn sie deaktiviert ist, werden die Daten nicht mehr zu einem sekundären Rechenzentrum repliziert und alle Daten am sekundären Speicherort entfernt. Das Aktivieren der geografischen Replikation nach dem Deaktivieren führt dazu, dass dem Speicherkonto das Replizieren der aktuellen Datenkopie zum sekundären Rechenzentrum in Rechnung gestellt wird. Nachdem die vorhandene Datenkopie zum sekundären Rechenzentrum repliziert wurde, werden Aktualisierungen ohne zusätzliche Gebühren geografisch repliziert.Die GeoReplicationEnabled Element ist nur Version 2012-03-01 und höher verfügbar und ersetzt durch das AccountType-Element mit Version 2014-06-01 oder höher. |
ExtendedProperties | Gibt den Namen und den Wert einer erweiterten Eigenschaft an, die dem Speicherkonto hinzugefügt wurde. |
CustomDomains | Gibt die benutzerdefinierten Domänen an, die dem Speicherkonto zugeordnet sind. Die CustomDomains -Element ist nur bei Version 2013-06-01 und höher verfügbar. |
SecondaryReadEnabled | Gibt an, dass sekundäres Lesen für das Speicherkonto aktiviert ist. Folgende Werte sind möglich: - true - false Die SecondaryReadEnabled Element ist nur verfügbar, die mit Version 2013-11-01 oder höher und ersetzt durch das AccountType-Element mit Version 2014-06-01 oder höher. |
AccountType | Gibt an, ob das Konto lokal redundanten oder georedundanten Speicher oder georedundanten Speicher mit Lesezugriff unterstützt. Zonenredundanter Speicher ist keine Option, wenn Sie ein Speicherkonto aktualisieren. Folgende Werte sind möglich: - Standard_LRS - Standard_GRS - Standard_RAGRS Das AccountType -Element ist nur bei Verwendung von Version 2014-06-01 oder höher verfügbar und ersetzt die Elemente SecondaryReadEnabled und GeoReplicationEnabled. Note: Die Standard_ZRS und Premium_LRS Kontotypen sind keine Option, da diese Konten zu einem anderen Kontotyp geändert werden können. Darüber hinaus können andere Kontotypen in geändert werden Standard_ZRS oder Premium_LRS . |
ExtendedProperties
Gibt den Namen und den Wert einer erweiterten Eigenschaft an, die dem Speicherkonto hinzugefügt wurde.
Elementname | Beschreibung |
---|---|
Name | Optional. Stellt den Namen einer erweiterten Speicherkontoeigenschaft dar. Jede erweiterte Eigenschaft muss sowohl einen definierten Namen als auch einen definierten Wert aufweisen. Sie können über maximal 50 erweiterte Eigenschaftsnamen/Wert-Paare 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. Der Versuch, andere Zeichen zu verwenden, den Namen mit einem anderen Zeichen als einem Buchstaben zu beginnen oder einen Namen einzugeben, der dem einer anderen erweiterten Eigenschaft desselben Speicherkontos entspricht, führt zu einem Fehler des Typs Statuscode 400 (ungültige Anforderung). Das Name -Element ist nur bei Version 2012-03-01 und höher verfügbar. |
Wert | Optional. Stellt den Wert einer erweiterten Speicherkontoeigenschaft dar. Jede erweiterte Eigenschaft muss sowohl einen definierten Namen als auch einen definierten Wert aufweisen. Sie können über maximal 50 erweiterte Eigenschaftsnamen/Wertpaare verfügen, und jeder erweiterte Eigenschaftswert kann eine maximale Länge von 255 Zeichen aufweisen. Das Value -Element ist nur bei Version 2012-03-01 und höher verfügbar. |
CustomDomains
Gibt die benutzerdefinierten Domänen an, die dem Speicherkonto zugeordnet sind.
Elementname | Beschreibung |
---|---|
CustomDomain | Gibt Informationen über eine benutzerdefinierte Domäne an, die dem Speicherkonto zugeordnet ist. |
Name | Gibt den Namen der benutzerdefinierten Domäne an. |
UseSubDomainName | Gibt an, ob die indirekte CName-Überprüfung aktiviert ist. Folgende Werte sind möglich: - true - false |
Antwort
Die Antwort enthält den HTTP-Statuscode, einen Satz von Antwortheadern und einen Antworttext.
Statuscode
Bei einem erfolgreichen Vorgang wird der Statuscode 200 (OK) zurückgegeben. Informationen zu Statuscodes finden Sie unter Status- und Fehlercodes der Dienstverwaltung.
Antwortheader
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. Sie können für den asynchronen Vorgang aufrufen Vorgangsstatus abrufen mit dem Wert des Headers zu bestimmen, ob der Vorgang abgeschlossen ist, ist fehlgeschlagen oder wird noch ausgeführt. |
Antworttext
Keine.
Hinweise
Verwenden der Update Storage Account
Vorgang zum Ändern des Beschreibung, die Bezeichnung oder geografische Replikation Einstellungswert für ein Speicherkonto. Sie können die Speicherkonteneigenschaften abrufen Vorgang, um diese Werte zu überprüfen.
Beispiel
Im folgenden Beispiel wird die Speicherkonteneigenschaften abrufen Vorgang zum Auflisten der anfänglichen Eigenschaftswerte für das Speicherkonto aktualisiert die Label
und Description
Eigenschaften durch einen Aufruf der Update Storage Account
-Vorgang zeigt dann die aktualisierten Ergebnisse mit einem anderen Aufruf von Speicherkonteneigenschaften abrufen. Ändern Sie den Wert von der Version
Zeichenfolge, die die gewünschte Version der Thumbprint
Wert in den Fingerabdruck für Ihr Verwaltungszertifikat der SubscriptionId
auf Ihre Abonnement-ID und die ServiceName
Wert, der den Namen Ihres Speicherkontos zum Ausführen des Beispiels.
namespace Microsoft.WindowsAzure.ServiceManagementRESTAPI.Samples { using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Security.Cryptography.X509Certificates; using System.Xml; using System.Xml.Linq; public class Program { // Set these constants with your values to run the sample. private const string Version = "2011-12-01"; private const string Thumbprint = "management-certificate-thumbprint"; private const string SubscriptionId = "subscription-identifier"; private const string ServiceName = "storage-account-name"; // This is the common namespace for all Service Management REST API XML data. private static XNamespace wa = "https://schemas.microsoft.com/windowsazure"; /// <summary> /// Gets or sets the certificate that matches the Thumbprint value. /// </summary> private static X509Certificate2 Certificate { get; set; } static void Main(string[] args) { try { Certificate = GetStoreCertificate(Thumbprint); // Get the initial property values for the storage account. // Convert the Label property to a readable value for display. XElement initialProperties = GetStorageAccountProperties(ServiceName); XElement labelElement = initialProperties.Descendants(wa + "Label").First(); labelElement.Value = labelElement.Value.FromBase64(); Console.WriteLine( "Storage Account Properties for {0}:{1}{2}", ServiceName, Environment.NewLine, initialProperties.ToString(SaveOptions.OmitDuplicateNamespaces)); // Update the label and description of the storage account. string label = String.Format("updated_{0}_label", ServiceName); string description = String.Format( "Updated description for {0}", ServiceName); UpdateStorageAccount(ServiceName, label, description, geoReplicationEnabled: false); // Get the updated property values for the storage account. // Convert the Label property to a readable value for display. XElement updatedProperties = GetStorageAccountProperties(ServiceName); labelElement = updatedProperties.Descendants(wa + "Label").First(); labelElement.Value = labelElement.Value.FromBase64(); Console.WriteLine( "Updated Storage Account Properties for {0}:{1}{2}", ServiceName, Environment.NewLine, updatedProperties.ToString(SaveOptions.OmitDuplicateNamespaces)); } catch (Exception ex) { Console.WriteLine("Exception caught in Main:"); Console.WriteLine(ex.Message); } Console.Write("Press any key to continue:"); Console.ReadKey(); } /// <summary> /// Calls the Get Storage Account Properties operation in the Service /// Management REST API for the specified subscription and storage account /// name and returns the StorageService XML element from the response. /// </summary> /// <param name="serviceName">The name of the storage account.</param> /// <returns>The StorageService XML element from the response.</returns> private static XElement GetStorageAccountProperties( string serviceName) { string uriFormat = "https://management.core.windows.net/{0}" + "/services/storageservices/{1}"; Uri uri = new Uri(String.Format(uriFormat, SubscriptionId, serviceName)); XDocument responseBody; InvokeRequest(uri, "GET", HttpStatusCode.OK, null, out responseBody); return responseBody.Element(wa + "StorageService"); } /// <summary> /// Calls the Update Storage Account operation in the Service Management /// REST API for the specified subscription, storage account name, new /// description, label, and geo-replication enabled setting. /// </summary> /// <param name="serviceName">The name of the storage account to update.</param> /// <param name="label">The new label for the storage account.</param> /// <param name="description">The new description for the storage account.</param> /// <param name="geoReplicationEnabled">The new geo-replication setting, if applicable. /// This optional parameter defaults to null.</param> private static void UpdateStorageAccount( string serviceName, string label, string description, bool? geoReplicationEnabled = null) { string uriFormat = "https://management.core.windows.net/{0}" + "/services/storageservices/{1}"; Uri uri = new Uri(String.Format(uriFormat, SubscriptionId, serviceName)); XDocument requestBody = new XDocument( new XDeclaration("1.0", "UTF-8", "no"), new XElement( wa + "UpdateStorageServiceInput", new XElement(wa + "Description", description), new XElement(wa + "Label", label.ToBase64()))); // Add the GeoReplicationEnabled element if the version supports it. if ((geoReplicationEnabled != null) && (String.CompareOrdinal(Version, "2011-12-01") >= 0)) { requestBody.Element(wa + "UpdateStorageServiceInput").Add( new XElement( wa + "GeoReplicationEnabled", geoReplicationEnabled.ToString().ToLowerInvariant())); } XDocument responseBody; InvokeRequest(uri, "PUT", HttpStatusCode.OK, requestBody, out responseBody); } /// <summary> /// Gets the certificate matching the thumbprint from the local store. /// Throws an ArgumentException if a matching certificate is not found. /// </summary> /// <param name="thumbprint">The thumbprint of the certificate to find.</param> /// <returns>The certificate with the specified thumbprint.</returns> 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)); } /// <summary> /// A helper function to invoke a Service Management REST API operation. /// Throws an ApplicationException on unexpected status code results. /// </summary> /// <param name="uri">The URI of the operation to invoke using a web request.</param> /// <param name="method">The method of the web request, GET, PUT, POST, or DELETE.</param> /// <param name="expectedCode">The expected status code.</param> /// <param name="requestBody">The XML body to send with the web request. Use null to send no request body.</param> /// <param name="responseBody">The XML body returned by the request, if any.</param> /// <returns>The requestId returned by the operation.</returns> private static string InvokeRequest( Uri uri, string method, HttpStatusCode expectedCode, XDocument requestBody, out XDocument responseBody) { responseBody = null; string requestId = String.Empty; 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); } } } HttpWebResponse response; HttpStatusCode statusCode = HttpStatusCode.Unused; try { response = (HttpWebResponse)request.GetResponse(); } catch (WebException ex) { // GetResponse throws a WebException for 4XX and 5XX status codes response = (HttpWebResponse)ex.Response; } try { statusCode = response.StatusCode; if (response.ContentLength > 0) { using (XmlReader reader = XmlReader.Create(response.GetResponseStream())) { responseBody = XDocument.Load(reader); } } if (response.Headers != null) { requestId = response.Headers["x-ms-request-id"]; } } finally { response.Close(); } if (!statusCode.Equals(expectedCode)) { throw new ApplicationException(string.Format( "Call to {0} returned an error:{1}Status Code: {2} ({3}):{1}{4}", uri.ToString(), Environment.NewLine, (int)statusCode, statusCode, responseBody.ToString(SaveOptions.OmitDuplicateNamespaces))); } return requestId; } } /// <summary> /// Helpful extension methods for converting strings to and from Base-64. /// </summary> public static class StringExtensions { /// <summary> /// Converts a UTF-8 string to a Base-64 version of the string. /// </summary> /// <param name="s">The string to convert to Base-64.</param> /// <returns>The Base-64 converted string.</returns> public static string ToBase64(this string s) { byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s); return Convert.ToBase64String(bytes); } /// <summary> /// Converts a Base-64 encoded string to UTF-8. /// </summary> /// <param name="s">The string to convert from Base-64.</param> /// <returns>The converted UTF-8 string.</returns> public static string FromBase64(this string s) { byte[] bytes = Convert.FromBase64String(s); return System.Text.Encoding.UTF8.GetString(bytes); } } }
Beim Ausführen erzeugt das Beispielprogramm eine Ausgabe ähnlich der folgenden:
Storage Account Properties for myexamplestorage1: <StorageService xmlns="https://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Url>https://management.core.windows.net/01234567-89ab-cdef-0123-456789abcdef/services/storageservices/myexamplestorage1</Url> <ServiceName>myexamplestorage1</ServiceName> <StorageServiceProperties> <Description>myexamplestorage1 description</Description> <Location>North Central US</Location> <Label>My Example Label</Label> <Status>Created</Status> <Endpoints> <Endpoint>http://myexamplestorage1.blob.core.windows.net/</Endpoint> <Endpoint>http://myexamplestorage1.queue.core.windows.net/</Endpoint> <Endpoint>http://myexamplestorage1.table.core.windows.net/</Endpoint> </Endpoints> <GeoReplicationEnabled>true</GeoReplicationEnabled> <GeoPrimaryRegion>usnorth</GeoPrimaryRegion> <StatusOfPrimary>Available</StatusOfPrimary> <GeoSecondaryRegion>ussouth</GeoSecondaryRegion> <StatusOfSecondary>Available</StatusOfSecondary> </StorageServiceProperties> </StorageService> Updated Storage Account Properties for myexamplestorage1: <StorageService xmlns="https://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Url>https://management.core.windows.net/01234567-89ab-cdef-0123-456789abcdef/services/storageservices/myexamplestorage1</Url> <ServiceName>myexamplestorage1</ServiceName> <StorageServiceProperties> <Description>Updated description for myexamplestorage1</Description> <Location>North Central US</Location> <Label>updated_myexamplestorage1_label</Label> <Status>Created</Status> <Endpoints> <Endpoint>http://myexamplestorage1.blob.core.windows.net/</Endpoint> <Endpoint>http://myexamplestorage1.queue.core.windows.net/</Endpoint> <Endpoint>http://myexamplestorage1.table.core.windows.net/</Endpoint> </Endpoints> <GeoReplicationEnabled>false</GeoReplicationEnabled> </StorageServiceProperties> </StorageService> Press any key to continue: