Я подключаюсь к удаленному серверу mon go, используя следующую команду туннелирования s sh:
ssh -i document-db-tun.pem -L 27017:docdb.cluster-cf.us-east-2.docdb.amazonaws.com:27017 ubuntu@ec2-111-111-111-111.us-east-2.compute.amazonaws.com -N
Также подключение к серверу mon go работает нормально, используя mon go команда локально.
Но когда я пытаюсь подключиться к нему локально, используя код golang, выдается ошибка Mongo connection ckeck failed. Err: context deadline exceeded
.
const (
mongoTimeout = time.Second * 10
)
func initMongo() {
mongoConf := common.Conf.ServiceConfig.Databases.Mongo
ctx, _ := context.WithTimeout(context.Background(), mongoTimeout)
uri := fmt.Sprintf("mongodb://127.0.0.1:27017")
if common.IsSentryEnabled() {
sentry.AddBreadcrumb(&sentry.Breadcrumb{
Message: fmt.Sprintf("Connecting to mongo server at: '%v'", uri),
Category: common.SENTRY_CAT_REPO,
Level: sentry.LevelInfo,
})
}
client := options.Client().
SetReadPreference(readpref.SecondaryPreferred()).
SetAppName("catalog").
SetMaxConnIdleTime(time.Microsecond * 100000).
SetAuth(options.Credential{
Username: mongoConf.Username,
Password: mongoConf.Password,
}).
ApplyURI(uri)
pureMongoClient, err := mongo.Connect(ctx, client)
if err != nil {
if common.IsSentryEnabled() {
sentry.AddBreadcrumb(&sentry.Breadcrumb{
Message: "Error connecting to mongo",
Category: common.SENTRY_CAT_REPO,
Level: sentry.LevelFatal,
})
sentry.ConfigureScope(func(scope *sentry.Scope) {
scope.SetTags(map[string]string{
common.SENTRY_SCOPE_KEY: common.SENTRY_SCOPE_MONGO,
common.SENTRY_TYPE_KEY: common.SENTRY_TYPE_DB,
})
})
sentry.CaptureException(err)
sentry.Flush(time.Second * 5)
}
panic(fmt.Sprintf("Failed to establish mongo connection. Err: %v ", err))
}
err = pureMongoClient.Ping(ctx, readpref.Primary())
if err != nil {
if common.IsSentryEnabled() {
sentry.AddBreadcrumb(&sentry.Breadcrumb{
Message: "Mongo connection ckeck failed",
Category: common.SENTRY_CAT_REPO,
Level: sentry.LevelFatal,
})
sentry.ConfigureScope(func(scope *sentry.Scope) {
scope.SetTags(map[string]string{
common.SENTRY_SCOPE_KEY: common.SENTRY_SCOPE_MONGO,
common.SENTRY_TYPE_KEY: common.SENTRY_TYPE_DB,
})
})
sentry.CaptureException(err)
sentry.Flush(time.Second * 5)
}
panic(fmt.Sprintf("Mongo connection ckeck failed. Err: %v ", err))
}
mongoDB := pureMongoClient.Database(mongoConf.Dbname)
dbManager.MongoDB = &MGODatabase{
Database: mongoDB,
}
}
Имя пользователя и пароль, используемые в коде, - это те, которые необходимы для подключения к удаленному серверу. Что может быть не так при подключении к удаленному серверу mon go с использованием кода golang?