The Secret Weapon for DevOps Success: Creating an Application in Argo CD Using Terraform
Overview :-
In today’s fast-paced world of software development, DevOps practices have become essential for organizations to deliver high-quality applications quickly and efficiently. One powerful combination that has gained popularity among DevOps teams is the use of Argo CD and Terraform. This blog post will guide you through the process of creating an application in Argo CD using Terraform, a method that can significantly improve your DevOps workflow.
Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes, while Terraform is an infrastructure-as-code tool that allows you to define and provision infrastructure resources. By combining these two technologies, you can automate the deployment and management of your applications in a Kubernetes environment, making your DevOps processes more efficient and reliable.
Prerequisites :-
Before we dive into the procedure, make sure you have the following prerequisites in place:
A Kubernetes cluster
Argo CD installed on your cluster
Terraform installed on your local machine
Basic knowledge of Kubernetes, Argo CD, and Terraform
A Git repository to store your application manifests and Terraform configuration
Having these elements ready will ensure a smooth experience as we go through the steps of creating an application in Argo CD using Terraform.
Procedure :-
Let’s break down the process into manageable steps:
Step 1: Set up your Terraform configuration
- Create a new directory for your Terraform configuration:
mkdir argocd-app-terraform
cd argocd-app-terraform
- Create a
main.tf
file with the following content:
data "aws_eks_cluster" "default" {
name = "mahira-eks-cluster"
}
data "aws_eks_cluster_auth" "default" {
name = "mahira-eks-cluster"
}
provider "kubernetes" {
host = data.aws_eks_cluster.default.endpoint
cluster_ca_certificate = base64decode(data.aws_eks_cluster.default.certificate_authority.0.data)
token = data.aws_eks_cluster_auth.default.token
}
resource "kubernetes_manifest" "mahira_app" {
manifest = {
"apiVersion" = "argoproj.io/v1alpha1"
"kind" = "Application"
"metadata" = {
"finalizers" = [
"resources-finalizer.argocd.argoproj.io",
]
"name" = "mahira-k8s"
"namespace" = "argocd"
}
"spec" = {
"destination" = {
"namespace" = "default"
"server" = "https://kubernetes.default.svc"
}
"project" = "mahira-app"
"source" = {
"path" = "bases/mahira-app"
"repoURL" = "https://github.com/MahiraTechnology/mahira-k8s.git"
"targetRevision" = "HEAD"
}
}
}
}
resource "kubernetes_manifest" "mahira_project" {
manifest = {
"apiVersion" = "argoproj.io/v1alpha1"
"kind" = "AppProject"
"metadata" = {
"finalizers" = [
"resources-finalizer.argocd.argoproj.io",
]
"name" = "mahira-project"
"namespace" = "argocd"
}
"spec" = {
"clusterResourceWhitelist" = [
{
"group" = "*"
"kind" = "*"
},
]
"description" = "mahira Project"
"destinations" = [
{
"namespace" = "default"
"server" = "https://kubernetes.default.svc"
},
]
"namespaceResourceBlacklist" = []
"namespaceResourceWhitelist" = [
{
"group" = "*"
"kind" = "*"
},
]
"roles" = [{
"name" = "admin"
"policies" = [
"p, proj:mahira-app:admin, applications, create, mahira-app/*, allow",
"p, proj:mahira-app:admin, applications, update, mahira-app/*, allow",
"p, proj:mahira-app:admin, applications, delete, mahira-app/*, allow",
]
},
]
"sourceRepos" = [
"*",
]
}
}
}
2. Create a provider.tf file with following content.
terraform {
required_providers {
kubernetes = {
source = "hashicorp/kubernetes"
version = "2.32.0"
}
}
}
Make sure to replace argocd.example.com:443
with your Argo CD server address, your-argocd-auth-token
with your actual Argo CD authentication token, and update the repo_url
to point to your application's Git repository.
Step 2: Initialize and apply Terraform configuration
- Initialize Terraform:
terraform init
- Review the planned changes:
terraform plan
- Apply the configuration:
terraform apply
Step 3: Verify the application in Argo CD
Log in to your Argo CD web interface.
Navigate to the Applications page.
You should see your newly created application “mahira-app” listed.
Click on the application to view its details and sync status.
Step 4: Make changes and update the application
Make changes to your application code or Kubernetes manifests in your Git repository.
Commit and push the changes to the main branch.
Argo CD will automatically detect the changes and sync the application.
Conclusion :-
By adopting this method, you can improve your DevOps workflow, increase efficiency, and maintain better control over your application deployments. As you become more comfortable with this approach, you can explore more advanced features of both Argo CD and Terraform to further enhance your DevOps practices.
Remember, the key to success in DevOps is continuous learning and improvement. Keep exploring new tools and techniques to stay ahead in the ever-evolving world of software development and operations.
Subscribe to my newsletter
Read articles from Mahira Technology Private Limited directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Mahira Technology Private Limited
Mahira Technology Private Limited
A leading tech consulting firm specializing in innovative solutions. Experts in cloud, DevOps, automation, data analytics & more. Trusted technology partner.