diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 3166e08..bf250a4 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -41,6 +41,13 @@ jobs: matrix: directory: ${{ fromJson(needs.collectInputs.outputs.directories) }} steps: + - name: Remove default Terraform + run: rm -rf $(which terraform) + + - name: Should fail + continue-on-error: true + run: terraform version + - name: Checkout uses: actions/checkout@v3 @@ -73,27 +80,37 @@ jobs: with: directory: ${{ matrix.directory }} - - name: Pre-commit Terraform ${{ steps.minMax.outputs.minVersion }} + - name: Pre-commit Terraform 1.1.0 #${{ steps.minMax.outputs.minVersion }} uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0 # Run only validate pre-commit check on min version supported if: ${{ matrix.directory != '.' && steps.changes.outputs.src== 'true' }} with: - terraform-version: ${{ steps.minMax.outputs.minVersion }} + terraform-version: 1.1.0 # ${{ steps.minMax.outputs.minVersion }} args: 'terraform_validate --color=always --show-diff-on-failure --files ${{ matrix.directory }}/*' - - name: Pre-commit Terraform ${{ steps.minMax.outputs.minVersion }} + - name: Pre-commit Terraform 1.1.0 #${{ steps.minMax.outputs.minVersion }} uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0 # Run only validate pre-commit check on min version supported if: ${{ matrix.directory == '.' && steps.changes.outputs.src== 'true' }} with: - terraform-version: ${{ steps.minMax.outputs.minVersion }} + terraform-version: 1.1.0 #${{ steps.minMax.outputs.minVersion }} args: 'terraform_validate --color=always --show-diff-on-failure --files $(ls *.tf)' + - if: steps.changes.outputs.src== 'true' + run: terraform version + preCommitMaxVersion: name: Max TF pre-commit runs-on: ubuntu-latest needs: collectInputs steps: + - name: Remove default Terraform + run: rm -rf $(which terraform) + + - name: Should fail + continue-on-error: true + run: terraform version + - name: Checkout uses: actions/checkout@v3 @@ -125,10 +142,14 @@ jobs: uses: clowdhaus/terraform-min-max@v1.0.7 if: steps.changes.outputs.src== 'true' - - name: Pre-commit Terraform ${{ steps.minMax.outputs.maxVersion }} + # TODO - remove hardcoded version once optional attributes are resolved/removed + - name: Pre-commit Terraform 1.2.9 # ${{ steps.minMax.outputs.maxVersion }} uses: clowdhaus/terraform-composite-actions/pre-commit@v1.6.0 if: steps.changes.outputs.src== 'true' with: - terraform-version: ${{ steps.minMax.outputs.maxVersion }} + terraform-version: 1.2.9 # ${{ steps.minMax.outputs.maxVersion }} terraform-docs-version: ${{ env.TERRAFORM_DOCS_VERSION }} tflint-version: ${{ env.TFLINT_VERSION }} + + - if: steps.changes.outputs.src== 'true' + run: terraform version diff --git a/README.md b/README.md index ba23bfb..da768f2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # AWS Observability Accelerator for Terraform - +[](https://github.com/aws-observability/terraform-aws-observability-accelerator/actions/workflows/pre-commit.yaml) + Welcome to the AWS Observability Accelerator for Terraform! The AWS Observability accelerator for Terraform is a set of modules to help you @@ -114,7 +114,7 @@ If you are interested in contributing to EKS Blueprints, see the [Contribution g | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 0.14.0 | +| [terraform](#requirement\_terraform) | >= 1.1.0, < 1.3.0 | | [aws](#requirement\_aws) | >= 4.0.0 | | [awscc](#requirement\_awscc) | >= 0.24.0 | | [grafana](#requirement\_grafana) | 1.25.0 | diff --git a/examples/eks-cluster-with-vpc/versions.tf b/examples/eks-cluster-with-vpc/versions.tf index 5c7948b..0513174 100644 --- a/examples/eks-cluster-with-vpc/versions.tf +++ b/examples/eks-cluster-with-vpc/versions.tf @@ -1,5 +1,5 @@ terraform { - required_version = ">= 1.0.0" + required_version = ">= 1.1.0, < 1.3.0" required_providers { aws = { diff --git a/examples/existing-cluster-nginx/README.md b/examples/existing-cluster-nginx/README.md index bad5e9c..e9c3821 100644 --- a/examples/existing-cluster-nginx/README.md +++ b/examples/existing-cluster-nginx/README.md @@ -191,10 +191,9 @@ add this `managed_prometheus_region=xxx` and `managed_prometheus_workspace_id=ws | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 1.0.0 | +| [terraform](#requirement\_terraform) | >= 1.1.0, < 1.3.0 | | [aws](#requirement\_aws) | >= 4.0.0 | | [grafana](#requirement\_grafana) | >= 1.25.0 | -| [grafana](#requirement\_grafana) | >= 1.25.0 | | [helm](#requirement\_helm) | >= 2.4.1 | | [kubectl](#requirement\_kubectl) | >= 1.14 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | @@ -224,10 +223,10 @@ add this `managed_prometheus_region=xxx` and `managed_prometheus_workspace_id=ws | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| | [aws\_region](#input\_aws\_region) | AWS Region | `string` | n/a | yes | -| [eks\_cluster\_id](#input\_eks\_cluster\_id) | Name of the EKS cluster | `string` | n/a | yes | +| [eks\_cluster\_id](#input\_eks\_cluster\_id) | EKS Cluster Id | `string` | n/a | yes | | [grafana\_api\_key](#input\_grafana\_api\_key) | API key for authorizing the Grafana provider to make changes to Amazon Managed Grafana | `string` | `""` | no | -| [managed\_grafana\_workspace\_id](#input\_managed\_grafana\_workspace\_id) | Amazon Managed Grafana Workspace ID | `string` | `""` | no | -| [managed\_prometheus\_workspace\_id](#input\_managed\_prometheus\_workspace\_id) | Amazon Managed Service for Prometheus Workspace ID | `string` | `""` | no | +| [managed\_grafana\_workspace\_id](#input\_managed\_grafana\_workspace\_id) | Amazon Managed Grafana (AMG) workspace ID | `string` | `""` | no | +| [managed\_prometheus\_workspace\_id](#input\_managed\_prometheus\_workspace\_id) | Amazon Managed Service for Prometheus (AMP) workspace ID | `string` | `""` | no | ## Outputs diff --git a/examples/existing-cluster-nginx/main.tf b/examples/existing-cluster-nginx/main.tf index 1bad0fb..9e9eebb 100644 --- a/examples/existing-cluster-nginx/main.tf +++ b/examples/existing-cluster-nginx/main.tf @@ -24,23 +24,10 @@ provider "helm" { } } -terraform { - required_providers { - grafana = { - source = "grafana/grafana" - version = ">= 1.25.0" - } - } -} - locals { - name = basename(path.cwd) region = var.aws_region - eks_oidc_issuer_url = replace(data.aws_eks_cluster.this.identity[0].oidc[0].issuer, "https://", "") eks_cluster_endpoint = data.aws_eks_cluster.this.endpoint - eks_cluster_version = data.aws_eks_cluster.this.version - create_new_workspace = var.managed_prometheus_workspace_id == "" ? true : false tags = { @@ -84,7 +71,6 @@ provider "grafana" { auth = var.grafana_api_key } -//* module "workloads_nginx" { source = "../../modules/workloads/nginx" @@ -102,4 +88,3 @@ module "workloads_nginx" { module.eks_observability_accelerator ] } -//*/ diff --git a/examples/existing-cluster-nginx/outputs.tf b/examples/existing-cluster-nginx/outputs.tf index a0aa57e..5df79f3 100644 --- a/examples/existing-cluster-nginx/outputs.tf +++ b/examples/existing-cluster-nginx/outputs.tf @@ -21,4 +21,4 @@ output "managed_prometheus_workspace_endpoint" { output "managed_prometheus_workspace_id" { description = "Amazon Managed Prometheus workspace ID" value = module.eks_observability_accelerator.managed_prometheus_workspace_id -} \ No newline at end of file +} diff --git a/examples/existing-cluster-nginx/variables.tf b/examples/existing-cluster-nginx/variables.tf index d0b11b2..284d486 100644 --- a/examples/existing-cluster-nginx/variables.tf +++ b/examples/existing-cluster-nginx/variables.tf @@ -11,29 +11,14 @@ variable "managed_prometheus_workspace_id" { type = string default = "" } -variable "managed_prometheus_endpoint" { - description = "AMP workspace ID" - type = string - default = "" -} -variable "managed_prometheus_region" { - description = "Region where AMP is deployed" - type = string - default = "" -} variable "managed_grafana_workspace_id" { description = "Amazon Managed Grafana (AMG) workspace ID" type = string default = "" } -variable "grafana_endpoint" { - description = "AMG endpoint" - type = string - default = null -} variable "grafana_api_key" { description = "API key for authorizing the Grafana provider to make changes to Amazon Managed Grafana" type = string default = "" sensitive = true -} \ No newline at end of file +} diff --git a/examples/existing-cluster-nginx/versions.tf b/examples/existing-cluster-nginx/versions.tf new file mode 100644 index 0000000..e5bf819 --- /dev/null +++ b/examples/existing-cluster-nginx/versions.tf @@ -0,0 +1,34 @@ +terraform { + required_version = ">= 1.1.0, < 1.3.0" + + required_providers { + aws = { + source = "hashicorp/aws" + version = ">= 4.0.0" + } + kubernetes = { + source = "hashicorp/kubernetes" + version = ">= 2.10" + } + kubectl = { + source = "gavinbunney/kubectl" + version = ">= 1.14" + } + helm = { + source = "hashicorp/helm" + version = ">= 2.4.1" + } + grafana = { + source = "grafana/grafana" + version = ">= 1.25.0" + } + } + + # ## Used for end-to-end testing on project; update to suit your needs + # backend "s3" { + # bucket = "observability-accelerator-terraform-states" + # region = "us-west-2" + # key = "e2e/existing-cluster-with-base-and-infra/terraform.tfstate" + # } + +} diff --git a/examples/existing-cluster-with-base-and-infra/README.md b/examples/existing-cluster-with-base-and-infra/README.md index 3084e95..00b8211 100644 --- a/examples/existing-cluster-with-base-and-infra/README.md +++ b/examples/existing-cluster-with-base-and-infra/README.md @@ -136,7 +136,7 @@ terraform destroy -var-file=terraform.tfvars | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 1.0.0 | +| [terraform](#requirement\_terraform) | >= 1.1.0, < 1.3.0 | | [aws](#requirement\_aws) | >= 4.0.0 | | [grafana](#requirement\_grafana) | >= 1.25.0 | | [helm](#requirement\_helm) | >= 2.4.1 | diff --git a/examples/existing-cluster-with-base-and-infra/main.tf b/examples/existing-cluster-with-base-and-infra/main.tf index ba55e3d..f150d81 100644 --- a/examples/existing-cluster-with-base-and-infra/main.tf +++ b/examples/existing-cluster-with-base-and-infra/main.tf @@ -86,7 +86,7 @@ module "workloads_infra" { managed_prometheus_workspace_region = module.eks_observability_accelerator.managed_prometheus_workspace_region tags = local.tags - + depends_on = [ module.eks_observability_accelerator ] diff --git a/examples/existing-cluster-with-base-and-infra/versions.tf b/examples/existing-cluster-with-base-and-infra/versions.tf index 9a03294..e5bf819 100644 --- a/examples/existing-cluster-with-base-and-infra/versions.tf +++ b/examples/existing-cluster-with-base-and-infra/versions.tf @@ -1,5 +1,6 @@ terraform { - required_version = ">= 1.0.0" + required_version = ">= 1.1.0, < 1.3.0" + required_providers { aws = { source = "hashicorp/aws" diff --git a/modules/add-ons/adot-operator/README.md b/modules/add-ons/adot-operator/README.md index bc6e31f..bd2e699 100644 --- a/modules/add-ons/adot-operator/README.md +++ b/modules/add-ons/adot-operator/README.md @@ -26,7 +26,7 @@ the ADOT Operator. | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 1.0.0 | +| [terraform](#requirement\_terraform) | >= 1.1.0, < 1.3.0 | | [aws](#requirement\_aws) | >= 3.72 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | diff --git a/modules/add-ons/adot-operator/versions.tf b/modules/add-ons/adot-operator/versions.tf index d2ddf87..ef15df6 100644 --- a/modules/add-ons/adot-operator/versions.tf +++ b/modules/add-ons/adot-operator/versions.tf @@ -1,5 +1,5 @@ terraform { - required_version = ">= 1.0.0" + required_version = ">= 1.1.0, < 1.3.0" required_providers { aws = { diff --git a/modules/workloads/infra/README.md b/modules/workloads/infra/README.md index 7fd0282..2963936 100644 --- a/modules/workloads/infra/README.md +++ b/modules/workloads/infra/README.md @@ -13,7 +13,7 @@ This module is inspired from the open source [kube-prometheus-stack](https://git | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 1.0.0 | +| [terraform](#requirement\_terraform) | >= 1.1.0, < 1.3.0 | | [aws](#requirement\_aws) | >= 4.0.0 | | [grafana](#requirement\_grafana) | >= 1.25.0 | | [helm](#requirement\_helm) | >= 2.4.1 | diff --git a/modules/workloads/infra/versions.tf b/modules/workloads/infra/versions.tf index 3a4f278..8283555 100644 --- a/modules/workloads/infra/versions.tf +++ b/modules/workloads/infra/versions.tf @@ -1,5 +1,6 @@ terraform { - required_version = ">= 1.0.0" + required_version = ">= 1.1.0, < 1.3.0" + required_providers { aws = { source = "hashicorp/aws" diff --git a/modules/workloads/java/README.md b/modules/workloads/java/README.md index 2c2c3ab..536eb5c 100644 --- a/modules/workloads/java/README.md +++ b/modules/workloads/java/README.md @@ -11,7 +11,7 @@ This module provides monitoring for Java based workloads with the following reso | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 1.0.0 | +| [terraform](#requirement\_terraform) | >= 1.1.0, < 1.3.0 | | [aws](#requirement\_aws) | >= 4.0.0 | | [grafana](#requirement\_grafana) | >= 1.25.0 | | [helm](#requirement\_helm) | >= 2.4.1 | @@ -29,7 +29,7 @@ This module provides monitoring for Java based workloads with the following reso | Name | Source | Version | |------|--------|---------| -| [helm\_addon](#module\_helm\_addon) | github.com/aws-ia/terraform-aws-eks-blueprints/modules/kubernetes-addons/helm-addon | n/a | +| [helm\_addon](#module\_helm\_addon) | github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons/helm-addon | v4.8.1 | ## Resources diff --git a/modules/workloads/java/main.tf b/modules/workloads/java/main.tf index 61692eb..0a15492 100644 --- a/modules/workloads/java/main.tf +++ b/modules/workloads/java/main.tf @@ -7,7 +7,7 @@ data "aws_partition" "current" {} # deploys collector module "helm_addon" { - source = "github.com/aws-ia/terraform-aws-eks-blueprints/modules/kubernetes-addons/helm-addon" + source = "github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons/helm-addon?ref=v4.8.1" helm_config = merge( diff --git a/modules/workloads/java/outputs.tf b/modules/workloads/java/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/modules/workloads/java/versions.tf b/modules/workloads/java/versions.tf index 3a4f278..8283555 100644 --- a/modules/workloads/java/versions.tf +++ b/modules/workloads/java/versions.tf @@ -1,5 +1,6 @@ terraform { - required_version = ">= 1.0.0" + required_version = ">= 1.1.0, < 1.3.0" + required_providers { aws = { source = "hashicorp/aws" diff --git a/modules/workloads/nginx/README.md b/modules/workloads/nginx/README.md index df683c6..d665532 100644 --- a/modules/workloads/nginx/README.md +++ b/modules/workloads/nginx/README.md @@ -12,8 +12,9 @@ It provides the following resources: | Name | Version | |------|---------| -| [terraform](#requirement\_terraform) | >= 1.0.0 | +| [terraform](#requirement\_terraform) | >= 1.1.0, < 1.3.0 | | [aws](#requirement\_aws) | >= 4.0.0 | +| [grafana](#requirement\_grafana) | >= 1.25.0 | | [kubernetes](#requirement\_kubernetes) | >= 2.10 | ## Providers @@ -21,27 +22,41 @@ It provides the following resources: | Name | Version | |------|---------| | [aws](#provider\_aws) | >= 4.0.0 | +| [grafana](#provider\_grafana) | >= 1.25.0 | ## Modules | Name | Source | Version | |------|--------|---------| -| [helm\_addon](#module\_helm\_addon) | github.com/aws-ia/terraform-aws-eks-blueprints/modules/kubernetes-addons/helm-addon | n/a | +| [helm\_addon](#module\_helm\_addon) | github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons/helm-addon | v4.9.0 | ## Resources | Name | Type | |------|------| +| [aws_prometheus_rule_group_namespace.alerting_rules](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/prometheus_rule_group_namespace) | resource | +| [grafana_dashboard.workloads](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/dashboard) | resource | +| [aws_caller_identity.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/caller_identity) | data source | +| [aws_eks_cluster.eks_cluster](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/eks_cluster) | data source | | [aws_partition.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/partition) | data source | +| [aws_region.current](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/region) | data source | ## Inputs | Name | Description | Type | Default | Required | |------|-------------|------|---------|:--------:| -| [addon\_context](#input\_addon\_context) | Input configuration for the addon |
object({
aws_caller_identity_account_id = string
aws_caller_identity_arn = string
aws_eks_cluster_endpoint = string
aws_partition_id = string
aws_region_name = string
eks_cluster_id = string
eks_oidc_issuer_url = string
eks_oidc_provider_arn = string
irsa_iam_permissions_boundary = string
irsa_iam_role_path = string
tags = map(string)
}) | n/a | yes |
-| [amazon\_prometheus\_workspace\_endpoint](#input\_amazon\_prometheus\_workspace\_endpoint) | Amazon Managed Prometheus Workspace Endpoint | `string` | `null` | no |
-| [amazon\_prometheus\_workspace\_region](#input\_amazon\_prometheus\_workspace\_region) | Amazon Managed Prometheus Workspace's Region | `string` | `null` | no |
+| [config](#input\_config) | Helm Config for Prometheus | `any` | `{}` | no |
+| [dashboards\_folder\_id](#input\_dashboards\_folder\_id) | Grafana folder ID for automatic dashboards | `string` | n/a | yes |
+| [eks\_cluster\_id](#input\_eks\_cluster\_id) | EKS Cluster Id | `string` | n/a | yes |
+| [enable\_alerting\_rules](#input\_enable\_alerting\_rules) | Enables or disables Managed Prometheus alerting rules | `bool` | `true` | no |
+| [enable\_dashboards](#input\_enable\_dashboards) | Enables or disables curated dashboards | `bool` | `true` | no |
| [helm\_config](#input\_helm\_config) | Helm Config for Prometheus | `any` | `{}` | no |
+| [irsa\_iam\_permissions\_boundary](#input\_irsa\_iam\_permissions\_boundary) | IAM permissions boundary for IRSA roles | `string` | `""` | no |
+| [irsa\_iam\_role\_path](#input\_irsa\_iam\_role\_path) | IAM role path for IRSA roles | `string` | `"/"` | no |
+| [managed\_prometheus\_workspace\_endpoint](#input\_managed\_prometheus\_workspace\_endpoint) | Amazon Managed Prometheus Workspace Endpoint | `string` | `null` | no |
+| [managed\_prometheus\_workspace\_id](#input\_managed\_prometheus\_workspace\_id) | Amazon Managed Prometheus Workspace ID | `string` | `null` | no |
+| [managed\_prometheus\_workspace\_region](#input\_managed\_prometheus\_workspace\_region) | Amazon Managed Prometheus Workspace's Region | `string` | `null` | no |
+| [tags](#input\_tags) | Additional tags (e.g. `map('BusinessUnit`,`XYZ`) | `map(string)` | `{}` | no |
## Outputs
diff --git a/modules/workloads/nginx/dashboards.tf b/modules/workloads/nginx/dashboards.tf
index b923ef8..24ffe6a 100644
--- a/modules/workloads/nginx/dashboards.tf
+++ b/modules/workloads/nginx/dashboards.tf
@@ -2,4 +2,4 @@ resource "grafana_dashboard" "workloads" {
count = var.enable_dashboards ? 1 : 0
folder = var.dashboards_folder_id
config_json = file("${path.module}/dashboards/nginx.json")
-}
\ No newline at end of file
+}
diff --git a/modules/workloads/nginx/dashboards/nginx.json b/modules/workloads/nginx/dashboards/nginx.json
index 9cda933..f0ea4dc 100644
--- a/modules/workloads/nginx/dashboards/nginx.json
+++ b/modules/workloads/nginx/dashboards/nginx.json
@@ -1439,4 +1439,4 @@
"uid": "nginx",
"version": 5,
"weekStart": ""
-}
\ No newline at end of file
+}
diff --git a/modules/workloads/nginx/main.tf b/modules/workloads/nginx/main.tf
index 176e9ba..b4099e7 100644
--- a/modules/workloads/nginx/main.tf
+++ b/modules/workloads/nginx/main.tf
@@ -1,5 +1,5 @@
module "helm_addon" {
- source = "github.com/aws-ia/terraform-aws-eks-blueprints/modules/kubernetes-addons/helm-addon"
+ source = "github.com/aws-ia/terraform-aws-eks-blueprints//modules/kubernetes-addons/helm-addon?ref=v4.9.0"
helm_config = merge(
{
diff --git a/modules/workloads/nginx/rules.tf b/modules/workloads/nginx/rules.tf
index dab099e..266203b 100644
--- a/modules/workloads/nginx/rules.tf
+++ b/modules/workloads/nginx/rules.tf
@@ -1,12 +1,11 @@
-# Prioritize recording rules over alerting rules for limits (10)
-
################################################################################################################################################
-# Recording rules ##############################################################################################################################
+# Alerting rules ###############################################################################################################################
################################################################################################################################################
-resource "aws_prometheus_rule_group_namespace" "recording_rules" {
- count = var.enable_recording_rules ? 1 : 0
- name = "acclerator-nginx-rules"
+resource "aws_prometheus_rule_group_namespace" "alerting_rules" {
+ count = var.enable_alerting_rules ? 1 : 0
+
+ name = "accelerator-nginx-alerting"
workspace_id = var.managed_prometheus_workspace_id
data = <