首页 > 解决方案 > 使用 Cloud Functions 启动/停止 Google Cloud SQL 实例

问题描述

我对谷歌云平台很陌生。我正在寻找在预定义时间自动启动和停止 mySQL 实例的方法。我发现我们可以创建一个云函数来启动/停止一个实例,然后使用云调度程序来触发它。但是,我无法理解这是如何工作的。

我使用了在 GitHub 中找到的代码。 https://github.com/chris32g/Google-Cloud-Support/blob/master/Cloud%20Functions/turn_on_cloudSQL_instance https://github.com/chris32g/Google-Cloud-Support/blob/master/Cloud%20Functions/turn_off_CloudSQL_instance

但是,我不熟悉任何编程语言,如 node、python 或 go。这就是混乱的原因。下面是我在 GitHub 上找到的打开 Cloud SQL 实例的代码:

# This file uses the Cloud SQL API to turn on a Cloud SQL instance.
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

credentials = GoogleCredentials.get_application_default()
service = discovery.build('sqladmin', 'v1beta4', credentials=credentials)
project = 'wave24-gonchristian'  # TODO: Update placeholder value.


def hello_world(request):

    instance = 'test'  # TODO: Update placeholder value.
    request = service.instances().get(project=project, instance=instance)
    response = request.execute()
    j = response["settings"]
    settingsVersion = int(j["settingsVersion"])

    dbinstancebody = {
       "settings": {
           "settingsVersion": settingsVersion,
           "tier": "db-n1-standard-1",
           "activationPolicy": "Always"
       }
    }

    request = service.instances().update(
       project=project,
       instance=instance,
       body=dbinstancebody)
    response = request.execute()
# pprint(response)

    request_json = request.get_json()

    if request.args and 'message' in request.args:
        return request.args.get('message')
    elif request_json and 'message' in request_json:
        return request_json['message']
    else:
        return f"Hello World!"

________________________

requirements.txt

google-api-python-client==1.7.8
google-auth-httplib2==0.0.3
google-auth==1.6.2
oauth2client==4.1.3

正如我前面提到的,我对 Python 并不熟悉。我刚刚在 GitHub 上找到了这段代码。我试图了解这个特定部分的作用:

dbinstancebody = {
       "settings": {
           "settingsVersion": settingsVersion,
           "tier": "db-n1-standard-1",
           "activationPolicy": "Always"
       }
}

标签: google-cloud-platformgoogle-cloud-functions

解决方案


dbinstancebody = {
       "settings": {
           "settingsVersion": settingsVersion,
           "tier": "db-n1-standard-1",
           "activationPolicy": "Always"
       }
}

上面的代码块指定了您要更新的sql 实例属性activationPolicy,其中与您的情况最相关的是允许您停止/启动 sql 实例。

对于第二代实例,激活策略仅用于启动或停止实例。您可以通过启动和停止实例来更改激活策略。停止实例可防止进一步的实例收费。

激活策略可以有两个值 Always 或 Never。Always 将启动实例,而 Never 将停止实例。


推荐阅读