Heroku se bloque après la mise à niveau de Heroku Redis de Hobby à Premium 0

Problème

Lorsque je suis passé du plan Heroku Redis Hobby au plan Heroku Redis Premium 0, Heroku n'arrêtait pas de planter avec une erreur H10.


Solution du problème

Cause

Redis 6 nécessite TLS pour se connecter. Cependant, Heroku gère les demandes du niveau du routeur au niveau de l'application impliquant des certificats auto-signés. Il s'avère que Heroku termine SSL au niveau du routeur et les demandes sont transmises à partir de là à l'application via HTTP alors que tout est derrière le pare-feu et les mesures de sécurité de Heroku.

Liens qui ont permis de retrouver la cause :

https://ogirginc.github.io/en/heroku-redis-ssl-error

Comment activer TLS pour Redis 6 sur Sidekiq?

Solution

Personnalisez les options transmises à Redis afin que tls.rejectUnauthorized soit défini sur false.

const Queue = require('bull');
const redisUrlParse = require('redis-url-parse');
const REDIS_URL = process.env.REDIS_URL || 'redis://127.0.0.1:6379';
const redisUrlParsed = redisUrlParse(REDIS_URL);
const { host, port, password } = redisUrlParsed;
const bullOptions = REDIS_URL.includes('rediss://')
? {
redis: {
port: Number(port),
host,
password,
tls: {
rejectUnauthorized: false,
},
},
}
: REDIS_URL;
const workQueue = new Queue('work', bullOptions);

Commentaires

Posts les plus consultés de ce blog

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables