ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2022-11-11 14:08:58  阅读:321  来源: 互联网

标签:数据库 站点 文件 架构 数据 服务器 创建 结束 设置


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

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

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

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

如果我们单击下一步并选择使用 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 函数并停止或启动数据库。为此,我们需要转到我们的发布/订阅主题,单击消息,然后发布一条消息,例如您可以在屏幕上看到的消息。

标签:数据库,站点,文件,架构,数据,服务器,创建,结束,设置
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有