Run your http4s Apps as Google Cloud Functions.
Add the following to your build.sbt
file:
libraryDependencies += "de.killaitis" %% "http4s-cloud-functions" % Http4sCloudFunctionsVersion
You will probably also have to include the assembly sbt plugin in your
project/plugins.sbt
to build an uber jar (sbt assembly
):
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "1.1.0")
// Your HTTP App
object MyCloudFunction {
val httpApp = Router("/" -> HttpRoutes.of[IO] {
case GET -> Root / "hello" / name =>
Ok(s"Hello, $name.")
}).orNotFound
}
// Google Java Cloud Functions need a class without constructor parameters as an entry point.
import cats.effect.unsafe.implicits.global
class MyCloudFunction extends Http4sCloudFunction(MyCloudFunction.httpApp)
To deploy the Cloud Function jar, it has to be copied/moved in an otherwise empty directory. Then go to this directory and run the following:
gcloud functions deploy my-cloudfunction \
--entry-point MyCloudFunction \
--runtime java11 \
--trigger-http \
--memory 128MB \
--allow-unauthenticated \
--project {your project name} \
--region {your region} \
...