Deploy SAP Data Intelligence on Amazon EKS using CLI only!

For the more technical user, nothing matches the efficiency of the Command line (CLI). There are lots of tips, tricks, and ideas around for hacking your command-line productivity to make you more efficient. This blog post shows how to install SAP Data Intelligence on Amazon Elastic Kubernetes Service (Amazon EKS) using just a few CLI tools. Let’s dive in!

Before starting following these steps, you need to install and configure these CLI tools.

  • eksctl: A command-line tool for working with EKS clusters that automates many individual tasks. For more information, see The eksctl command line utility.
  • kubectl: A command-line tool for working with Kubernetes clusters. For more information, see Installing kubectl.
  • awscli: A command-line tool for working with AWS services. With just one tool to download and configure, you can control multiple AWS services from the command line and automate them through scripts. For more information, see awscli documentation.
  • slcb: SLC bridge is a command-line tool from SAP to enable the container bridge and execute installation using the stack.xml provided by the SAP Maintenance Planner. For more information, see the slc bridge blog post by Roland Kramer. 

The first step is to create an EKS cluster. The hard way is to create the VPC, IAM role with ECR access and security group directly in the AWS console and it is a rather time consuming process. The faster ways is to the eksctl command-line to do all this in one single step. The command below is for Windows command prompt, but you can simply replace the ^ with \ if you are using a Linux terminal.

eksctl create cluster ^ --name SDI-on-AWS ^
--version 1.18 ^
--full-ecr-access ^ --with-oidc ^
--region us-east-1 ^
--nodegroup-name workers ^
--node-type m5.2xlarge ^
--nodes 1 ^
--nodes-min 1 ^
--nodes-max 4 ^
--ssh-access ^
--ssh-public-key "Replace with your EC2 key pair" ^
--managed ^
--vpc-private-subnets= "Replace with Subnet 1", "Replace with Subnet 2" ^
--node-private-networking

This usually takes about 15 minutes, and you should get a response as below.

[✔] EKS cluster "SDI-on-AWS" in "us-east-1" region is ready

The SAP Data Intelligence software needs to be stored in a repository. The AWS CLI command below creates an Amazon ECR repository.

aws ecr create-repository --repository-name sdi-on-aws-repo

The output is a JSON string, and the key thing to note here is the repositoryUri, which is needed for the next step.

{ "repository": { "repositoryArn": "arn:aws:ecr:us-east-1:1234567890:repository/sdi-on-aws-repo", "registryId": "1234567890", "repositoryName": "sdi-on-aws-repo", "repositoryUri": "1234567890.dkr.ecr.us-east-1.amazonaws.com/sdi-on-aws-repo", "createdAt": 1637998573.0, "imageTagMutability": "MUTABLE", "imageScanningConfiguration": { "scanOnPush": false } }
}

For this step, you need to go to SAP Service Marketplace. The detailed steps are in SAP documentation, and it is very much the same steps as the SAP Netweaver installation that most readers would be familiar with. The output for this step is the download of the SLC bridge software and the Stack.xml.

Set up the SLC bridge base by simply running the command below.

slcb.EXE init

You will need to use the repositoryUri from Step 2. The output of this step is an URL pointing to the Elastic Load Balancer (ELB) with the SLC bridge service in the backend.

Deployment "slcbridgebase" has 1 available replicas in namespace "sap-slcbridge"
Service "slcbridgebase-service" is listening on "https://a1234567891012345-12345678.us-east-1.elb.amazonaws.com:9000/docs/index.html"
slcb.EXE execute --useStackXML MP_Stack.xml -u shell

Select the parameters you need, and it takes about 1-2 hours to complete the installation.

Run the following commands deploy an ingress controller for Kubernetes using Amazon Elastic Load Balancer. First, create a YAML file as below.

apiVersion: extensions/v1beta1
kind: Ingress
metadata: annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/force-ssl-redirect: "true" nginx.ingress.kubernetes.io/secure-backends: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/proxy-body-size: "0" nginx.ingress.kubernetes.io/proxy-buffer-size: 16k nginx.ingress.kubernetes.io/proxy-connect-timeout: "30" nginx.ingress.kubernetes.io/proxy-read-timeout: "1800" nginx.ingress.kubernetes.io/proxy-send-timeout: "1800" name: vsystem
spec: rules: - host: sapdatahub http: paths: - path: / backend: serviceName: vsystem servicePort: 8797 tls: - hosts: - sapdatahub secretName: vsystem-tls-certs

Then just deploy.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/mandatory.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/provider/aws/service-l4.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.24.1/deploy/provider/aws/patch-configmap-l4.yaml kubectl -n sapdi3 create -f ingress.yaml

Go to the hosts file or your DNS and add an entry for the IP address of the Elastic Load Balancer, and that’s it.

SAP%20Data%20Initelligence

In this blog post, I show how the combination of eksctl, kubectl, awscli and slcb can be used to deploy SAP Data Intelligence on AWS. These are small, yet handy, productivity hack that will help make you loads more efficient when using the command line.

I hope you that you find this interesting and have as much fun as I did. Give SAP Data Intelligence a try in your AWS account. If you have questions, feel free to comment down below. Start building and have fun!