Skip to content

Commit 8510f7f

Browse files
feat: add module to install otel in eks cluster (#30)
1 parent 1bb40cd commit 8510f7f

File tree

8 files changed

+219
-0
lines changed

8 files changed

+219
-0
lines changed
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
<!-- BEGIN_TF_DOCS -->
2+
## Requirements
3+
4+
| Name | Version |
5+
|------|---------|
6+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.9.1 |
7+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | ~> 5.90 |
8+
| <a name="requirement_helm"></a> [helm](#requirement\_helm) | 2.17.0 |
9+
| <a name="requirement_kubernetes"></a> [kubernetes](#requirement\_kubernetes) | 2.36.0 |
10+
11+
## Providers
12+
13+
| Name | Version |
14+
|------|---------|
15+
| <a name="provider_aws"></a> [aws](#provider\_aws) | 5.99.1 |
16+
| <a name="provider_helm"></a> [helm](#provider\_helm) | 2.17.0 |
17+
18+
## Modules
19+
20+
No modules.
21+
22+
## Resources
23+
24+
| Name | Type |
25+
|------|------|
26+
| [helm_release.splunk_otel_collector](https://registry.terraform.io/providers/hashicorp/helm/2.17.0/docs/resources/release) | resource |
27+
| [aws_eks_cluster.cluster](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/eks_cluster) | data source |
28+
| [aws_eks_cluster_auth.cluster](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/eks_cluster_auth) | data source |
29+
| [aws_secretsmanager_secret.secrets](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/secretsmanager_secret) | data source |
30+
| [aws_secretsmanager_secret_version.secrets](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/secretsmanager_secret_version) | data source |
31+
32+
## Inputs
33+
34+
| Name | Description | Type | Default | Required |
35+
|------|-------------|------|---------|:--------:|
36+
| <a name="input_aws_profile"></a> [aws\_profile](#input\_aws\_profile) | AWS profile to use. | `string` | n/a | yes |
37+
| <a name="input_aws_region"></a> [aws\_region](#input\_aws\_region) | Default AWS region. | `string` | n/a | yes |
38+
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | The name of the EKS cluster | `string` | n/a | yes |
39+
| <a name="input_default_tags"></a> [default\_tags](#input\_default\_tags) | A map of tags to apply to resources. | `map(string)` | n/a | yes |
40+
| <a name="input_splunk_otel_collector"></a> [splunk\_otel\_collector](#input\_splunk\_otel\_collector) | Configuration for the Splunk OpenTelemetry Collector | <pre>object({<br/> splunk_observability_realm = string<br/> splunk_platform_endpoint = string<br/> splunk_platform_index = string<br/> gateway = bool<br/> splunk_observability_profiling = bool<br/> environment = string<br/> discovery = bool<br/> })</pre> | n/a | yes |
41+
42+
## Outputs
43+
44+
No outputs.
45+
<!-- END_TF_DOCS -->
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
terraform {
2+
# Intentionally empty. Will be filled by Terragrunt.
3+
backend "s3" {}
4+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
data "aws_eks_cluster" "cluster" {
2+
name = var.cluster_name
3+
}
4+
5+
data "aws_eks_cluster_auth" "cluster" {
6+
name = var.cluster_name
7+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
resource "helm_release" "splunk_otel_collector" {
2+
name = "splunk-otel-collector"
3+
repository = "https://signalfx.github.io/splunk-otel-collector-chart"
4+
chart = "splunk-otel-collector"
5+
version = "0.122.0"
6+
namespace = "splunk-otel-collector"
7+
create_namespace = true
8+
set {
9+
name = "cloudProvider"
10+
value = "aws"
11+
}
12+
13+
set {
14+
name = "distribution"
15+
value = "eks"
16+
}
17+
18+
set {
19+
name = "splunkObservability.accessToken"
20+
value = data.aws_secretsmanager_secret_version.secrets["splunk_access_ingest_token"].secret_string
21+
}
22+
23+
set {
24+
name = "clusterName"
25+
value = var.cluster_name
26+
}
27+
28+
set {
29+
name = "splunkObservability.realm"
30+
value = var.splunk_otel_collector.splunk_observability_realm
31+
}
32+
33+
set {
34+
name = "splunkPlatform.endpoint"
35+
value = var.splunk_otel_collector.splunk_platform_endpoint
36+
}
37+
38+
set {
39+
name = "splunkPlatform.index"
40+
value = var.splunk_otel_collector.splunk_platform_index
41+
}
42+
43+
set {
44+
name = "splunkPlatform.token"
45+
value = data.aws_secretsmanager_secret_version.secrets["splunk_cloud_hec_token_eks"].secret_string
46+
}
47+
48+
set {
49+
name = "gateway.enabled"
50+
value = var.splunk_otel_collector.gateway
51+
}
52+
53+
set {
54+
name = "splunkObservability.profilingEnabled"
55+
value = var.splunk_otel_collector.splunk_observability_profiling
56+
}
57+
58+
set {
59+
name = "environment"
60+
value = var.splunk_otel_collector.environment
61+
}
62+
63+
set {
64+
name = "agent.discovery.enabled"
65+
value = var.splunk_otel_collector.discovery
66+
}
67+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Re-use AWS settings from root module.
2+
provider "aws" {
3+
region = var.aws_region
4+
profile = var.aws_profile
5+
6+
# Required, as per security guidelines.
7+
default_tags {
8+
tags = var.default_tags
9+
}
10+
}
11+
12+
provider "kubernetes" {
13+
host = data.aws_eks_cluster.cluster.endpoint
14+
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority[0].data)
15+
token = data.aws_eks_cluster_auth.cluster.token
16+
}
17+
18+
provider "helm" {
19+
kubernetes {
20+
host = data.aws_eks_cluster.cluster.endpoint
21+
cluster_ca_certificate = base64decode(data.aws_eks_cluster.cluster.certificate_authority[0].data)
22+
token = data.aws_eks_cluster_auth.cluster.token
23+
}
24+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
locals {
2+
secrets = {
3+
splunk_access_ingest_token = {
4+
name = "/app/tf/splunk_access_ingest_token"
5+
}
6+
splunk_cloud_hec_token_eks = {
7+
name = "/app/tf/splunk_cloud_hec_token_eks"
8+
}
9+
}
10+
}
11+
12+
data "aws_secretsmanager_secret" "secrets" {
13+
for_each = local.secrets
14+
name = each.value.name
15+
}
16+
17+
data "aws_secretsmanager_secret_version" "secrets" {
18+
for_each = data.aws_secretsmanager_secret.secrets
19+
secret_id = each.value.id
20+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
variable "aws_profile" {
2+
type = string
3+
description = "AWS profile to use."
4+
}
5+
6+
variable "aws_region" {
7+
type = string
8+
description = "Default AWS region."
9+
}
10+
11+
variable "cluster_name" {
12+
description = "The name of the EKS cluster"
13+
type = string
14+
}
15+
16+
variable "splunk_otel_collector" {
17+
description = "Configuration for the Splunk OpenTelemetry Collector"
18+
type = object({
19+
splunk_observability_realm = string
20+
splunk_platform_endpoint = string
21+
splunk_platform_index = string
22+
gateway = bool
23+
splunk_observability_profiling = bool
24+
environment = string
25+
discovery = bool
26+
})
27+
}
28+
29+
variable "default_tags" {
30+
type = map(string)
31+
description = "A map of tags to apply to resources."
32+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
terraform {
2+
# Provider versions.
3+
required_providers {
4+
aws = {
5+
source = "hashicorp/aws"
6+
version = "~> 5.90"
7+
}
8+
helm = {
9+
source = "hashicorp/helm"
10+
version = "2.17.0"
11+
}
12+
kubernetes = {
13+
source = "hashicorp/kubernetes"
14+
version = "2.36.0"
15+
}
16+
}
17+
18+
# OpenTofu version.
19+
required_version = ">= 1.9.1"
20+
}

0 commit comments

Comments
 (0)