如何使用anzure_rm_sqldatabase部署Azure SQL S0实例?

时间:2019-06-14 08:22:35

标签: ansible azure-sql-database

本周或上周MS更改了Azure DB默认部署设置。 我们的部署脚本开始创建General Purpose 2 vcores实例,而不是S0实例。我正在尝试对其进行修复,但看起来要么文档不正确,要么我做错了什么。

我们的初始脚本是:

predict2(model,newdata)

根据文档,它应该可以通过添加2个参数来解决。

  1. 版本:标准

  2. max_size_bytes:268435456000‬

但事实证明这还不够。

我尝试使用create_mode或减少max_size_bytes,但是没有运气。

  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

在所有情况下,我都会收到错误消息:

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

请让我知道我在做错什么。

更新: 将ansible升级到最新版本后,我又遇到了另一个错误:

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"}

我减小了数据库大小,创建了数据库,但不是S0,而是创建为2vcore。

3 个答案:

答案 0 :(得分:0)

我无法使用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

答案 1 :(得分:0)

像您一样,我们也经历了这一点。在我的情况下:默认创建Azure SQL Server数据库是使用通用4计算(这确实很昂贵)。根据我的经验,我们使用t-sql代码创建数据库:

CREATE DATABASE 'dbName'

并以天蓝色创建昂贵的gen4计算。因此,我搜索了一些文档,根据t-sql azure create database的文档,它具有创建特定定价层的参数:SERVICE_OBJECTIVE,例如,对于S2计算,我们现在使用以下t-sql:

CREATE DATABASE 'dbName' ( EDITION = 'standard', SERVICE_OBJECTIVE = 'S2' ) ;

现在正在为我们工作。尽管我不知道如何从脚本或命令行中调用这些参数,但应该可以发送SERVICE_OBJECTIVE,因为这可能是缺少的键。

答案 2 :(得分:0)

我能够使用azure_rm_resource任务创建S0实例。通过此任务,您基本上可以完成azure api提供的所有功能。

此处使用API​​操作来创建databases

根据您的初始脚本,它应该变为:

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