diff --git a/secrets_manager/secrets_manager.go b/secrets_manager/secrets_manager.go index e3926a53ccf40072765068c6c1701a9e15b9fd66..04c50cca103081aa493f1f46699ef26cc28ad522 100644 --- a/secrets_manager/secrets_manager.go +++ b/secrets_manager/secrets_manager.go @@ -36,6 +36,8 @@ var ( secretManagerRegion = "af-south-1" ) +var secretManagerSession *secretsmanager.SecretsManager + func GetDatabaseCredentials(secretID string, isDebug bool) (DatabaseCredentials, error) { secret, _ := GetSecret(secretID, isDebug) var credentials DatabaseCredentials @@ -56,11 +58,16 @@ func GetS3UploadCredentials(secretID string, isDebug bool) (*credentials2.Creden return credentials2.NewStaticCredentials(credentials.AccessKeyID, credentials.SecretKey, ""), nil } -// createClient Instantiates a new Secrets Manager client -func createClient(isDebug bool) (svc *secretsmanager.SecretsManager, err error) { +// getSecretManagerSession Instantiates a new Secrets Manager client session +func getSecretManagerSession(isDebug bool) (err error) { + if secretManagerSession != nil { + return nil + } + + logs.Info("Creating a new Secrets Manager session") awsSession, err := session.NewSession() if err != nil { - return svc, err + return err } // Get local config @@ -76,14 +83,14 @@ func createClient(isDebug bool) (svc *secretsmanager.SecretsManager, err error) }, }) if err != nil { - return svc, err + return err } } - // Create a Secrets Manager client - svc = secretsmanager.New(awsSession, aws.NewConfig().WithRegion(secretManagerRegion)) + // Create a Secrets Manager client session + secretManagerSession = secretsmanager.New(awsSession, aws.NewConfig().WithRegion(secretManagerRegion)) - return svc, nil + return nil } // logError Logs any errors returned by the Secrets Manager client @@ -108,7 +115,7 @@ func GetSecret(secretID string, isDebug bool) (string, string) { } // Create a Secrets Manager client - svc, err := createClient(isDebug) + err = getSecretManagerSession(isDebug) if err != nil { logs.Info("Could not create client: %+v", err) return "", "" @@ -120,7 +127,7 @@ func GetSecret(secretID string, isDebug bool) (string, string) { VersionStage: aws.String("AWSCURRENT"), // VersionStage defaults to AWSCURRENT if unspecified } - result, err := svc.GetSecretValue(input) + result, err := secretManagerSession.GetSecretValue(input) if err != nil { logError(err) return "", "" @@ -147,7 +154,7 @@ func GetSecret(secretID string, isDebug bool) (string, string) { // CreateSecret Creates a JSON marshaled "string secret" (can be expanded to cater for binary secrets should the need arise) func CreateSecret(secretID string, secret any, isDebug bool) (awsSecretID string, err error) { // Create a Secrets Manager client - svc, err := createClient(isDebug) + err = getSecretManagerSession(isDebug) if err != nil { logs.Info("Could not create client: %+v", err) return "", err @@ -164,7 +171,7 @@ func CreateSecret(secretID string, secret any, isDebug bool) (awsSecretID string SecretString: aws.String(string(secretStr)), } - result, err := svc.CreateSecret(input) + result, err := secretManagerSession.CreateSecret(input) if err != nil { logError(err) return "", err @@ -175,7 +182,7 @@ func CreateSecret(secretID string, secret any, isDebug bool) (awsSecretID string func DeleteSecret(secretID string, forceWithoutRecovery bool, isDebug bool) error { // Create a Secrets Manager client - svc, err := createClient(isDebug) + err := getSecretManagerSession(isDebug) if err != nil { logs.Info("Could not create client: %+v", err) return err @@ -187,7 +194,7 @@ func DeleteSecret(secretID string, forceWithoutRecovery bool, isDebug bool) erro ForceDeleteWithoutRecovery: aws.Bool(forceWithoutRecovery), } - _, err = svc.DeleteSecret(input) + _, err = secretManagerSession.DeleteSecret(input) if err != nil { logError(err) return err