Siempre existe la necesidad de exponer ciertas valores para que nuestra aplicación las tome, sin tener que recurrir a embeberlas en nuestro aplicación, y usar variables de entorno esta es una forma ;)
Esta es la continuación del articula Usar .env en Intellij IDEA, pero esta vez centrándonos en la herramienta SBT, que sería el maven del mundo scala, aunque realmente sirve para compilar tanto Java como Scala, y mediante plugins compilar protobuff, kotlin, etc.
Desde el punto de vista técnico, siempre vamos a tener que tener alguna variable de entorno para conectarnos ya sea a la base de datos, o tokens/credenciales que nos sirve para conectarnos a servicios que resguardan estos secretos, por lo que no hay forma de brincarnos este paso. La forma más común en el mundo de los contenedores, es que esto se expongan como variables de entorno del descriptor del deployment de kubernetes o agregando un secreto de kubernetes. El caso es que independientemente de cual sea el mecanismo que puede estar manejado por el devops o no, nosotros tenemos que tener una forma de cómo setear esos valores en nuestro local y es lo que vamos a ver a continuación.
Variables de entorno
La forma más común es setear las variables de entorno en tu sistema operativo, o ejecutar un script para setearlas antes de ejecutarlo en el terminal, aunque existe una forma más elegante y efectiva de hacerlo y es usar los archivos .env, en un artículo anterior ya comenté cómo hacerlo a través del IDE Intellij, en esta ocasión usaremos un complemento de SBT.
sbt-dotenv
Voy a asumir que para este punto ya tenemos un conocimiento básico de sbt, en resumen sigue la misma estructura de maven salvo que en vez de existir un pom.xml, existe un build.sbt:
ProyectoScala
│
├── build.sbt
├── src
│ ├── main
│ │ ├── resource
│ │ ├── scala
│ │ └── java
│ │
│ └── test
│ ├── resource
│ ├── scala
│ └── java
│
└── project
├── build.properties
└── plugins.sbt
Adicional a esta estructura existe una carpeta llamada project en la cual vamos a editar a crear el archivo project/plugins.sbt, y colocar el archivo .env en la raíz del proyecto.
// project/plugins.sbt
addSbtPlugin("au.com.onegeek" % "sbt-dotenv" % "2.1.233")
addDependencyTreePlugin
Con agregar ese archivo será suficiente, ya podemos ejecutar el run o el runMain dentro del sbt y este se encargará de exponer las variables que se encuentran dentro de nuestro .env.
Cosas a tener en cuenta
- Los cambios en es .env no se hacen dinámicamente, eh tenido que salir y volver a entrar al sbt para que los tome.
- Nunca commitear el .env ya que contienen secretos que no se deben de versionar por seguridad.
Resulta muy cómodo trabajar de esta forma, porque podemos compartir el .env muy fácilmente sin tener que recurrir a setear variables que ensucian nuestro entorno.