使用jinja将子网分配给sqladmin实例

时间:2018-12-11 11:38:34

标签: sql-server jinja2 google-cloud-sql google-deployment-manager google-cloud-networking

我已经部署了Google Cloud sqladmin实例(sqladmin.v1beta4.instance)和数据库(sqladmin.v1beta4.database),但是现在我想将其分配给我的私有子网。我已经使用多个VM成功完成了此操作,但是无法使用sqladmin实例。

这是我当前的sqladmin布局:

- name: my-sqladmin-instance
  type: sqladmin.v1beta4.instance
  properties:
    region: europe-west2
    settings:
      tier: db-f1-micro
      backupConfiguration:
        binaryLogEnabled: true
        enabled: true

任何对此的帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

我相信您正在寻找的是 settings.ipConfiguration.privateNetwork ,它定义了哪些VPC网络可以访问Cloud SQL实例。

  

可通过私有IP访问Cloud SQL实例的VPC网络的资源链接。

您可以在sqladmin.v1beta4.instance method page上找到完整的REST API语法(可用于转换为YAML或jinja)以及所有字段及其说明。您还可以在Deployment Manager public documentation上找到Deployment Manager支持的所有API的列表,并链接到它们的每个细目分类。

答案 1 :(得分:0)

对于CloudSQL,您需要在VPC中分配一个Google托管服务范围,然后使用PrivateNetwork属性中的VPC自链接配置SQL实例。可以在GCP VPC Configure Private Services Access中找到有关GCP私有服务的更多信息,以及在CloudSQL Configure Private IP中可以找到有关将它们与CloudSQL一起使用的信息。

您可以在https://github.com/raelga/gcp-dm-templates中找到一个模板来部署这两种配置。

网络

{% if properties["google-managed-services-range"] %}
- name: google-managed-services-{{ NETWORK }}
  type: compute.v1.globalAddresses
  properties:
    name: google-managed-services-{{ NETWORK }}
    address: {{ properties["google-managed-services-range"].split("/")[0] }}
    prefixLength: {{ properties["google-managed-services-range"].split("/")[1] }}
    addressType: INTERNAL
    purpose: VPC_PEERING
    network: $(ref.{{ NETWORK }}.selfLink)
    description: >
      Address range reserved for Google Managed Services.
      https://cloud.google.com/vpc/docs/configure-private-services-access
{% endif %}

https://github.com/raelga/gcp-dm-templates/blob/master/compute/vpc-network.jinja

SQL实例

以及带有专用网络部分的CloudSQL模板:

resources:
- name: {{ name }}
  type: sqladmin.v1beta4.instance
  properties:
    backendType: {{ properties['backendType'] }}
...
      {# Connectivity #}
      ipConfiguration:
        ipv4Enabled: {{ properties['publicIp'] }}
        {% if properties['authorizedNetworks'] %}
        authorizedNetworks:
          {% for authorizedNetwork in properties['authorizedNetworks'] %}
          - name: {{ authorizedNetwork.name }}
            cidrBlock: {{ authorizedNetwork.cidrBlock }}
          {% endfor %}
        {% endif %}
        {% if properties['privateIp'] %}
        privateNetwork: {{ "projects/{}/global/networks/{}".format(
          env['project'], properties['privateNetwork']
        ) }}
        {% endif %}

https://github.com/raelga/gcp-dm-templates/blob/master/sql/master-instance.jinja

以及用于创建私有CloudSQL实例的模板的示例:

网络

imports:
  - path: ../../../templates/compute/vpc-network.jinja

resources:

- name: vpc-network
  type: ../../../templates/compute/vpc-network.jinja
  properties:
    subnets:
      - name: compute
        range: 10.60.0.0/23
    google-managed-services-range: 10.60.240.0/20

https://github.com/raelga/gcp.rael.io/blob/master/dm/deployments/rshared/compute/network.yaml

CloudSQL实例

imports:
  - path: ../../../templates/sql/master-instance.jinja

resources:
  - name: sites-mysql
    type: ../../../templates/sql/master-instance.jinja
    properties:
      tier: db-f1-micro
      publicIp: false
      privateIp: true
      privateNetwork: rshared-net

outputs:
  - name: connectionName
    value: $(ref.sites-mysql.connectionName)
  - name: ipAddress
    value: $(ref.sites-mysql.ipAddresses[0].ipAddress)

https://github.com/raelga/gcp.rael.io/blob/master/dm/deployments/rshared/sql/sites-mysql-cloudsql.yaml