1. Deploy the ibm-apic-instance helm chart on AWS EKS


    Deploying an IBM API Connect instance using Helm on an Amazon EKS (Elastic Kubernetes Service) cluster involves several steps. You'll need to set up an EKS cluster, configure your Kubernetes client to interact with the cluster, and then deploy the Helm chart.

    Below, I'll guide you through the process using Pulumi and TypeScript. Before we start, make sure you have Pulumi CLI installed and configured for AWS access. You must also have kubectl and Helm installed on your local machine to interact with the Kubernetes cluster.

    Step 1: Create an Amazon EKS Cluster

    To deploy the IBM API Connect Helm chart, we'll first create an Amazon EKS cluster using the aws.eks.Cluster resource from the @pulumi/aws package. This will manage the Kubernetes master nodes.

    We'll also need an IAM role for the EKS cluster and a node group that consists of worker nodes using the resources aws.iam.Role, aws.iam.RolePolicyAttachment, and aws.eks.NodeGroup.

    Step 2: Deploy the Helm Chart

    Once we have our EKS cluster running, we'll use Helm to deploy the IBM API Connect instance. Pulumi doesn't have direct support for Helm charts, but you can use Pulumi's Command resource from the @pulumi/command package to run arbitrary commands, such as helm install.

    Here is the full program:

    import * as aws from "@pulumi/aws"; import * as pulumi from "@pulumi/pulumi"; import * as eks from "@pulumi/eks"; import * as command from "@pulumi/command"; // Create an EKS cluster. const cluster = new eks.Cluster("my-cluster", { instanceType: "t2.medium", desiredCapacity: 2, minSize: 1, maxSize: 3, }); // Export the cluster kubeconfig. export const kubeconfig = cluster.kubeconfig; // Create a Command resource to deploy the ibm-apic-instance Helm chart. const helmDeploy = new command.local.Command("ibm-apic-instance-deploy", { create: pulumi.interpolate` helm repo add ibm-charts https://raw.githubusercontent.com/IBM/charts/master/repo/stable/ helm install my-apic-instance ibm-charts/ibm-apic-instance --kubeconfig ${kubeconfig} `, update: pulumi.interpolate` helm upgrade my-apic-instance ibm-charts/ibm-apic-instance --kubeconfig ${kubeconfig} `, delete: pulumi.interpolate` helm delete my-apic-instance --kubeconfig ${kubeconfig} `, }, { dependsOn: [cluster], }); // Export the Helm deployment command's stdout. export const helmDeployStdout = helmDeploy.stdout;


    1. We begin by importing the required Pulumi modules.
    2. We declare an EKS cluster with the desired configurations. Adjust the instance type and scaling options based on the workload requirements and budget constraints.
    3. The kubeconfig is exported so kubectl can interact with the cluster from your local machine.
    4. A local command resource named helmDeploy is responsible for:
      • Adding the stable repository from IBM's Helm chart repository.
      • Installing the IBM API Connect Helm chart.
      • Updating the Helm release as needed.
      • Deleting the Helm release upon resource destruction.

    It's important to adjust the helm install command with your required values and parameters that correspond to the IBM API Connect Helm chart.

    Usage Notes

    • Ensure Helm is installed and accessible in your system's PATH.
    • The kubeconfig output will allow you to manage your Kubernetes cluster with kubectl.
    • The create, update, and delete commands within the helmDeploy resource correspond to the lifecycle hooks for managing the Helm release.
    • After running pulumi up, the Pulumi program will deploy the specified EKS cluster and the Helm chart.

    Remember, before deploying your Pulumi program run pulumi up after seeing the plan, confirm the changes to start the deployment. After successful deployment, you should be able to use kubectl to interact with your EKS cluster and verify your IBM API Connect instance.

    Check the Helm chart's documentation for any specific configurations you may need to include as arguments in your helm install and helm upgrade commands within the Pulumi program.