1. Deploy the node-web-app helm chart on AWS EKS


    To deploy a Node.js web application using a Helm chart on an Amazon EKS cluster, you'll need to perform a couple of primary tasks:

    1. Create an EKS cluster using Pulumi's EKS package. This will set up the necessary infrastructure on AWS for running Kubernetes workloads.
    2. Deploy the Node.js application using a Helm chart. Helm helps manage Kubernetes applications through Helm charts, which are packages of pre-configured Kubernetes resources.

    Below is a Pulumi TypeScript program that demonstrates how to accomplish these tasks. The program will:

    • Set up an EKS cluster.
    • Use Pulumi's Helm package to deploy the application using the specified Helm chart.

    I'll explain each section as we proceed.

    Remember, before you run this Pulumi code, you should have the following prerequisites met:

    • Pulumi CLI installed
    • AWS CLI installed and configured with appropriate credentials
    • Node.js and npm installed if they are not already available on your system

    Now, here is the Pulumi program that will create the resources:

    import * as eks from '@pulumi/eks'; import * as awsx from '@pulumi/awsx'; import * as k8s from '@pulumi/kubernetes'; import * as pulumi from '@pulumi/pulumi'; // Create an EKS cluster with the default configuration. const cluster = new eks.Cluster('eksCluster', {}); // Export the cluster's kubeconfig. export const kubeconfig = cluster.kubeconfig; // Set up a Kubernetes provider using the EKS cluster's kubeconfig. const provider = new k8s.Provider('k8sProvider', { kubeconfig: cluster.kubeconfig.apply(JSON.stringify), }); // Deploy the 'node-web-app' Helm chart on the EKS cluster using the above provider. const appNamespace = new k8s.core.v1.Namespace('app-ns', {}, { provider }); const nodeWebAppChart = new k8s.helm.v3.Chart('node-web-app', { chart: 'node-web-app', // The name of the chart. You may need to replace this with the actual chart name. version: '1.0.0', // The version of the chart. Adjust as applicable. namespace: appNamespace.metadata.name, // Deploy the chart in the created namespace. }, { provider }); // Export the app namespace and Helm chart status. export const appNamespaceName = appNamespace.metadata.name; export const nodeWebAppStatus = nodeWebAppChart.status;

    This program will output the kubeconfig and the created namespace, which you can use to interact with your EKS cluster and deployed resources.

    Key Points:

    • eks.Cluster: This resource is used to create an EKS cluster. By default, Pulumi will manage your cluster's security groups, node groups, etc. (EKS Cluster Docs).
    • k8s.core.v1.Namespace: Sets up a Kubernetes namespace where our helm chart will be deployed (Kubernetes Namespace Docs).
    • k8s.helm.v3.Chart: This resource is used to manage Helm chart deployments in the Kubernetes cluster. The chart property is where you specify the name of the Helm chart you want to deploy. In this case, node-web-app is a placeholder, and you would need to use the actual chart name from a Helm repository or your local chart. The version field refers to the version of the Helm chart. namespace denotes the namespace in which to deploy the helm chart (Helm Chart Docs).

    What To Do Next?

    To use this Pulumi program:

    1. Save the code to a new directory as index.ts.
    2. In the same directory, run pulumi up to create the EKS cluster and deploy the Node.js Helm chart.

    You'll then see Pulumi performing the deployment, and it will provide you with the outputs, including the kubeconfig and namespace. You can use the kubeconfig to configure kubectl and interact with your cluster to manage workloads, view logs, and more.

    For more advanced scenarios, like customizing your EKS cluster (e.g., specifying VPC configurations, IAM roles, etc.) or Helm chart (e.g., setting values, using a custom repository), you should consult Pulumi’s AWS EKS package and Helm chart documentation to understand all the available options and how to apply them to your needs.