我想创建一个 cron 作业,触发该作业时将启动一个 Cloud SQL 实例。我找到了一种启动计算引擎实例的方法,但是我该如何启动云 Sql 实例呢?
用于启动计算引擎实例的链接-
https://cloud.google.com/scheduler/docs/start-and-stop-compute-engine-instances-on-a-schedule
我想创建一个 cron 作业,触发该作业时将启动一个 Cloud SQL 实例。我找到了一种启动计算引擎实例的方法,但是我该如何启动云 Sql 实例呢?
用于启动计算引擎实例的链接-
https://cloud.google.com/scheduler/docs/start-and-stop-compute-engine-instances-on-a-schedule
为了实现这一点,您可以使用Cloud Function调用Cloud SQL Admin API来启动和停止 Cloud SQL 实例(您将需要 2 个 Cloud 函数)
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
您可以查看我关于如何使用 Cloud Function启动 Cloud SQL 实例和停止 Cloud SQL 实例的代码
创建 Cloud Function 后,您可以配置 Cloud Scheduler以触发每个 Cloud Function 的 HTTP 地址,或者您可以按照本指南的推荐方法并使用 pub/sub 触发函数
创建一个调用 Pub-Sub 主题的 Cloud Scheduler 作业,该主题应与 Cloud Function 绑定。要从 Cloud Function 访问 Cloud SQL 实例,您需要启用Cloud SQL Admin API。
使用此方法,您之前的 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 = '<YOUR_PROJECT_ID>'
def stop_database(event, context):
instance = '<YOUR_SQL_INSTANCE_ID>'
request = service.instances().get(project=project, instance=instance)
response = request.execute()
response["settings"]["activationPolicy"] = "NEVER"
request = service.instances().update(
project=project,
instance=instance,
body=response)
response = request.execute()
google-api-python-client==1.7.8
google-auth-httplib2==0.0.3
google-auth==1.6.2
oauth2client==4.1.3
# 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 = '<YOUR_PROJECT_ID>'
def start_database(event, context):
instance = '<YOUR_SQL_INSTANCE_ID>'
request = service.instances().get(project=project, instance=instance)
response = request.execute()
response["settings"]["activationPolicy"] = "ALWAYS"
request = service.instances().update(
project=project,
instance=instance,
body=response)
response = request.execute()
google-api-python-client==1.7.8
google-auth-httplib2==0.0.3
google-auth==1.6.2
oauth2client==4.1.3
为启动和停止 SQL 实例创建单独的调度程序作业。然后为日常工作添加如下频率。
例子:
使用这种方法,您可以在每次通过这些函数启动或停止实例时放置相同的预定义配置。但是,如果您从 Google Cloud Console 更改任何配置,一旦这些功能将由计划的作业执行,这些配置就会丢失。
# 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 = '<YOUR_PROJECT_ID>'
def stop_database(event, context):
instance = '<YOUR_SQL_INSTANCE_ID>'
request = service.instances().get(project=project, instance=instance)
response = request.execute()
j = response["settings"]
settingsVersion = int(j["settingsVersion"])
dbinstancebody = {
"settings": {
"settingsVersion": settingsVersion,
"tier": "db-f1-micro",
"activationPolicy": "NEVER",
"databaseFlags": [
{
"name": "default_time_zone",
"value": "+05:30"
}
],
"ipConfiguration": {
"authorizedNetworks": [
{
"name": "VM",
"value": "<YOUR_EXTERNAL_ACCESS_IP>"
}
]
},
"backupConfiguration": {
"enabled": "true"
}
}
}
request = service.instances().update(
project=project,
instance=instance,
body=dbinstancebody)
response = request.execute()
Same as above Method 1
# 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 = '<YOUR_PROJECT_ID>'
def start_database(event, context):
instance = '<YOUR_SQL_INSTANCE_ID>'
request = service.instances().get(project=project, instance=instance)
response = request.execute()
j = response["settings"]
settingsVersion = int(j["settingsVersion"])
dbinstancebody = {
"settings": {
"settingsVersion": settingsVersion,
"tier": "db-f1-micro",
"activationPolicy": "ALWAYS",
"databaseFlags": [
{
"name": "default_time_zone",
"value": "+05:30"
}
],
"ipConfiguration": {
"authorizedNetworks": [
{
"name": "VM",
"value": "<YOUR_EXTERNAL_ACCESS_IP>"
}
]
},
"backupConfiguration": {
"enabled": "true"
}
}
}
request = service.instances().update(
project=project,
instance=instance,
body=dbinstancebody)
response = request.execute()
Same as above Method 1