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?
FILESTORE_IP_ADDRESSenvironment variable is set correctly and passed to the Cloud Run instance. Confirm that the IP address is being logged correctly, such ascalling: showmount -e 10.15.225.10and check that the IP address10.15.225.10is the correct IP address of your Filestore instance. You can use the commandgcloud filestore instances describe myfilestoreor check the Filestore instance details in the Google Cloud Console.showmount -e 10.15.225.10is unable to find the IP address.showmount -e 10.15.225.10command is unable to find the IP address, it indicates that the NFS server on the Filestore instance is not reachable or there might be some network connectivity issue.