Deploy the uptime-monitor helm chart on AWS EKS
TypeScriptTo deploy the uptime-monitor Helm chart on AWS Elastic Kubernetes Service (EKS), we'll perform the following steps:
- Set up an EKS cluster on AWS using the
aws.eks.Cluster
resource. - Define the necessary IAM roles for the EKS cluster.
- Deploy the Helm chart to the created EKS cluster using Pulumi's Kubernetes provider.
Here's a Pulumi program in TypeScript that accomplishes this:
import * as aws from "@pulumi/aws"; import * as pulumi from "@pulumi/pulumi"; import * as k8s from "@pulumi/kubernetes"; import * as eks from "@pulumi/eks"; // Step 1: Create an EKS cluster. const cluster = new eks.Cluster("uptime-monitor-cluster", { // specify the desired Kubernetes version version: "1.21", }); // Step 2: Define the necessary IAM roles for the EKS cluster. // Note: For brevity, we're using the default roles created by the `eks.Cluster` class. // In a production environment, you should specify your own roles with the necessary policies. // Step 3: Deploy the uptime-monitor Helm chart to the EKS cluster. const uptimeMonitorChart = new k8s.helm.v3.Chart("uptime-monitor", { chart: "uptime-monitor", // Replace `REPO_NAME` with the name of the repository where the chart is located. // Replace `CHART_VERSION` with the version of the chart you wish to deploy. fetchOpts: { repo: "https://REPO_NAME/helm-charts", }, // Add chart values here, for example: values: { service: { type: "LoadBalancer", }, }, }, { provider: cluster.provider }); // Export the cluster's kubeconfig. export const kubeconfig = cluster.kubeconfig; // Export the uptime-monitor service endpoint. export const uptimeMonitorEndpoint = uptimeMonitorChart.getResourceProperty( "v1/Service", "uptime-monitor", "status" ).apply(status => status.loadBalancer.ingress[0].hostname);
In the above Pulumi program:
- We create an Amazon EKS cluster by declaring an
eks.Cluster
resource. This also sets up all necessary underlying resources like the VPC and IAM roles with good defaults. You could customize these resources as required for your use case. - The IAM roles we use here are automatically created by Pulumi; however, for a production environment, you may want to create and manage these roles with specific policies according to the principle of least privilege.
- We then deploy the
uptime-monitor
Helm chart using Pulumi'sk8s.helm.v3.Chart
class. Thechart
parameter specifies the name of the Helm chart, and thefetchOpts.repo
specifies the Helm repository where the chart is hosted. Thevalues
object should contain the Helm chart values that customize the deployment to your needs. - Finally, we export the kubeconfig for accessing the EKS cluster and the service endpoint of the deployed
uptime-monitor
, which allows us to interact with the uptime monitor application.
After you've set up your Pulumi stack and authenticated your AWS CLI, you can run this program using Pulumi CLI commands:
pulumi up
This command will provision the resources as described in the program and output the endpoints that you can use to access the uptime-monitor service.
- Set up an EKS cluster on AWS using the