Поделиться через


Обновление учетной записи хранения

 

Update Storage Account Асинхронной операции обновляет метку, описание и включает или отключает состояние географической репликации для указанной учетной записи хранилища.

Запрос

Update Storage Account Можно составить следующим образом. Замените <subscription-id> своим Идентификатором подписки и <service-name> с именем вашей учетной записи хранилища.

Метод URI запроса
PUT https://management.core.windows.net/<subscription-id>/services/storageservices/<service-name>

Необходимо убедиться, что запрос к службе управления безопасен. Дополнительные сведения см. в разделе Проверка подлинности запросов управления службами.

Параметры URI

Отсутствует.

Заголовки запроса

В следующей таблице описаны заголовки запросов.

Заголовок запроса Описание
Content-Type Обязательно. Задайте для этого заголовка application/xml.
x-ms-version Обязательно. Задает версию операции, используемой для этого запроса. Значение этого заголовка должно быть присвоено 2011-06-01 или более поздней версии. Чтобы использовать функцию георепликации, версия должна быть не ниже "2012-03-01".

Версия должна быть по крайней мере «2013-06-01» для использования пользовательского домена.

Чтобы использовать функцию SecondaryReadEnabled, версия должна быть не ниже "2013-11-01".

Версия должна быть по крайней мере «2014-06-01» для использования AccountType поля. Обратите внимание, что GeoReplicationEnabled и SecondaryReadEnabled являются больше не поддерживается перемещение вперед — их функциональные возможности включается в AccountType.

Дополнительные сведения об управлении версиями заголовков см. в разделе Управление версиями службы управления.

Текст запроса

Далее приведен формат текста запроса.

  
<?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>  
  

В следующей таблице описываются элементы текста запроса.

Имя элемента Описание
Метка Необязательно. Указывает имя учетной записи хранилища в кодировке base-64. Метка может содержать до 100 символов. Эта метка может обозначать учетную запись хранилища для отслеживания. Необходимо указать значение либо для Label или Description, или для обоих.
Описание Необязательно. Описание учетной записи хранения. Описание может иметь длину до 1 024 символов. Необходимо указать значение либо для Label или Description, или для обоих.
GeoReplicationEnabled Необязательно. Включает или отключает географическую репликацию для указанного хранилища. Если значение true, данные в учетной записи хранилища реплицируются по более чем одному географическому местоположению для обеспечения устойчивости в случае катастрофической потери службы. Если значение false, географической репликации отключена. Если элемент не включен в текст запроса, текущее значение остается неизменным. Important: Если географическая репликация включена, ее можно отключить, установив для этого элемента значение false. После отключения данные больше не будут реплицироваться во вторичном центре обработки данных, а все данные, имеющиеся во вторичном центре обработки данных, будут удалены. Включение географической репликации после ее отключения приведет к тому, что с учетной записи хранения будет взята плата за репликацию текущей копии данных во вторичный центр обработки данных. После репликации имеющейся копии данных во вторичный центр обработки данных обновления географически реплицируются без дополнительных затрат.

 GeoReplicationEnabled Элемент только в версии 2012-03-01 или более поздней версии и заменен элементом AccountType, начиная с версии 2014-06-01 или более поздней версии.
ExtendedProperties Указывает имя и значение расширенного свойства, добавленного в учетную запись хранилища.
CustomDomains Задает настраиваемые домены, связанные с учетной записью хранилища.

 CustomDomains элемент только в версии 2013-06-01 или более поздней версии.
SecondaryReadEnabled Указывает, включено ли вторичное чтение для учетной записи хранилища.

Возможные значения:

- true
- false

 SecondaryReadEnabled Элемент только в версии 2013-11-01 или более поздней версии и заменен элементом AccountType, начиная с версии 2014-06-01 или более поздней версии.
AccountType Указывает, поддерживает ли учетная запись локально избыточное хранилище, геоизбыточное хранилище или геоизбыточное хранилище с доступом на чтение. При обновлении учетной записи хранения недоступен вариант хранилища, избыточного в пределах зоны.

Возможные значения:

- Standard_LRS
- Standard_GRS
- Standard_RAGRS

 AccountType Элемент только в версии 2014-06-01 или более поздней версии и заменяет элементы SecondaryReadEnabled и GeoReplicationEnabled. Note:  Standard_ZRS И Premium_LRS типов учетных записей не представляется возможным, поскольку эти учетные записи нельзя изменить в любой другой тип учетной записи. Кроме того, нельзя изменить все типы счетов Standard_ZRS или Premium_LRS.

ExtendedProperties

Указывает имя и значение расширенного свойства, добавленного в учетную запись хранилища.

Имя элемента Описание
Название Необязательно. Представляет собой имя расширенного свойства учетной записи хранения. Каждое расширенное свойство должно иметь и заданное имя, и значение. Может быть максимум 50 пар из имени и значения расширенных свойств.

Максимальная длина имени элемента — 64 символа, в имени допустимы только буквенно-цифровые символы и знаки подчеркивания и имя должно начинаться с буквы. Попытка использовать другие символы, начать имя не с буквы или ввести имя, которое уже имеется у другого расширенного свойства в той же учетной записи хранения, приведет к ошибке с кодом состояния 400 (неправильный запрос).

 Name Элемент только в версии 2012-03-01 или более поздней версии.
Значение Необязательно. Представляет собой значение расширенного свойства учетной записи хранения. Каждое расширенное свойство должно иметь и заданное имя, и значение. Можно задать не более 50 пар из имени и значения расширенных свойств, максимальное значение каждого расширенного свойства — 255 символов.

 Value Элемент только в версии 2012-03-01 или более поздней версии.

CustomDomains

Задает настраиваемые домены, связанные с учетной записью хранилища.

Имя элемента Описание
CustomDomain Задает сведения о настраиваемом домене, связанном с учетной записью хранилища.
Название Указывает имя настраиваемого домена.
UseSubDomainName Указывает, включена ли косвенная проверка CName.

Возможные значения:

- true
- false

Ответ

Ответ включает код состояния HTTP, набор заголовков ответа и текст ответа.

Код состояния

Успешная операция возвращает код состояния 200 (ОК). Сведения о кодах состояния см. в разделе состояние службы управления и коды ошибок.

Заголовки ответа

Ответ для этой операции включает следующие заголовки. Ответ может также включать дополнительные стандартные заголовки HTTP. Все стандартные заголовки соответствуют спецификации протокола HTTP/1.1.

Заголовок ответа Описание
x-ms-request-id Значение, которое однозначно определяет запрос к службе управления. Для асинхронной операции можно вызвать Получение состояния операции со значением заголовка, чтобы определить, завершена ли операция, произошел ли сбой, или она все еще выполняется.

Текст ответа

Отсутствует.

Примечания

Используйте Update Storage Account операцию, чтобы изменить значение параметра описание, метку или географической репликации для учетной записи хранилища. Можно использовать Получение свойств учетной записи хранения операцию, чтобы просмотреть эти значения.

Пример

В следующем примере вызывается Получение свойств учетной записи хранения операция списка исходные значения свойств для учетной записи хранилища, обновляет Label и Description Свойства с помощью вызова Update Storage Account операции, затем отображает обновленных результатов другой вызов Получение свойств учетной записи хранения. Измените значение Version строку с нужной версией Thumbprint отпечаток сертификата управления, SubscriptionId на ваш идентификатор подписки и ServiceName имя учетной записи для запуска образца.

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); } } }  
  

Будучи запущенным, пример программы формирует вывод наподобие следующего.

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:  

См. также

Получение свойств учетной записи хранения