Когда мы перешли с Azure на AWS, нам также пришлось немного изменить нашу инфраструктуру. Я довольно много исследовал, как лучше всего развернуть сервер Prisma в среде, готовой к работе.
У самих Prisma есть учебник о том, как это сделать, но он проходит через CloudFormation - и он отлично работает!
Учебник хорош - за исключением одной части. Кто-то в Prisma решил (я уверен, что у них были свои причины…?), Чтобы переменная среды PRISMA_CONFIG содержала все… в карте YAML! 😱 Попробуйте ввести это в однострочное поле env-var при создании определения задачи.
Он работает в первый раз, так как сам шаблон CloudFormation - это YAML, но при обновлении определения задачи он ломается. (Можете ли вы даже правильно ввести однострочный YAML? Кажется, что экранирование не работает ...)
Поэтому нам нужно вместо этого использовать PRISMA_CONFIG_PATH. Поэтому я пошел дальше и создал собственный контейнер Docker для решения этой проблемы.
Dockerfile сначала загружает образ Prisma (вам необходимо обновить этот контейнер, чтобы обновить Prisma). Затем он устанавливает для envvar PRISMA_CONFIG_PATH значение prisma.yml…
FROM prismagraphql/prisma:1.27 ARG PRISMA_CONFIG_PATH ENV PRISMA_CONFIG_PATH prisma.yml COPY config.yml config.yml COPY sub.sh sub.sh ENTRYPOINT sh sub.sh && sh -c /app/start.sh EXPOSE 4466
… Затем мы копируем локальный файл config.yml в контейнер…
port: PORT managementApiSecret: SECRET databases: default: migrations: true connector: mysql host: DATABASE_HOST port: DATABASE_PORT user: DATABASE_USER password: DATABASE_PASSWORD
… Которые содержат заполнители, которые, в свою очередь, заменяются на sub.sh, который также копируется ...
[ -z "${PORT}" ] && echo "Not set: PORT"; [ -z "${SECRET}" ] && echo "Not set: SECRET"; [ -z "${DATABASE_HOST}" ] && echo "Not set: DATABASE_HOST"; [ -z "${DATABASE_PORT}" ] && echo "Not set: DATABASE_PORT"; [ -z "${DATABASE_USER}" ] && echo "Not set: DATABASE_USER"; [ -z "${DATABASE_PASSWORD}" ] && echo "Not set: DATABASE_PASSWORD"; cp config.yml prisma.yml sed -ri 's/port: PORT/port: '$PORT'/g' prisma.yml sed -ri 's/managementApiSecret: SECRET/managementApiSecret: '$SECRET'/g' prisma.yml sed -ri 's/host: DATABASE_HOST/host: '$DATABASE_HOST'/g' prisma.yml sed -ri 's/port: DATABASE_PORT/port: '$DATABASE_PORT'/g' prisma.yml sed -ri 's/user: DATABASE_USER/user: '$DATABASE_USER'/g' prisma.yml sed -ri 's/password: DATABASE_PASSWORD/password: '$DATABASE_PASSWORD'/g' prisma.yml
… Который затем проверяет, что вы предоставили все необходимые env-vars, а затем делает копию исходного config.yml с именем prisma.yml, в котором заменяются все заполнители.
Каждый раз, когда контейнер запускается, этот сценарий оболочки запускается, а Prisma получает свою конфигурацию из файла.
Теперь все, что вам нужно сделать, это отправить свой контейнер в Dockerhub или ECR и создать определение задачи.
Ах, все переменные хороши и разделены. 😊
Довольно простые вещи - но, может быть, это кому-то поможет!