用于停止云 SQL 数据库的云计划程序


我们在 mkdev 拥有的应用程序之一是 Claimora 我们用它来跟踪时间。当我们想要部署Claimora时,我们有两个环境,暂存和生产,在每个环境中,我们都有一个Postgres数据库启动并运行。当我们不在环境中工作时,我们希望省钱,为此,我们将在工作时间结束时停止数据库。让我们看看我们能做什么。

为了能够在Google Cloud中调度某些内容,我们首先需要一个调度程序。此调度程序作业将向发布/订阅主题发送一条消息,告知需要执行的操作。在我们的例子中,我们要做的是停止或启动一个特定的数据库。此发布/订阅主题将调用云函数,并且停止或启动数据库的将是此云函数。

让我们从最后开始,从我们要停止或启动的数据库开始。正如您在屏幕上看到的那样,我们在Claimora中有一个被调用的数据库。我们已经启动并运行了这个数据库超过30天,大多数时候这个Postgres甚至不是真正需要的。claimora-database-staging

用于停止云 SQL 数据库的云计划程序

因此,应用我们的练习并遵循我们刚刚展示的场景,我们需要一个云函数。我们需要创建一个将调用的云函数。下一步是选择 pub/sub 作为触发器,并创建一个我们将调用的主题。sql-up-downEurope-west1database-up-down

用于停止云 SQL 数据库的云计划程序

如果我们单击下一步并选择使用 1.13 作为运行时,我们可以粘贴代码:

package p


import (
 "context"
 "encoding/json"
 "log"


 "golang.org/x/oauth2/google"
 sqladmin "google.golang.org/api/sqladmin/v1beta4"
)


type PubSubMessage struct {
 Data []byte `json:"data"`
}


type MessagePayload struct {
 Instance string
 Project string
 Action string
}


func ProcessPubSub(ctx context.Context, m PubSubMessage) error {
 var psData MessagePayload
 err := json.Unmarshal(m.Data, &psData)
 if err != nil {
  log.Println(err)
 }
 log.Printf("Request received for Cloud SQL instance %s action: %s, %s", psData.Action, psData.Instance, psData.Project)


 hc, err := google.DefaultClient(ctx, sqladmin.CloudPlatformScope)
 if err != nil {
  return err
 }


 service, err := sqladmin.New(hc)
 if err != nil {
  return err
 }


 action := "UNDEFINED"
 switch psData.Action {
 case "start":
  action = "ALWAYS"
 case "stop":
  action = "NEVER"
 default:
  log.Fatal("No valid action provided.")
 }


 // See more examples at:
 // https://cloud.google.com/sql/docs/sql...
 rb := &sqladmin.DatabaseInstance{
  Settings: &sqladmin.Settings{
   ActivationPolicy: action,
  },
 }


 resp, err := service.Instances.Patch(psData.Project, psData.Instance, rb).Context(ctx).Do()
 if err != nil {
  log.Fatal(err)
 }
 log.Printf("%#v/n", resp)
 return nil
}

下一步是授予云函数权限,以便能够停止和启动数据库。为此,我们转到IAM,选择服务帐户并授予作为云SQL管理员的权限。claimora-staging@appspot.gserviceaccount.com

现在我们只需要测试我们的主题是否调用 step 函数并停止或启动数据库。为此,我们需要转到我们的发布/订阅主题,单击消息,然后发布一条消息,例如您可以在屏幕上看到的消息。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/database/292953.html

(0)
上一篇 2022年11月11日 18:03
下一篇 2022年11月11日 18:52

相关推荐

发表回复

登录后才能评论