Deploy the atlassian-jira helm chart on AWS EKS
TypeScriptTo deploy the Atlassian JIRA helm chart on AWS EKS using Pulumi, you'll follow these high-level steps:
- Set up an EKS cluster: You need an Elastic Kubernetes Service (EKS) cluster on AWS. You'll use
eks.Cluster
from theeks
package to create it easily. - Define an IAM role for EKS: The EKS cluster will need an IAM role with the required permissions, created using
aws-iam.EKSRole
. - Deploy the Helm chart: You'll use
kubernetes.helm.v3.Chart
from thekubernetes
package to deploy the Atlassian JIRA helm chart on the EKS cluster.
Below is a detailed Pulumi program written in TypeScript that demonstrates each of these steps:
import * as awsx from '@pulumi/awsx'; // High-level AWS components (including EKS) import * as eks from '@pulumi/eks'; // Pulumi's EKS components import * as pulumi from '@pulumi/pulumi'; // Core Pulumi functionality import * as k8s from '@pulumi/kubernetes'; // Pulumi's Kubernetes provider // Step 1: Create an AWS EKS cluster. const vpc = new awsx.ec2.Vpc("jira-vpc", {}); // Creating a new VPC for our EKS cluster const cluster = new eks.Cluster("jira-cluster", { vpcId: vpc.id, subnetIds: vpc.privateSubnetIds, instanceType: "t3.medium", desiredCapacity: 2, minSize: 1, maxSize: 3, }); // Export the cluster's kubeconfig. export const kubeconfig = cluster.kubeconfig; // Step 2: Define an IAM role for the EKS cluster. const eksRole = new eks.ServiceRole("jira-eksRole", { assumeRolePolicy: awsx.iam.assumeRolePolicyForPrincipal({ Service: "eks.amazonaws.com" }), }); // Attach the necessary AWS policies to the IAM role. const servicePolicyAttachment = new awsx.iam.RolePolicyAttachment("jira-eksPolicyAttach", { role: eksRole.role, policyArn: pulumi.output(awsx.iam.ManagedPolicy.AmazonEKSServicePolicy).id, }); const clusterPolicyAttachment = new awsx.iam.RolePolicyAttachment("jira-eksClusterPolicyAttach", { role: eksRole.role, policyArn: pulumi.output(awsx.iam.ManagedPolicy.AmazonEKSClusterPolicy).id, }); // Step 3: Deploy the Atlassian JIRA helm chart on the EKS cluster. const jiraChart = new k8s.helm.v3.Chart("atlassian-jira", { chart: "jira", version: "X.Y.Z", // Specify the helm chart version you want to deploy fetchOpts: { repo: "https://atlassian.github.io/data-center-helm-charts/", // The Helm repository containing Atlassian charts }, values: { // Customize your JIRA deployment by specifying values here. Refer to the chart's values for available options. }, }, { provider: cluster.provider }); // Export the JIRA service endpoint. export const jiraService = jiraChart.getResource("v1/Service", "jira"); /* Documentation References: - EKS Cluster: https://www.pulumi.com/registry/packages/eks/api-docs/cluster/ - IAM Role: https://www.pulumi.com/registry/packages/aws-iam/api-docs/eksrole/ - Helm Charts: https://www.pulumi.com/registry/packages/kubernetes/api-docs/helm/v3/chart/ */
In this program, we begin by importing the necessary Pulumi packages. We create a new VPC for our cluster, then instantiate an EKS cluster within that VPC. We ensure to also create an IAM role for EKS and attach the necessary policies. Finally, we deploy the Atlassian JIRA Helm chart, which should be customized with the proper chart version and deployment values according to your requirements.
Please replace
X.Y.Z
with the correct version of the JIRA helm chart. You can find available versions in the Atlassian Helm Chart repository.When you run this code with
pulumi up
, Pulumi will provision the resources on AWS and deploy the JIRA application to your EKS cluster. Thekubeconfig
andjiraService
exports provide information to interact with your Kubernetes cluster and the JIRA application.Remember to have your AWS and Pulumi CLI configured properly before running this program.
- Set up an EKS cluster: You need an Elastic Kubernetes Service (EKS) cluster on AWS. You'll use