我想创建一个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函数)
from pyspark.sql import SparkSession
from pyspark.sql import functions as F
from pyspark.sql import Window as W
df_Stats = Row("name","type","timestamp","score")
df_stat1 = df_Stats("name1","type1","2012-01-10",11)
df_stat2 = df_Stats("name1","2012-01-11",14)
df_stat3 = df_Stats("name1","2012-01-12",2)
df_stat4 = df_Stats("name1","type3",3)
df_stat5 = df_Stats("name1",55)
df_stat6 = df_Stats("name1","2012-01-13",10)
df_stat7 = df_Stats("name1","type2","2012-01-14",11)
df_stat8 = df_Stats("name1","2012-01-15",14)
df_stat9 = df_Stats("name2",2)
df_stat10 = df_Stats("name2",3)
df_stat11 = df_Stats("name2",55)
df_stat12 = df_Stats("name2",10)
df_stat13 = df_Stats("name2",55)
df_stat14 = df_Stats("name2",10)
df_stat_lst = [
df_stat1,df_stat2,df_stat3,df_stat4,df_stat5,df_stat6,df_stat7,df_stat8,df_stat9,df_stat10,df_stat11,df_stat12,df_stat13,df_stat14
]
df = spark.createDataFrame(df_stat_lst)
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!"
您可以看到有关如何使用Cloud Function来start a Cloud SQL instance和stop a Cloud SQL instance
的代码。创建Cloud函数后,您可以configure the Cloud Scheduler触发每个Cloud函数的HTTP地址,也可以按照推荐的方法guide并通过pub / sub触发函数
,创建一个 Cloud Scheduler 作业,该作业调用应与 Cloud Function 绑定的 Pub-Sub 主题。要从 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,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',credentials=credentials)
project = '<YOUR_PROJECT_ID>'
def start_database(event,instance=instance)
response = request.execute()
response["settings"]["activationPolicy"] = "ALWAYS"
request = service.instances().update(
project=project,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',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,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',"activationPolicy": "ALWAYS",body=dbinstancebody)
response = request.execute()
Same as above Method 1