На этой или на прошлой неделе MS изменила параметры развертывания Azure DB по умолчанию. Наш сценарий развертывания начал создавать экземпляры Vcores общего назначения 2 вместо экземпляров S0. Я пытаюсь это исправить, но похоже, что либо документация неверна, либо я что-то делаю не так.
Наш первоначальный сценарий был таким:
azure_rm_sqldatabase:
resource_group: "{{ resource_group }}"
server_name: "{{ db_server }}"
name: "{{ item }}"
location: "{{ location }}"
with_items:
- "{{ database_list }}"
register: async_result
async: 7200
poll: 0
Согласно документации, это должно быть решено путем добавления 2 параметров.
издание: стандартное
max_size_bytes: 268435456000
но оказалось, что этого недостаточно.
Я пытался использовать create_mode или уменьшить max_size_bytes, но безуспешно.
- name: Create SQL Database for "{{ stack_name }}"
azure_rm_sqldatabase:
resource_group: "{{ resource_group }}"
server_name: "{{ db_server }}"
name: "{{ item }}"
location: "{{ location }}"
create_mode: default
edition: standard
max_size_bytes: 268435456000
Во всех случаях я получаю сообщение об ошибке:
failed: [127.0.0.1] (item = {'_ansible_parsed': True, '_ansible_item_result': True, '_ansible_item_label': u'authentication',
u'ansible_job_id': u'701489864709.12193', 'failed': False, u'started': 1, 'changed': True, 'item': u'authentication', u'finished': 0,
u'results_file': u'/home/vb/.ansible_async/701489864709.12193', '_ansible_ignore_errors': None, '_ansible_no_log': False}) =>
{"ansible_job_id": "701489864709.12193", "attempts": 2, "changed": false, "finished": 1,
"item": {"ansible_job_id": "701489864709.12193", "changed": true, "failed": false, "finished": 0, "item": "authentication",
"results_file": "/home/vb/.ansible_async/701489864709.12193", "started": 1}, "msg":
"Error creating the SQL Database instance: 400 Client Error:
Bad Request for url: https://management.azure.com/subscriptions/1bbba5c5-fbdb-18d7-8128-b4d403d7c6c5/resourceGroups/test_rg/providers/Microsoft.Sql/servers/testserver/databases/authentication?api-version=2014-04-01"}
Пожалуйста, дайте мне знать, что я делаю неправильно.
Обновлять: После обновления до последней версии у меня появилась еще одна ошибка:
DeserializationError: Unable to deserialize response data. Data: 268435456000, long, ValueError: invalid literal for long() with base 10: '268435456000\\xe2\\x80\\xac'"
Я уменьшил размер базы данных, база данных была создана, но вместо S0 она была создана как 2vcore.

Мне не удалось решить проблему с помощью azure_rm_sqldatabase, поэтому мне пришлось обойти ее с помощью команды bash. Если я найду лучшее решение, я обновлю этот ответ. В случае, если кто-то столкнется с такой же проблемой, вот пример кода:
- name: Create SQL Database for "{{ stack_name }}"
command: bash -c "az sql db create --name {{ item }} --resource-group {{ resource_group }} --server {{ db_server }} --capacity 10 --edition Standard --service-objective S0"
with_items:
- "{{ database_list }}"
register: async_result
async: 7200
poll: 0
Как и вы, мы также испытали это. В моем случае: при создании базы данных azure sql server по умолчанию использовались вычисления общего назначения 4 (что действительно дорого). По моему опыту, мы создавали нашу базу данных, используя код t-sql:
CREATE DATABASE 'dbName'
и это создает дорогостоящие вычисления поколения 4 в Azure. Поэтому я искал некоторые документы, и, согласно документации для t-sql azure создать базу данных, у него есть аргументы для создания определенных ценовых уровней: SERVICE_OBJECTIVE, например, для вычислений S2 мы теперь используем следующий t-sql:
CREATE DATABASE 'dbName' ( EDITION = 'standard', SERVICE_OBJECTIVE = 'S2' ) ;
Теперь это работает на нас. Хотя я не знаю, как эти параметры могут быть вызваны из сценариев или командных строк, должна быть возможность отправить SERVICE_OBJECTIVE, так как это может быть отсутствующий ключ.
Мне удалось создать экземпляры S0 с помощью задачи azure_rm_resource. С помощью этой задачи вы можете делать практически все, что предлагает azure API.
Здесь операция API для создания базы данных.
На основе вашего исходного сценария он должен стать:
azure_rm_resource:
resource_group: "{{ resource_group }}"
resource_name: "{{ db_server }}"
provider: SQL
resource_type: servers
subresource:
- type: databases
name: "{{item}}"
body:
location: "{{ location }}"
sku:
tier: "Standard"
name: "S0"
capacity: 10
properties:
maxSizeBytes: 2147483648
with_items:
- "{{ database_list }}"
register: async_result
async: 7200
poll: 0