> ## Documentation Index
> Fetch the complete documentation index at: https://ai-kb.automationanywhere.com/llms.txt
> Use this file to discover all available pages before exploring further.

# EKB Terraform अवसंरचना

> AWS EKS पर EKB प्लेटफ़ॉर्म प्रबंधन के लिए Terraform और Terragrunt IaC, GKE, AKS और bare-metal Kubernetes के लिए समर्थन stubs के साथ।

यह लेख AWS EKS पर EKB प्लेटफ़ॉर्म प्रबंधन के लिए Terraform और Terragrunt infrastructure-as-code (IaC) शामिल करता है, जिसमें GKE, AKS और bare-metal Kubernetes के लिए समर्थन stubs शामिल हैं। इसमें सभी Helm chart deployments और वातावरण कॉन्फ़िगरेशन टेम्पलेट्स शामिल हैं।

***

## दस्तावेज़ीकरण

| दस्तावेज़                                                                                             | विवरण                                                        |
| ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------ |
| [Terragrunt तैनाती गाइड](/offerings/on-premise/kubernetes-deployment/terragrunt-deployment)           | नया वातावरण बनाने और तैनात करने के लिए चरण-दर-चरण गाइड       |
| [AWS वास्तुकला अवलोकन](/offerings/on-premise/kubernetes-deployment/aws-architecture)                  | वास्तुकला अवलोकन, घटक विवरण और डेटा प्रवाह                   |
| [आपदा वसूली रणनीति](/offerings/on-premise/kubernetes-deployment/disaster-recovery-guide)              | DR रणनीति, RTO/RPO लक्ष्य, बैकअप सिस्टम और वसूली प्रक्रियाएँ |
| [पूर्व आवश्यकताएँ चेकलिस्ट](/offerings/on-premise/kubernetes-deployment/eks-deployment-prerequisites) | ग्राहक के साथ पूर्ण करने के लिए पूर्व-तैनाती चेकलिस्ट        |

***

## रिपॉज़िटरी संरचना

```
ekb-terraform/
├── root.hcl                              # मूल Terragrunt कॉन्फ़िगरेशन (रिमोट स्टेट, provider जनरेशन)
│
├── modules/                              # पुन: प्रयोग योग्य Terraform मॉड्यूल्स
│   ├── eks/                              # AWS EKS क्लस्टर, VPC, Karpenter, IAM, Helm releases
│   ├── aws-services/                     # ElastiCache Redis, Amazon MQ RabbitMQ
│   ├── helm/                             # जेनेरिक Helm release मॉड्यूल
│   ├── state/                            # S3 स्टेट bucket बूटस्ट्रैप
│   ├── aks/                              # Azure AKS (stub)
│   ├── gke/                              # Google GKE (stub)
│   └── baremetal/                        # Bare-metal Kubernetes (stub)
│
├── terragrunt/
│   ├── .gitignore
│   └── environments/
│       ├── STATE_MANAGEMENT_README.md
│       └── env-template-folder/          # नए वातावरण के लिए टेम्पलेट — कॉपी करें और placeholders भरें
│           ├── terragrunt.hcl            # मुख्य वातावरण कॉन्फ़िगरेशन (क्लस्टर, Helm releases, AWS सेवाएँ)
│           ├── state/
│           │   └── terragrunt.hcl        # इस वातावरण के लिए स्टेट bucket बूटस्ट्रैप
│           └── values/                   # प्रति-chart Helm values (प्रति chart एक फ़ाइल)
│               ├── infrastructure.yaml       # AWS Load Balancer Controller
│               ├── aws-ebs-csi-driver.yaml   # EBS CSI Driver
│               ├── karpenter.yaml            # Karpenter NodePool
│               ├── karpenter-nodeclasses.yaml# Karpenter EC2NodeClass
│               ├── karpenter-values.yaml     # Karpenter controller values
│               ├── keda.yaml                 # KEDA autoscaler
│               ├── odin-services.yaml        # EKB एप्लिकेशन सेवाएँ
│               ├── cloudnative-pg.yaml       # CloudNativePG operator (ENABLE_CNPG)
│               ├── ha-supabase-db.yaml       # CNPG के माध्यम से HA Postgres क्लस्टर (ENABLE_HA_SUPABASE_DB)
│               ├── supabase.yaml             # Supabase एप्लिकेशन स्टैक (ENABLE_SUPABASE)
│               ├── signoz.yaml               # SigNoz अवलोकन प्लेटफ़ॉर्म (ENABLE_SIGNOZ)
│               └── signoz-k8s-infra.yaml     # SigNoz k8s-infra मेट्रिक्स agent (ENABLE_SIGNOZ)
│
└── helm-deployment/                      # Vendored / स्थानीय Helm charts
    ├── infrastructure/                   # ALB Controller wrapper chart
    ├── odin-services/odin-services/      # EKB प्लेटफ़ॉर्म (Web, API, Celery, Automator, Ingress)
    ├── cloudnative-pg/                   # CloudNativePG operator chart
    ├── ha-supabase-db/                   # HA Supabase DB (CNPG Cluster + PgBouncer + barman backups)
    ├── supabase-kubernetes-ha/           # पूर्ण Supabase एप्लिकेशन स्टैक
    ├── signoz/                           # SigNoz अवलोकन प्लेटफ़ॉर्म
    └── k8s-infra/                        # SigNoz k8s-infra क्लस्टर मेट्रिक्स agent
```

***

## क्विक स्टार्ट

### 1. आवश्यक उपकरण स्थापित करें

**Terraform**

```bash theme={null}
# macOS
brew install terraform
 
# Linux
sudo apt update && sudo apt install terraform
```

**Terragrunt**

```bash theme={null}
# macOS
brew install terragrunt
 
# Linux / macOS (मैनुअल)
curl -Lo /usr/local/bin/terragrunt \
  https://github.com/gruntwork-io/terragrunt/releases/latest/download/terragrunt_linux_amd64
chmod +x /usr/local/bin/terragrunt
```

**kubectl और Helm**

```bash theme={null}
# macOS
brew install kubectl helm
 
# Linux
curl -LO "https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -m 0755 kubectl /usr/local/bin/kubectl
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
```

**इंस्टॉलेशन सत्यापित करें**

```bash theme={null}
terraform --version
terragrunt --version
kubectl version --client
helm version
aws sts get-caller-identity
```

***

### 2. एक नया वातावरण बनाएँ

नए वातावरण `env-template-folder` को कॉपी करके और placeholders भरकर बनाए जाते हैं।

पूर्ण चरण-दर-चरण प्रक्रिया के लिए [Terragrunt तैनाती गाइड](/offerings/on-premise/kubernetes-deployment/terragrunt-deployment) देखें। उच्च-स्तरीय प्रवाह है:

```bash theme={null}
# 1. टेम्पलेट कॉपी करें
cp -r terragrunt/environments/env-template-folder terragrunt/environments/your-env-name
 
# 2. सभी <YOUR_*> placeholders भरें:
#    - terragrunt/environments/your-env-name/terragrunt.hcl
#    - terragrunt/environments/your-env-name/state/terragrunt.hcl
#    - terragrunt/environments/your-env-name/values/*.yaml
 
# 3. स्टेट bucket बूटस्ट्रैप करें
cd terragrunt/environments/your-env-name/state
terragrunt apply
 
# 4. वातावरण चर सेट करें और तैनात करें
cd ../
export ENABLE_ALB_CONTROLLER=true
export WEB_DOMAIN="app.example.com"
export WEB_CERTIFICATE_ARN="arn:aws:acm:<region>:<account>:certificate/<id>"
# ... (पूर्ण चर सूची के लिए TERRAGRUNT_DEPLOYMENT_GUIDE.md देखें)
 
terragrunt apply
```

***

## सेवा सक्षम/अक्षम फ़्लैग्स

सभी वैकल्पिक सेवाएँ वातावरण चरों के माध्यम से टॉगल की जाती हैं। `terragrunt apply` चलाने से पहले इन्हें सेट करें।

| चर                      | डिफ़ॉल्ट | सेवा                                                       |
| ----------------------- | -------- | ---------------------------------------------------------- |
| `ENABLE_ALB_CONTROLLER` | `true`   | AWS Load Balancer Controller                               |
| `ENABLE_AWS_SERVICES`   | `false`  | ElastiCache Redis + Amazon MQ RabbitMQ                     |
| `ENABLE_CNPG`           | `false`  | CloudNativePG operator                                     |
| `ENABLE_HA_SUPABASE_DB` | `false`  | HA PostgreSQL क्लस्टर (`ENABLE_CNPG=true` आवश्यक)          |
| `ENABLE_SUPABASE`       | `false`  | पूर्ण Supabase स्टैक (`ENABLE_HA_SUPABASE_DB=true` आवश्यक) |
| `ENABLE_SIGNOZ`         | `false`  | SigNoz अवलोकन + k8s-infra agent                            |

<Info>
  **Supabase सेल्फ़-होस्टेड तैनाती क्रम**

  Supabase घटकों को क्रम में तैनात किया जाना चाहिए:

  ```bash theme={null}
  ENABLE_CNPG=true           terragrunt apply --target='helm_release.local["cloudnative-pg"]'
  ENABLE_HA_SUPABASE_DB=true terragrunt apply --target='helm_release.local["ha-supabase-db"]'
  ENABLE_SUPABASE=true       terragrunt apply --target='helm_release.local["supabase"]'
  ```
</Info>

***

## Helm Charts संदर्भ

| Chart (`helm-deployment/` में)  | Namespace        | द्वारा सक्षम            | विवरण                                    |
| ------------------------------- | ---------------- | ----------------------- | ---------------------------------------- |
| `infrastructure`                | `infrastructure` | हमेशा                   | AWS Load Balancer Controller             |
| `odin-services/odin-services`   | `default`        | हमेशा                   | Web, FastAPI, Celery, Automator, Ingress |
| `aws-ebs-csi-driver` (upstream) | `kube-system`    | हमेशा                   | EBS स्थायी volume driver                 |
| `keda` (upstream)               | `keda`           | हमेशा                   | Pod autoscaling                          |
| `cloudnative-pg`                | `cnpg-system`    | `ENABLE_CNPG`           | PostgreSQL operator                      |
| `ha-supabase-db`                | `ha-supabase-db` | `ENABLE_HA_SUPABASE_DB` | HA Postgres + PgBouncer + barman backups |
| `supabase-kubernetes-ha`        | `supabase`       | `ENABLE_SUPABASE`       | Kong, Auth, Storage, Studio, Realtime    |
| `signoz`                        | `monitoring`     | `ENABLE_SIGNOZ`         | वितरित tracing, मेट्रिक्स, लॉग्स         |
| `k8s-infra` (upstream)          | `monitoring`     | `ENABLE_SIGNOZ`         | क्लस्टर मेट्रिक्स DaemonSet agent        |

***

## मॉड्यूल्स संदर्भ

### `modules/eks`

प्राथमिक मॉड्यूल। प्रोविज़न करता है:

* 3 AZs में पब्लिक/प्राइवेट सबनेट्स के साथ VPC
* EKS क्लस्टर (Kubernetes 1.33) और Karpenter के लिए managed node group
* Karpenter controller + NodePool + EC2NodeClass
* IAM भूमिकाएँ (क्लस्टर, node group, Karpenter, ALB controller, EBS CSI driver)
* `helm_releases` इनपुट map के माध्यम से सभी Helm releases

### `modules/aws-services`

ElastiCache Redis और Amazon MQ RabbitMQ प्रोविज़न करता है। केवल `ENABLE_AWS_SERVICES=true` होने पर सक्रिय।

### `modules/state`

नए वातावरण के लिए S3 स्टेट bucket बूटस्ट्रैप करता है (वर्शनिंग, एन्क्रिप्शन, पब्लिक एक्सेस ब्लॉक)।

### `modules/helm`

पुन: प्रयोग योग्य Helm release मॉड्यूल जो upstream chart repositories और स्थानीय `chart_path` charts दोनों का समर्थन करता है।

***

## वातावरण कॉन्फ़िगरेशन

### Placeholders

`env-template-folder` में हर वातावरण-विशिष्ट मान `<YOUR_*>` placeholder का उपयोग करता है। तैनाती से पहले कुछ भी शेष न रहने की जाँच के लिए निम्नलिखित चलाएँ:

```bash theme={null}
grep -r "<YOUR_" terragrunt/environments/your-env-name/
```

### रिमोट स्टेट

स्टेट प्रति वातावरण S3 में संग्रहीत है। bucket को `state/terragrunt.hcl` द्वारा बूटस्ट्रैप किया जाता है और `root.hcl` द्वारा संदर्भित किया जाता है। नामकरण पैटर्न `ekb-terraform-state-<env-name>` है।

### Secrets

<Warning>
  संवेदनशील मान (पासवर्ड, API keys, प्रमाणपत्र ARNs) **कभी कमिट नहीं किए जाते**। इन्हें वातावरण चरों के रूप में पास किया जाता है जिन्हें `terragrunt.hcl` में `get_env()` कॉल्स द्वारा उपभोग किया जाता है, या values फ़ाइलों में `<YOUR_*>` placeholders के रूप में जिन्हें तैनाती से पहले भरा जाना चाहिए।
</Warning>

***

## समस्या निवारण

**AWS credentials सत्यापित करें**

```bash theme={null}
aws sts get-caller-identity
```

**क्लस्टर पहुँच जाँचें**

```bash theme={null}
aws eks update-kubeconfig --region <region> --name <cluster-name>
kubectl get nodes
kubectl get pods -A
```

**ALB Controller जाँचें**

```bash theme={null}
kubectl get pods -n infrastructure | grep aws-load-balancer-controller
kubectl get ingress -A
```

**Karpenter जाँचें**

```bash theme={null}
kubectl get pods -n kube-system | grep karpenter
kubectl get nodepools
kubectl get nodeclaims
```

**स्टेट लॉक जाँचें**

```bash theme={null}
# अटके हुए स्टेट को फ़ोर्स-अनलॉक करें (त्रुटि संदेश से lock ID का उपयोग करें)
cd terragrunt/environments/your-env-name
terragrunt force-unlock <lock-id>
```

**शेष placeholders की जाँच करें**

```bash theme={null}
grep -r "<YOUR_" terragrunt/environments/your-env-name/
```

**Helm release स्थिति जाँचें**

```bash theme={null}
helm list -A
helm status <release-name> -n <namespace>
helm get values <release-name> -n <namespace>
```

***

## Multi-Cloud समर्थन (योजनाबद्ध)

| प्लेटफ़ॉर्म | स्थिति | मॉड्यूल             |
| ----------- | ------ | ------------------- |
| AWS EKS     | सक्रिय | `modules/eks`       |
| Azure AKS   | Stub   | `modules/aks`       |
| Google GKE  | Stub   | `modules/gke`       |
| Bare metal  | Stub   | `modules/baremetal` |
