go get github.com/tencentcloud/ssm-rotation-sdk-golang/lib
import (_ "github.com/go-sql-driver/mysql""github.com/tencentcloud/ssm-rotation-sdk-golang/lib/db""github.com/tencentcloud/ssm-rotation-sdk-golang/lib/ssm")
dbConn := &db.DynamicSecretRotationDb{}err := dbConn.Init(&db.Config{DbConfig: &db.DbConfig{MaxOpenConns: 100,MaxIdleConns: 50,IdleTimeoutSeconds: 100,ReadTimeoutSeconds: 5,WriteTimeoutSeconds: 5,SecretName: "test", // 凭据名IpAddress: "127.0.0.1", // 数据库实例的访问地址Port: 58366, // 数据库实例的访问端口DbName: "database_name", // 数据库名称ParamStr: "charset=utf8&loc=Local", //数据库连接相关配置参数},SsmServiceConfig: &ssm.SsmAccount{SecretId: os.Getenv("SECRET_ID"), // 子账号的 SecretIdSecretKey: os.Getenv("SECRET_KEY"), // 子账号的 SecretKeyRegion: "ap-guangzhou", // 凭据所在地域},WatchChangeInterval: time.Second * 10, // 监控间隔,建议设置为 10~60 秒})if err != nil {log.Fatalf("failed to initialize SSM SDK: %v", err)}defer func() {if err := dbConn.Close(); err != nil {log.Printf("failed to close SSM SDK: %v", err)}}()
c := dbConn.GetConn()// 注意:每次需要访问数据库时,都应调用 GetConn() 获取最新的连接池对象, 不要在业务代码中长期缓存该对象,以免DB访问失败!if c == nil {log.Fatal("failed to get database connection")}if err := c.Ping(); err != nil {log.Fatalf("failed to access database: %v", err)}// 示例中只是调用ping()方法测试账号密码的可用性。实际业务中,这里就可以执行具体的db操作了。// 在此执行具体的数据库操作。
c.Close() // 当应用程序退出时,可主动关闭数据库连接。这是个通用的操作,和数据库凭据没有直接关系
pip install ssm-rotation-sdk
import osimport loggingfrom ssm_rotation_sdk import (DynamicSecretRotationDb,Config,DbConfig,SsmAccount,)WATCH_FREQ = 10 # 凭据监控间隔,建议设置为 10~60 秒db_config = DbConfig(params={'secret_name': 'test', # 凭据名'ip_address': '127.0.0.1', # 数据库地址'port': 58366, # 数据库端口'db_name': 'database_name', # 指定具体的数据库名,如果为空,则只连接到数据库实例,不连接具体的数据库'param_str': 'charset=utf8&loc=Local',})ssm_service_config = SsmAccount(params={'secret_id': os.getenv('SECRET_ID'), # 需填写实际可用的子账号 SecretId'secret_key': os.getenv('SECRET_KEY'), # 需填写实际可用的子账号 SecretKey'region': 'ap-guangzhou', # 凭据所在地域})config = Config(params={'db_config': db_config,'ssm_service_config': ssm_service_config,'WATCH_FREQ': WATCH_FREQ,})
db_conn = DynamicSecretRotationDb()err = db_conn.init(config)if err:raise RuntimeError("Failed to initialize SSM SDK: {}".format(err))
c = db_conn.get_conn()# 注意:每次需要访问数据库时,都需要调用GetConn()来获取最新的DB连接,请不要在业务代码中缓存此对象,以免DB访问失败!if c is None:logging.error("Failed to get database connection")else:try:c.ping(reconnect=True) # 示例中只是调用ping()方法测试账号密码的可用性# 在此执行具体的数据库操作。except Exception:logging.exception("Failed to access database")raisefinally:c.close() # 归还连接到连接池
c.close() # 当应用程序退出时,可主动关闭数据库连接。这是个通用的操作,和数据库凭据没有直接关系
文档反馈