= 1" /> = 1" /> = 1"/>

Connecting gcp cloud run instance to filestore with terraform

404 views Asked by At

I'm trying to recreate the tutorial howto connect filestore to gcp cloud run with terraform.

My terraform is now,

terraform {
  required_version = ">= 1.0.0"
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "4.62.0"
    }
  }
}

# Create a VPC network
resource "google_project_service" "vpcaccess-api" {
  project = var.project_gcp_name # Replace this with your project ID in quotes
  provider = google-beta
  service = "vpcaccess.googleapis.com"
}

# VPC
resource "google_compute_network" "default" {
  name                    = "cloudrun-network"
  project                 = var.project_gcp_name
  provider                = google-beta
  auto_create_subnetworks = false
}


resource "google_vpc_access_connector" "connector" {
  name           = "vpcconn"
  provider       = google-beta
  project        = var.project_gcp_name
  region         = "us-central1"
  ip_cidr_range  = "10.8.0.0/28"
  max_throughput = 300
  network        = google_compute_network.default.name
  depends_on     = [google_project_service.vpcaccess-api]
}


resource "google_filestore_instance" "filestore_instance" {
  name     = var.filestore_instance_name
  project  = var.project_gcp_name
  location = "us-central1-a"
  tier     = var.filestore_tier

  file_shares {
    capacity_gb = var.fileshare_capacity_gb
    name        = "share1"

    nfs_export_options {
      ip_ranges   = ["10.0.0.0/24"]
      access_mode = "READ_WRITE"
    }
  }

  networks {
    network      = "cloudrun-network"
    modes        = ["MODE_IPV4"]
  }
}

resource "google_cloud_run_service" "container" {
  name     = var.service_name
  location = var.region

  metadata {
    annotations = {
      "run.googleapis.com/client-name" = "terraform"
    }
  }

  template {
    spec {
      containers {
        image = "${var.image_name}:latest"

        env {
          name  = "FILESTORE_IP_ADDRESS"
          value = google_filestore_instance.filestore_instance.networks[0].ip_addresses[0]
        }
        env {
          name  = "FILE_SHARE_NAME"
          value = "share1"
        }
        env {
          name  = "MNT_DIR"
          value = "/mnt/workdir"
        }
        env {
          name  = "LOG_LEVEL"
          value = "INFO"
        }
      }
    }

    metadata {
      annotations = {
        # Limit scale up to prevent any cost blow outs!
        "autoscaling.knative.dev/maxScale" = "5"
        # Use the VPC Connector
        #"run.googleapis.com/vpc-access-connector" = module.test-vpc-module.subnets["us-central1/serverless-subnet"].name
        "run.googleapis.com/vpc-access-connector" = "vpcconn"
        # all egress from the service should go through the VPC Connector
        "run.googleapis.com/vpc-access-egress" = "all-traffic"
      }
    }


  }
  autogenerate_revision_name = true
}

The docker is set-up in the same way as the tutorial. I just added to the run.sh command showmount -e $FILESTORE_IP_ADDRESS to debug what's happening.

The logs show the following message,

clnt_create: RPC: Unknown host

as a double check that my environment variables are properly set, I show them in my logs and see

calling: showmount -e 10.15.225.10

and

$ gcloud filestore instances describe myfilestore
createTime: '2023-05-29T17:14:23.950831835Z'
fileShares:
- capacityGb: '1024'
  name: share1
  nfsExportOptions:
  - accessMode: READ_WRITE
    ipRanges:
    - 10.0.0.0/24
    squashMode: NO_ROOT_SQUASH
name: projects/spacejam-hc-us/locations/us-central1-a/instances/myfilestore
networks:
- connectMode: DIRECT_PEERING
  ipAddresses:
  - 10.15.225.10
  modes:
  - MODE_IPV4
  network: cloudrun-network
  reservedIpRange: 10.15.225.8/29
state: READY
tier: STANDARD

Running mount -o nfs --verbose on the client shows the following message in the logs,

mount.nfs: trying text-based options 'nolock,vers=4.2,addr=10.15.225.10,clientaddr=169.254.8.1'

Client address seems wrong, how can I fix that? Any other pointers to what I may do wrong?

0

There are 0 answers