如何在Google Cloud Platform中创建将在预定时间启动Cloud SQL实例的cron作业?

我想创建一个cron作业,该作业在被触发时将启动Cloud SQL实例。我找到了启动计算引擎实例的方法,但是如何启动云Sql实例呢?

用于启动计算引擎实例的链接-

https://cloud.google.com/scheduler/docs/start-and-stop-compute-engine-instances-on-a-schedule

i_michael 回答:如何在Google Cloud Platform中创建将在预定时间启动Cloud SQL实例的cron作业?

为实现此目的,您可以使用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 instancestop 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 配置在执行以下任何源代码后都不会丢失。这只会停止和启动您的实例。

  1. STOP SQL 实例 云函数的源代码(Python 3.7)

main.py

​​>
# 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()

requirements.txt

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

  1. START SQL 实例云函数的源代码(Python 3.7)

main.py

​​>
# 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()

requirements.txt

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

  1. 将每个 Pub-Sub 主题与相关的 Cloud Functions 关联起来。

  1. 在 Cloud Scheduler 中安排 Cron 作业。

为启动和停止 SQL 实例创建单独的调度程序作业。然后为日常工作添加如下频率。

示例:

  • 每天上午 09:00 -> 0 9 * * *
  • 每天晚上 10:30 -> 30 22 * * *

方法二

使用这种方法,您可以在每次通过这些功能启动或停止实例时放置相同的预定义配置。但是,如果您从 Google Cloud Console 更改任何配置,一旦这些功能被计划作业执行,这些配置就会丢失。

  1. STOP SQL 实例 云函数的源代码(Python 3.7)

main.py

​​>
# 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()

requirements.txt

Same as above Method 1

  1. START SQL 实例云函数的源代码(Python 3.7)

main.py

​​>
# 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()

requirements.txt

Same as above Method 1

  1. 同方法 1 -> 步骤 3

  1. 同方法 1 -> 步骤 4
本文链接:https://www.f2er.com/3097386.html

大家都在问