Ошибка SSL при подключении к Redshift из API-интерфейса Go - PullRequest
0 голосов
/ 28 ноября 2018

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

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, отсутствием сертификатов или чем-то подобным.

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

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

0 голосов
/ 28 ноября 2018

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

db, err := sql.Open("postgres", "user=test password=test dbname=test sslmode=disable") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...