Google cloud platform 使用云函数启动/停止Google Cloud SQL实例

Google cloud platform 使用云函数启动/停止Google Cloud SQL实例,google-cloud-platform,google-cloud-functions,Google Cloud Platform,Google Cloud Functions,我对谷歌云平台非常陌生。我正在寻找在预定义时间自动启动和停止mySQL实例的方法。 我发现我们可以创建一个云函数来启动/停止一个实例,然后使用云调度程序来触发它。然而,我无法理解这是如何工作的 我使用了在GitHub中找到的代码。 但是,我对node、python或go等编程语言都不熟悉。这就是造成混乱的原因。下面是我在GitHub上找到的打开云SQL实例的代码: #此文件使用云SQL API打开云SQL实例。 从GoogleAppClient导入发现 从oauth2client.client

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

我使用了在GitHub中找到的代码。

但是,我对node、python或go等编程语言都不熟悉。这就是造成混乱的原因。下面是我在GitHub上找到的打开云SQL实例的代码:

#此文件使用云SQL API打开云SQL实例。
从GoogleAppClient导入发现
从oauth2client.client导入Google凭据
credentials=GoogleCredentials.get_application_default()
service=discovery.build('sqladmin','v1beta4',credentials=credentials)
项目='wave24'#待办事项:更新占位符值。
def hello_world(请求):
实例='test'#TODO:更新占位符值。
request=service.instances().get(project=project,instance=instance)
response=request.execute()
j=响应[“设置”]
settingsVersion=int(j[“settingsVersion”])
dbinstancebody={
“设置”:{
“设置版本”:设置版本,
“层”:“db-n1-standard-1”,
“激活策略”:“始终”
}
}
请求=service.instances().update(
项目=项目,
实例=实例,
body=dbinstancebody)
response=request.execute()
#警察公共关系科(回应)
request_json=request.get_json()
如果request.args和request.args中的“message”:
return request.args.get('message')
elif request_json和request_json中的“message”:
返回请求_json['message']
其他:
返回f“你好,世界!”
________________________
requirements.txt
google api python客户端==1.7.8
google-auth-httplib2==0.0.3
谷歌认证==1.6.2
oauth2client==4.1.3
正如我前面提到的,我不熟悉Python。我刚刚在GitHub上找到了这段代码。我试图理解这一特定部分的作用:

dbinstancebody={
“设置”:{
“设置版本”:设置版本,
“层”:“db-n1-standard-1”,
“激活策略”:“始终”
}
}
您要更新上面的代码块,其中与您的案例最相关的是
activationPolicy
,它允许您停止/启动sql实例

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


激活策略可以有两个值“始终”或“从不”。将始终启动实例,而不会停止实例

您可以使用API将
激活策略
修改为
“从不”
以停止服务器,或
“始终”
以启动服务器

# PATCH
https://sqladmin.googleapis.com/sql/v1beta4/projects/{project}/instances/{instance}

# BODY
{
  "settings": {
    "activationPolicy": "NEVER"
  }
}

有关更多信息,请参阅云SQL文档中的这篇文章:。您还可以尝试中的
实例.patch
方法。

请尝试以下代码:

from pprint import pprint
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
import os

credentials = GoogleCredentials.get_application_default()
service = discovery.build("sqladmin", "v1beta4", credentials=credentials)
project_id = os.environ.get("GCP_PROJECT")

# setup this vars using terraform and assign the value via terraform
desired_policy = os.environ.get("DESIRED_POLICY") # ALWAYS or NEVER
instance_name = os.environ.get("INSTANCE_NAME")

def cloudsql(request):
    request = service.instances().get(project=project_id, instance=instance_name)
    response = request.execute()

    state = response["state"]
    instance_state = str(state)

    x = response["settings"]
    current_policy = str(x["activationPolicy"])

    dbinstancebody = {"settings": {"activationPolicy": desired_policy}}


    if instance_state != "RUNNABLE":
        print("Instance is not in RUNNABLE STATE")
    else:
        if desired_policy != current_policy:
            request = service.instances().patch(
                project=project_id, instance=instance_name, body=dbinstancebody
            )
            response = request.execute()

            pprint(response)
        else:
            print(f"Instance is in RUNNABLE STATE but is also already configured with the desired policy: {desired_policy}")
在my repo中,您可以获得有关如何使用Terraform设置云功能的更多信息。此云函数旨在实现您想要的功能,但它使用的是环境变量,如果您不想使用它们,只需更改python代码中的变量值即可


这是我的存储库

你不明白的是什么?您在哪里迷路了?请查看此线程。它显示了如何使用CLI执行此操作,因此您必须为您选择的语言找到一个等效的方法:。否则,您可以使用生成服务器在计划的基础上运行此操作。1)您正在请求有关问题中未提供的帮助。2) 编辑您的问题并发布您正在使用的代码以及您遇到的错误消息/问题。3) Stackoverflow不会引导您浏览解释其工作原理的代码。我们将帮助您解决编程问题。关于“dbinstancebody”部分,有什么不清楚的地方?这些设置意味着什么,或者你指的是什么?如果你能说得更准确些的话,我是那个repo的维护者,我刚刚测试了代码,它是最新的。你的实际问题是什么?
from pprint import pprint
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
import os

credentials = GoogleCredentials.get_application_default()
service = discovery.build("sqladmin", "v1beta4", credentials=credentials)
project_id = os.environ.get("GCP_PROJECT")

# setup this vars using terraform and assign the value via terraform
desired_policy = os.environ.get("DESIRED_POLICY") # ALWAYS or NEVER
instance_name = os.environ.get("INSTANCE_NAME")

def cloudsql(request):
    request = service.instances().get(project=project_id, instance=instance_name)
    response = request.execute()

    state = response["state"]
    instance_state = str(state)

    x = response["settings"]
    current_policy = str(x["activationPolicy"])

    dbinstancebody = {"settings": {"activationPolicy": desired_policy}}


    if instance_state != "RUNNABLE":
        print("Instance is not in RUNNABLE STATE")
    else:
        if desired_policy != current_policy:
            request = service.instances().patch(
                project=project_id, instance=instance_name, body=dbinstancebody
            )
            response = request.execute()

            pprint(response)
        else:
            print(f"Instance is in RUNNABLE STATE but is also already configured with the desired policy: {desired_policy}")