From c7a5b2c9e954c91fac689f096102c05b3c547c5a Mon Sep 17 00:00:00 2001 From: Rodrigue Koffi Date: Wed, 27 Jul 2022 18:26:02 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=8E=20Add=20AMP=20workspace=20(only)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 ++- examples/outputs.tf | 9 +++++++++ examples/workloads.tf | 6 ++---- locals.tf | 5 ++--- main.tf | 30 ++++++++++++++++++++++++----- modules/workloads/java/variables.tf | 16 +++++++++++++++ outputs.tf | 9 ++++++++- variables.tf | 23 ++++++++++++++++++++++ 8 files changed, 87 insertions(+), 14 deletions(-) create mode 100644 modules/workloads/java/variables.tf diff --git a/README.md b/README.md index d3f3ff1..ab3dd0f 100644 --- a/README.md +++ b/README.md @@ -93,4 +93,5 @@ No outputs. 1. fetching EKS auth as config map? and pass to module (version, etc) as object? 2. automatically pass config option as objects? (aws adot add-on: enable cert-manager, cert-manager version?) -3. Test case for every option possible? \ No newline at end of file +3. Test case for every option possible? +4. Need data source for AMP - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/prometheus_workspace, Bryant's module doesn't seem to support splitting usage (eg. using multiple alerting rules ONLY) diff --git a/examples/outputs.tf b/examples/outputs.tf index 3b97877..cc2c738 100644 --- a/examples/outputs.tf +++ b/examples/outputs.tf @@ -11,3 +11,12 @@ output "aws_region" { output "eks_cluster_version" { value = module.eks_observability_accelerator.eks_cluster_version } + + +output "prometheus_endpoint" { + value = module.eks_observability_accelerator.prometheus_endpoint +} + +output "prometheus_id" { + value = module.eks_observability_accelerator.prometheus_id +} diff --git a/examples/workloads.tf b/examples/workloads.tf index dab53b8..a1d1f71 100644 --- a/examples/workloads.tf +++ b/examples/workloads.tf @@ -17,10 +17,8 @@ module "eks_observability_accelerator" { # enable_open_telemetry_operator = true # open_telemetry_operator_config = map() // custom config - # # deploy selected workloads by count indexing - - # # this creates a new AMP workspace - # create_managed_prometheus_workspace = true + # creates a new AMP workspace, defaults to true + create_managed_prometheus_workspace = true # enable_haproxy = true # haproxy_config = { diff --git a/locals.tf b/locals.tf index 01a9ef9..46aa6b9 100644 --- a/locals.tf +++ b/locals.tf @@ -9,9 +9,6 @@ data "aws_eks_cluster" "eks_cluster" { } locals { - # eks_oidc_issuer_url = var.eks_oidc_provider != null ? var.eks_oidc_provider : replace(data.aws_eks_cluster.eks_cluster.identity[0].oidc[0].issuer, "https://", "") - # eks_cluster_endpoint = var.eks_cluster_endpoint != null ? var.eks_cluster_endpoint : data.aws_eks_cluster.eks_cluster.endpoint - # eks_cluster_version = var.eks_cluster_version != null ? var.eks_cluster_version : data.aws_eks_cluster.eks_cluster.version eks_oidc_issuer_url = replace(data.aws_eks_cluster.eks_cluster.identity[0].oidc[0].issuer, "https://", "") eks_cluster_endpoint = data.aws_eks_cluster.eks_cluster.endpoint eks_cluster_version = data.aws_eks_cluster.eks_cluster.version @@ -29,4 +26,6 @@ locals { irsa_iam_role_path = var.irsa_iam_role_path irsa_iam_permissions_boundary = var.irsa_iam_permissions_boundary } + + name = "aws-observability-accelerator" } diff --git a/main.tf b/main.tf index d9776be..4f2f553 100644 --- a/main.tf +++ b/main.tf @@ -3,19 +3,39 @@ # VPC and supporting resources # EKS and Managed node groups -# -//* -module "adot_operator" { +# locals { +# # if both adot and otel are enabled, just deploys adot +# enable_otel = (var.enable_amazon_eks_adot && var.enable_opentelemetry_operator) ? false : var.enable_opentelemetry_operator + +# # if both adot and otel are disabled, just deploys adot +# enable_adot = (!var.enable_amazon_eks_adot && !var.enable_opentelemetry_operator) ? true : var.enable_amazon_eks_adot + +# #possible side effects? maybe customer wants only dashboards? + +# } + +module "operator" { source = "./modules/core/opentelemetry-operator" - count = var.enable_amazon_eks_adot ? 1 : 0 enable_cert_manager = var.enable_cert_manager + enable_amazon_eks_adot = var.enable_amazon_eks_adot + enable_opentelemetry_operator = var.enable_opentelemetry_operator + kubernetes_version = local.eks_cluster_version addon_context = local.context } -//*/ module "java" { source = "./modules/workloads/java" + + amp_endpoint = var.create_managed_prometheus_workspace ? aws_prometheus_workspace.this[0].prometheus_endpoint : var.managed_prometheus_endpoint + amp_id = var.create_managed_prometheus_workspace ? aws_prometheus_workspace.this[0].id : var.managed_prometheus_id +} + +resource "aws_prometheus_workspace" "this" { + count = var.create_managed_prometheus_workspace ? 1 : 0 + + alias = local.name + tags = var.tags } diff --git a/modules/workloads/java/variables.tf b/modules/workloads/java/variables.tf new file mode 100644 index 0000000..fa9f406 --- /dev/null +++ b/modules/workloads/java/variables.tf @@ -0,0 +1,16 @@ +variable "java" { + default = { + a = "" + b = "" + } +} + +variable "amp_endpoint" { + description = "Managed Prometheus endpoint" + type = string +} + +variable "amp_id" { + description = "Managed Prometheus workspace id" + type = string +} diff --git a/outputs.tf b/outputs.tf index 3110973..70958e4 100644 --- a/outputs.tf +++ b/outputs.tf @@ -8,7 +8,14 @@ output "aws_region" { value = var.aws_region } - output "eks_cluster_version" { value = data.aws_eks_cluster.eks_cluster.version } + +output "prometheus_endpoint" { + value = [aws_prometheus_workspace.this.*.prometheus_endpoint] +} + +output "prometheus_id" { + value = [aws_prometheus_workspace.this.*.id] +} diff --git a/variables.tf b/variables.tf index d2b16d6..fe0e535 100644 --- a/variables.tf +++ b/variables.tf @@ -39,6 +39,29 @@ variable "enable_cert_manager" { default = true } +variable "enable_opentelemetry_operator" { + type = bool + default = false +} + +variable "create_managed_prometheus_workspace" { + type = bool + default = true +} + + +variable "managed_prometheus_id" { + description = "AWS Managed Prometheus Workspace ID" + type = string + default = "" +} + +variable "managed_prometheus_endpoint" { + description = "AWS Managed Prometheus Workspace endpoint" + type = string + default = "" +} + variable "tags" { description = "Additional tags (e.g. `map('BusinessUnit`,`XYZ`)" type = map(string)