diff --git a/main.tf b/main.tf
index 5180579083c6cce1ad9687c5039efd451b365a16..1803bccf5ec549087d5b43cd264f40564d4cadc0 100644
--- a/main.tf
+++ b/main.tf
@@ -3,12 +3,15 @@
 # A service account which the webapp runs in the context of.
 resource "google_service_account" "webapp" {
   project      = var.project
-  account_id   = "webapp-run"
-  display_name = "Web application Cloud Run service account"
+  account_id   = coalesce(var.service_account_id, "${var.name}-run")
+  display_name = coalesce(var.service_account_display_name, "Web application Cloud Run service account")
 }
 
 # The webapp service account has the ability to connect to the SQL instance.
+# (Only if sql_instance_connection_name is non-empty.)
 resource "google_project_iam_member" "webapp_sql_client" {
+  count = (var.sql_instance_connection_name != "") ? 1 : 0
+
   project = local.sql_instance_project
   role    = "roles/cloudsql.client"
   member  = "serviceAccount:${google_service_account.webapp.email}"
@@ -25,23 +28,29 @@ resource "google_cloud_run_service" "webapp" {
 
   template {
     metadata {
-      annotations = {
-        # Maximum number of auto-scaled instances.  For a container with
-        # N-workers, maxScale should be less than 1/N of the maximum connection
-        # count for the Cloud SQL instance.
-        "autoscaling.knative.dev/maxScale" = var.max_scale
-
-        # Cloud SQL instances to auto-magically make appear in the container as
-        # Unix sockets.
-        "run.googleapis.com/cloudsql-instances" = var.sql_instance_connection_name
-
-        # As mentioned at https://www.terraform.io/docs/configuration/resources.html#ignore_changes
-        # placeholders need to be created as the adding the key to the map is
-        # considered a change and not ignored by ignore_changes
-        "client.knative.dev/user-image"     = "placeholder"
-        "run.googleapis.com/client-name"    = "placeholder"
-        "run.googleapis.com/client-version" = "placeholder"
-      }
+      annotations = merge(
+        # Annotations which are always set:
+        {
+          # Maximum number of auto-scaled instances.  For a container with
+          # N-workers, maxScale should be less than 1/N of the maximum connection
+          # count for the Cloud SQL instance.
+          "autoscaling.knative.dev/maxScale" = var.max_scale
+
+          # As mentioned at https://www.terraform.io/docs/configuration/resources.html#ignore_changes
+          # placeholders need to be created as the adding the key to the map is
+          # considered a change and not ignored by ignore_changes
+          "client.knative.dev/user-image"     = "placeholder"
+          "run.googleapis.com/client-name"    = "placeholder"
+          "run.googleapis.com/client-version" = "placeholder"
+        },
+
+        # Annotations which are only set if there is a Cloud SQL instance:
+        (var.sql_instance_connection_name != "") ? {
+          # Cloud SQL instances to auto-magically make appear in the container as
+          # Unix sockets.
+          "run.googleapis.com/cloudsql-instances" = var.sql_instance_connection_name
+        } : {}
+      )
     }
 
     spec {
diff --git a/variables.tf b/variables.tf
index be7f5b0798c758d4c9e8797a03279f3a185bbb8a..17f7a1fcfdc5a757d0866b832b989052052f043b 100644
--- a/variables.tf
+++ b/variables.tf
@@ -16,7 +16,7 @@ variable "sql_instance_project" {
 
 variable "sql_instance_connection_name" {
   description = "SQL instance connection name"
-  type        = string
+  default     = ""
 }
 
 variable "cloud_run_region" {
@@ -69,3 +69,19 @@ If and only if a domain mapping has been created, the
 EOI
   default     = ""
 }
+
+variable "service_account_id" {
+  default     = ""
+  description = <<EOI
+A service account is always created for the web application. If non-empty this
+variable overrides the default service account id. The default id is formed
+from the "name" variable value with "-run" appended.
+EOI
+}
+
+variable "service_account_display_name" {
+  default     = ""
+  description = <<EOI
+If non-empty, override the default display name of the webapp service account.
+EOI
+}