func()

in go/connector.go [66:114]


func (c *SQLConnector) Connect(ctx context.Context) (driver.Conn, error) {
	now := time.Now()
	c.tracer = NewDefaultObservability(c.config)
	if metrics, ok := ctx.Value(MetricsKey).(tally.Scope); ok {
		c.tracer.SetScope(metrics)
	}
	if logger, ok := ctx.Value(LoggerKey).(*zap.Logger); ok {
		c.tracer.SetLogger(logger)
	}

	var awsAthenaSession *session.Session
	var err error
	// respect AWS_SDK_LOAD_CONFIG and local ~/.aws/credentials, ~/.aws/config
	if ok, _ := strconv.ParseBool(os.Getenv("AWS_SDK_LOAD_CONFIG")); ok {
		if profile := c.config.GetAWSProfile(); profile != "" {
			awsAthenaSession, err = session.NewSession(&aws.Config{
				Credentials: credentials.NewSharedCredentials("", profile),
			})
		} else {
			awsAthenaSession, err = session.NewSession(&aws.Config{})
		}
	} else if c.config.GetAccessID() != "" {
		staticCredentials := credentials.NewStaticCredentials(c.config.GetAccessID(),
			c.config.GetSecretAccessKey(),
			c.config.GetSessionToken())
		awsConfig := &aws.Config{
			Region:      aws.String(c.config.GetRegion()),
			Credentials: staticCredentials,
		}
		awsAthenaSession, err = session.NewSession(awsConfig)
	} else {
		awsAthenaSession, err = session.NewSession(&aws.Config{
			Region: aws.String(c.config.GetRegion()),
		})
	}
	if err != nil {
		c.tracer.Scope().Counter(DriverName + ".failure.sqlconnector.newsession").Inc(1)
		return nil, err
	}

	athenaAPI := athena.New(awsAthenaSession)
	timeConnect := time.Since(now)
	conn := &Connection{
		athenaAPI: athenaAPI,
		connector: c,
	}
	c.tracer.Scope().Timer(DriverName + ".connector.connect").Record(timeConnect)
	return conn, nil
}