Deploying to Amazon Elastic Kubernetes Service Using Elastic File System
- Launch the Cluster and Connect
- NodeAutoScalingGroupMinSize: 3
- NodeAutoScalingGroupDesiredSize: 3
- NodeAutoScalingGroupMaxSize: 4
- NodeInstanceType: t3.large
- Install Helm and an NGINX Ingress Controller
- Check if Helm is already installed. Run:
- Give Helm deploy permissions.
- Install the NGINX ingress controller for AWS:
- Configure Shared Storage Using Amazon Elastic File System
- From the AWS Management Console, navigate to EFS.
- Click Create file system.
- Select the new VPC created for the Kubernetes cluster.
- Click Customize.
- Add any tags as desired. Everything can be left as default. Click Next.
- The subnets should change to the EKS subnets. Add the EKS Node security group to the list of security groups so that our nodes have permissions to mount them.
- Click Next and then Create.
- Create Access Point. We recommend the following settings:
- Root directory path: /data/fmeserverdata
- POSIX user
- User ID: 1363
- Group ID: 1363
- Root directory creation permissions
- Owner user ID: 1363
- Owner group ID: 1363
- Permissions: 0755
- Install the Amazon EFS CSI Driver for your region.
- Create the efs storage class:
- Create the persistent volume using the following yaml file as an example. You will need to replace the volumeHandle with your File system ID and Access point ID from the EFS.
- Deploy FME Server
- Add the Safe Software Helm repository:
- Get the IP address of the Ingress Controller:
- Create a namespace in which to deploy. Run:
- Create a values.yaml file that will pass user-supplied parameter values into the Helm chart.
- (Optional) Update parameters in values.yaml.
- Install FME Server.
- To access FME Server after it deploys, invoke the external IP in your browser.

To launch and connect to a cluster in Amazon Elastic Kubernetes Service (EKS), follow the instructions in the Getting Started with Amazon EKS documentation. You must configure some prerequisite resources such as an Amazon Virtual Private Cloud (VPC) and Identity and Access Management (IAM) role for the cluster.
To deploy an FME Server to the cluster for test purposes, we recommend the following settings:
You can skip the step to "Launch a Guest Book Application."

helm version
If not installed, install Helm.
Run:
kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-<version>/deploy/static/provider/aws/deploy.yaml
Replace <version> with the most recent version in the corresponding script in the NGINX Ingress Controller Installation Guide. As well, replace other syntax elements with any changes in the updated script.

To deploy FME Server across multiple nodes, configure storage for the FME Server System Share using Amazon Elastic File System (EFS).
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: efs-sc
provisioner: efs.csi.aws.com
apiVersion: v1
kind: PersistentVolume
metadata:
name: fmeserver-data
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: efs-sc
csi:
driver: efs.csi.aws.com
volumeHandle: fs-<file-system-id>::fsap-<access-point-id>

helm repo add safesoftware https://safesoftware.github.io/helm-charts/
kubectl describe service ingress-nginx-controller --namespace ingress-nginx
Note the "LoadBalancer Ingress:" of the nginx-ingress-controller. This is the ingress into the cluster.
kubectl create namespace <namespace_name>
For example:
kubectl create namespace fmeserver
To get the default Helm chart values file, run:
helm show values <chart>
For example:
helm show values safesoftware/fmeserver-2021.2
To write the values to a file:
helm show values safesoftware/fmeserver-2021.2 >> values.yaml
For more information on value files, see the Helm Docs.
A current list of supported parameters for FME Server can be found on GitHub.
The following are parameters you may want to change in the values.yaml file:

Parameter |
Example or Possible Value |
Description |
---|---|---|
fmeserver.image.tag | 2021.2 | Set to the FME Server major release version you want to deploy, such as 2021.0 or 2021.2. You must also update the FME Server version when installing the chart; for example, safesoftware/fmeserver-2021.2 |
fmeserver.engines[].name | “standard-group” | The name of the engine group. This can be changed, particularly if creating multiple engine groups. |
fmeserver.engines[].engines | 2 | Controls the number of engine pods to start. |
fmeserver.engines[].type | STANDARD | DYNAMIC | Controls the type of engine to start. |
deployment.hostname | Set to the IP address of the ingress controller noted previously. | |
deployment.numCores | 2 | Starts two FME Server Core pods for fault tolerance and load balancing. |
deployment.useHostnameIngress | true | false | If DNS is set up for the ingress controller, specify the DNS name for deployment.hostname and leave this parameter to true. If not, specify false. |
storage.fmeserver.class | efs-sc | Uses the EFS storage class set up previously. To verify the name, run kubectl get sc |
helm install <name> <chart> -f values.yaml
For example:
helm install fmeserver safesoftware/fmeserver-2021.2 -f values.yaml
If you make changes to the values.yaml file after FME Server is installed (such as to scale FME Server engines), use the helm upgrade command:
helm upgrade <name> <chart> -f values.yaml
For example:
helm upgrade fmeserver safesoftware/fmeserver-2021.2 -f values.yaml