Ошибка SSL при подключении к Redshift из Go API

У меня есть следующий код:

func NewConnection(connectionString string) (*sql.DB, error) {
    db, err := sql.Open("postgres", connectionString)
    if err := db.Ping(); err != nil {
        log.Panic(err)
    }
    return db, err
}

И следующий Dockerfile:

# Build env
FROM golang:alpine AS build

ARG stage

RUN apk update && apk upgrade && \
  apk add --no-cache bash git openssh build-base && \
  go get -u golang.org/x/vgo

ADD . /src
WORKDIR /src

RUN vgo mod init && vgo install ./...&& vgo build -o service

# Runtime env
FROM alpine

ARG stage

RUN apk update && apk add --no-cache ca-certificates openssl openssl-dev
WORKDIR /app

COPY --from=build /src/${stage}-env.yml /app/
COPY --from=build /src/service /app/

ENV CONFIG_PATH=.

ENTRYPOINT ./service

Моя функция NewConnection извлекает строку подключения Redshift из очереди вместе с некоторыми данными. Все это работает локально, когда я тестирую контейнер postgres. Однако при развертывании службы я получаю следующую ошибку:

panic: pq: parameter "ssl" cannot be changed after server start

Мое соединение содержит ?ssl=true, и оно должно быть SSL, мы подключаемся из сервиса Fargate в AWS, к AWS Redshift и т. д. Поэтому я думаю, что проблема может быть связана с отсутствием зависимостей ssl в моем контейнере Alpine или отсутствием сертификатов или чего-то в этом роде. линии.

Вы не проверяете ошибку в sql.Open перед тем, как перейти к проверке связи с базой данных. Что это?

Peter 28.11.2018 09:39

@Peter Я переместил эту ошибку, чтобы она обрабатывалась до пинга, и похоже, что это log.Panic(err) в пинге, который вызывает фатальную ошибку.

Ewan Valentine 28.11.2018 09:49

Не могли бы вы поделиться своей строкой подключения?

Alex Pliutau 28.11.2018 12:30
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
3
198
2

Ответы 2

Вы можете установить соединение с БД без SSL-шифрования, например:

db, err := sql.Open("postgres", "user=test password=test dbname=test sslmode=disable") 

Я понял это, в строке подключения, которую мы использовали, был ssl=true, который работал с библиотекой в ​​nodejs, но в Go это должен быть sslmode=require. Я проверил это и заменил строку.

Другие вопросы по теме