Skip to content

Commit d2e33bb

Browse files
authored
feat: Add ability to track usage telemetry of EKS Blueprint solutions (#423)
1 parent aa60bf2 commit d2e33bb

File tree

8 files changed

+66
-51
lines changed

8 files changed

+66
-51
lines changed

.github/workflows/pre-commit.yaml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ on:
1212
permissions: read-all
1313

1414
env:
15-
TERRAFORM_DOCS_VERSION: v0.16.0
16-
TFLINT_VERSION: v0.50.3
15+
TERRAFORM_DOCS_VERSION: v0.19.0
16+
TFLINT_VERSION: v0.53.0
1717

1818
concurrency:
1919
group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
@@ -31,7 +31,7 @@ jobs:
3131

3232
- name: Get root directories
3333
id: dirs
34-
uses: clowdhaus/terraform-composite-actions/directories@v1.9.0
34+
uses: clowdhaus/terraform-composite-actions/directories@v1.11.1
3535

3636
preCommitMinVersions:
3737
name: Min TF pre-commit
@@ -58,22 +58,22 @@ jobs:
5858
- '${{ matrix.directory }}/*.tf'
5959
6060
- name: Terraform min/max versions
61-
uses: clowdhaus/[email protected].0
61+
uses: clowdhaus/[email protected].1
6262
if: steps.changes.outputs.src== 'true'
6363
id: minMax
6464
with:
6565
directory: ${{ matrix.directory }}
6666

6767
- name: Pre-commit Terraform ${{ steps.minMax.outputs.minVersion }}
68-
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.9.0
68+
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.11.1
6969
# Run only validate pre-commit check on min version supported
7070
if: ${{ matrix.directory != '.' && steps.changes.outputs.src== 'true' }}
7171
with:
7272
terraform-version: ${{ steps.minMax.outputs.minVersion }}
7373
args: 'terraform_validate --color=always --show-diff-on-failure --files ${{ matrix.directory }}/*'
7474

7575
- name: Pre-commit Terraform ${{ steps.minMax.outputs.minVersion }}
76-
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.9.0
76+
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.11.1
7777
# Run only validate pre-commit check on min version supported
7878
if: ${{ matrix.directory == '.' && steps.changes.outputs.src== 'true' }}
7979
with:
@@ -100,11 +100,11 @@ jobs:
100100
101101
- name: Terraform min/max versions
102102
id: minMax
103-
uses: clowdhaus/[email protected].0
103+
uses: clowdhaus/[email protected].1
104104
if: steps.changes.outputs.src== 'true'
105105

106106
- name: Pre-commit Terraform ${{ steps.minMax.outputs.maxVersion }}
107-
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.9.0
107+
uses: clowdhaus/terraform-composite-actions/pre-commit@v1.11.1
108108
if: steps.changes.outputs.src== 'true'
109109
with:
110110
terraform-version: ${{ steps.minMax.outputs.maxVersion }}

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
repos:
22
- repo: https://github.com/pre-commit/pre-commit-hooks
3-
rev: v4.6.0
3+
rev: v5.0.0
44
hooks:
55
- id: trailing-whitespace
66
args: ['--markdown-linebreak-ext=md']

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ module "eks" {
123123
|------|------|
124124
| [aws_autoscaling_group_tag.aws_node_termination_handler](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_group_tag) | resource |
125125
| [aws_autoscaling_lifecycle_hook.aws_node_termination_handler](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/autoscaling_lifecycle_hook) | resource |
126+
| [aws_cloudformation_stack.usage_telemetry](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudformation_stack) | resource |
126127
| [aws_cloudwatch_event_rule.aws_node_termination_handler](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_event_rule) | resource |
127128
| [aws_cloudwatch_event_rule.karpenter](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_event_rule) | resource |
128129
| [aws_cloudwatch_event_target.aws_node_termination_handler](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/cloudwatch_event_target) | resource |
@@ -182,7 +183,7 @@ module "eks" {
182183
| <a name="input_bottlerocket_shadow"></a> [bottlerocket\_shadow](#input\_bottlerocket\_shadow) | Bottlerocket Update Operator CRDs configuration values | `any` | `{}` | no |
183184
| <a name="input_bottlerocket_update_operator"></a> [bottlerocket\_update\_operator](#input\_bottlerocket\_update\_operator) | Bottlerocket Update Operator add-on configuration values | `any` | `{}` | no |
184185
| <a name="input_cert_manager"></a> [cert\_manager](#input\_cert\_manager) | cert-manager add-on configuration values | `any` | `{}` | no |
185-
| <a name="input_cert_manager_route53_hosted_zone_arns"></a> [cert\_manager\_route53\_hosted\_zone\_arns](#input\_cert\_manager\_route53\_hosted\_zone\_arns) | List of Route53 Hosted Zone ARNs that are used by cert-manager to create DNS records | `list(string)` | <pre>[<br> "arn:aws:route53:::hostedzone/*"<br>]</pre> | no |
186+
| <a name="input_cert_manager_route53_hosted_zone_arns"></a> [cert\_manager\_route53\_hosted\_zone\_arns](#input\_cert\_manager\_route53\_hosted\_zone\_arns) | List of Route53 Hosted Zone ARNs that are used by cert-manager to create DNS records | `list(string)` | <pre>[<br/> "arn:aws:route53:::hostedzone/*"<br/>]</pre> | no |
186187
| <a name="input_cluster_autoscaler"></a> [cluster\_autoscaler](#input\_cluster\_autoscaler) | Cluster Autoscaler add-on configuration values | `any` | `{}` | no |
187188
| <a name="input_cluster_endpoint"></a> [cluster\_endpoint](#input\_cluster\_endpoint) | Endpoint for your Kubernetes API server | `string` | n/a | yes |
188189
| <a name="input_cluster_name"></a> [cluster\_name](#input\_cluster\_name) | Name of the EKS cluster | `string` | n/a | yes |
@@ -225,9 +226,9 @@ module "eks" {
225226
| <a name="input_external_dns"></a> [external\_dns](#input\_external\_dns) | external-dns add-on configuration values | `any` | `{}` | no |
226227
| <a name="input_external_dns_route53_zone_arns"></a> [external\_dns\_route53\_zone\_arns](#input\_external\_dns\_route53\_zone\_arns) | List of Route53 zones ARNs which external-dns will have access to create/manage records (if using Route53) | `list(string)` | `[]` | no |
227228
| <a name="input_external_secrets"></a> [external\_secrets](#input\_external\_secrets) | External Secrets add-on configuration values | `any` | `{}` | no |
228-
| <a name="input_external_secrets_kms_key_arns"></a> [external\_secrets\_kms\_key\_arns](#input\_external\_secrets\_kms\_key\_arns) | List of KMS Key ARNs that are used by Secrets Manager that contain secrets to mount using External Secrets | `list(string)` | <pre>[<br> "arn:aws:kms:*:*:key/*"<br>]</pre> | no |
229-
| <a name="input_external_secrets_secrets_manager_arns"></a> [external\_secrets\_secrets\_manager\_arns](#input\_external\_secrets\_secrets\_manager\_arns) | List of Secrets Manager ARNs that contain secrets to mount using External Secrets | `list(string)` | <pre>[<br> "arn:aws:secretsmanager:*:*:secret:*"<br>]</pre> | no |
230-
| <a name="input_external_secrets_ssm_parameter_arns"></a> [external\_secrets\_ssm\_parameter\_arns](#input\_external\_secrets\_ssm\_parameter\_arns) | List of Systems Manager Parameter ARNs that contain secrets to mount using External Secrets | `list(string)` | <pre>[<br> "arn:aws:ssm:*:*:parameter/*"<br>]</pre> | no |
229+
| <a name="input_external_secrets_kms_key_arns"></a> [external\_secrets\_kms\_key\_arns](#input\_external\_secrets\_kms\_key\_arns) | List of KMS Key ARNs that are used by Secrets Manager that contain secrets to mount using External Secrets | `list(string)` | <pre>[<br/> "arn:aws:kms:*:*:key/*"<br/>]</pre> | no |
230+
| <a name="input_external_secrets_secrets_manager_arns"></a> [external\_secrets\_secrets\_manager\_arns](#input\_external\_secrets\_secrets\_manager\_arns) | List of Secrets Manager ARNs that contain secrets to mount using External Secrets | `list(string)` | <pre>[<br/> "arn:aws:secretsmanager:*:*:secret:*"<br/>]</pre> | no |
231+
| <a name="input_external_secrets_ssm_parameter_arns"></a> [external\_secrets\_ssm\_parameter\_arns](#input\_external\_secrets\_ssm\_parameter\_arns) | List of Systems Manager Parameter ARNs that contain secrets to mount using External Secrets | `list(string)` | <pre>[<br/> "arn:aws:ssm:*:*:parameter/*"<br/>]</pre> | no |
231232
| <a name="input_fargate_fluentbit"></a> [fargate\_fluentbit](#input\_fargate\_fluentbit) | Fargate fluentbit add-on config | `any` | `{}` | no |
232233
| <a name="input_fargate_fluentbit_cw_log_group"></a> [fargate\_fluentbit\_cw\_log\_group](#input\_fargate\_fluentbit\_cw\_log\_group) | AWS Fargate Fluentbit CloudWatch Log Group configurations | `any` | `{}` | no |
233234
| <a name="input_gatekeeper"></a> [gatekeeper](#input\_gatekeeper) | Gatekeeper add-on configuration | `any` | `{}` | no |
@@ -240,6 +241,7 @@ module "eks" {
240241
| <a name="input_karpenter_sqs"></a> [karpenter\_sqs](#input\_karpenter\_sqs) | Karpenter SQS queue for native node termination handling configuration values | `any` | `{}` | no |
241242
| <a name="input_kube_prometheus_stack"></a> [kube\_prometheus\_stack](#input\_kube\_prometheus\_stack) | Kube Prometheus Stack add-on configurations | `any` | `{}` | no |
242243
| <a name="input_metrics_server"></a> [metrics\_server](#input\_metrics\_server) | Metrics Server add-on configurations | `any` | `{}` | no |
244+
| <a name="input_observability_tag"></a> [observability\_tag](#input\_observability\_tag) | Tag to identify EKS Blueprints usage within observability tools | `string` | `"qs-1ubotj5kl"` | no |
243245
| <a name="input_oidc_provider_arn"></a> [oidc\_provider\_arn](#input\_oidc\_provider\_arn) | The ARN of the cluster OIDC Provider | `string` | n/a | yes |
244246
| <a name="input_secrets_store_csi_driver"></a> [secrets\_store\_csi\_driver](#input\_secrets\_store\_csi\_driver) | CSI Secrets Store Provider add-on configurations | `any` | `{}` | no |
245247
| <a name="input_secrets_store_csi_driver_provider_aws"></a> [secrets\_store\_csi\_driver\_provider\_aws](#input\_secrets\_store\_csi\_driver\_provider\_aws) | CSI Secrets Store Provider add-on configurations | `any` | `{}` | no |

main.tf

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3814,3 +3814,26 @@ module "bottlerocket_update_operator" {
38143814
# https://github.com/bottlerocket-os/bottlerocket-update-operator/tree/develop/deploy/charts/bottlerocket-update-operator
38153815
depends_on = [module.bottlerocket_shadow]
38163816
}
3817+
3818+
################################################################################
3819+
# Usage Telemetry
3820+
################################################################################
3821+
3822+
resource "aws_cloudformation_stack" "usage_telemetry" {
3823+
count = var.observability_tag != null ? 1 : 0
3824+
3825+
name = var.cluster_name
3826+
3827+
on_failure = "DO_NOTHING"
3828+
template_body = jsonencode({
3829+
AWSTemplateFormatVersion = "2010-09-09",
3830+
Description = "Usage telemetry for EKS Blueprints. (${var.observability_tag})",
3831+
Resources = {
3832+
EmptyResource = {
3833+
Type = "AWS::CloudFormation::WaitConditionHandle"
3834+
}
3835+
}
3836+
})
3837+
3838+
tags = var.tags
3839+
}

tests/complete/README.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,25 +32,24 @@ terraform destroy
3232

3333
| Name | Version |
3434
|------|---------|
35-
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3 |
36-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.38 |
37-
| <a name="requirement_helm"></a> [helm](#requirement\_helm) | >= 2.8 |
35+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.3.2 |
36+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.70 |
37+
| <a name="requirement_helm"></a> [helm](#requirement\_helm) | >= 2.9 |
3838
| <a name="requirement_kubernetes"></a> [kubernetes](#requirement\_kubernetes) | >= 2.20 |
3939

4040
## Providers
4141

4242
| Name | Version |
4343
|------|---------|
44-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.38 |
45-
| <a name="provider_aws.virginia"></a> [aws.virginia](#provider\_aws.virginia) | >= 5.38 |
44+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.70 |
45+
| <a name="provider_aws.virginia"></a> [aws.virginia](#provider\_aws.virginia) | >= 5.70 |
4646

4747
## Modules
4848

4949
| Name | Source | Version |
5050
|------|--------|---------|
51-
| <a name="module_adot_irsa"></a> [adot\_irsa](#module\_adot\_irsa) | terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks | ~> 5.20 |
5251
| <a name="module_ebs_csi_driver_irsa"></a> [ebs\_csi\_driver\_irsa](#module\_ebs\_csi\_driver\_irsa) | terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks | ~> 5.20 |
53-
| <a name="module_eks"></a> [eks](#module\_eks) | terraform-aws-modules/eks/aws | ~> 20.4 |
52+
| <a name="module_eks"></a> [eks](#module\_eks) | terraform-aws-modules/eks/aws | ~> 20.26 |
5453
| <a name="module_eks_blueprints_addons"></a> [eks\_blueprints\_addons](#module\_eks\_blueprints\_addons) | ../../ | n/a |
5554
| <a name="module_velero_backup_s3_bucket"></a> [velero\_backup\_s3\_bucket](#module\_velero\_backup\_s3\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 3.0 |
5655
| <a name="module_vpc"></a> [vpc](#module\_vpc) | terraform-aws-modules/vpc/aws | ~> 5.0 |

tests/complete/main.tf

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,13 @@ provider "helm" {
3434
}
3535
}
3636

37-
data "aws_availability_zones" "available" {}
37+
data "aws_availability_zones" "available" {
38+
# Do not include local zones
39+
filter {
40+
name = "opt-in-status"
41+
values = ["opt-in-not-required"]
42+
}
43+
}
3844

3945
data "aws_ecrpublic_authorization_token" "token" {
4046
provider = aws.virginia
@@ -82,10 +88,6 @@ module "eks_blueprints_addons" {
8288
most_recent = true
8389
}
8490
kube-proxy = {}
85-
adot = {
86-
most_recent = true
87-
service_account_role_arn = module.adot_irsa.iam_role_arn
88-
}
8991
}
9092

9193
enable_aws_efs_csi_driver = true
@@ -237,10 +239,10 @@ module "eks_blueprints_addons" {
237239

238240
module "eks" {
239241
source = "terraform-aws-modules/eks/aws"
240-
version = "~> 20.4"
242+
version = "~> 20.26"
241243

242244
cluster_name = local.name
243-
cluster_version = "1.29"
245+
cluster_version = "1.31"
244246
cluster_endpoint_public_access = true
245247

246248
vpc_id = module.vpc.vpc_id
@@ -359,24 +361,3 @@ module "ebs_csi_driver_irsa" {
359361

360362
tags = local.tags
361363
}
362-
363-
module "adot_irsa" {
364-
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
365-
version = "~> 5.20"
366-
367-
role_name_prefix = "${local.name}-adot-"
368-
369-
role_policy_arns = {
370-
prometheus = "arn:aws:iam::aws:policy/AmazonPrometheusRemoteWriteAccess"
371-
xray = "arn:aws:iam::aws:policy/AWSXrayWriteOnlyAccess"
372-
cloudwatch = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
373-
}
374-
oidc_providers = {
375-
main = {
376-
provider_arn = module.eks.oidc_provider_arn
377-
namespace_service_accounts = ["opentelemetry-operator-system:opentelemetry-operator"]
378-
}
379-
}
380-
381-
tags = local.tags
382-
}

tests/complete/versions.tf

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
terraform {
2-
required_version = ">= 1.3"
2+
required_version = ">= 1.3.2"
33

44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.38"
7+
version = ">= 5.70"
88
}
99
helm = {
1010
source = "hashicorp/helm"
11-
version = ">= 2.8"
11+
version = ">= 2.9"
1212
}
1313
kubernetes = {
1414
source = "hashicorp/kubernetes"

variables.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,3 +609,13 @@ variable "create_kubernetes_resources" {
609609
type = bool
610610
default = true
611611
}
612+
613+
################################################################################
614+
# Usage Telemetry
615+
################################################################################
616+
617+
variable "observability_tag" {
618+
description = "Tag to identify EKS Blueprints usage within observability tools"
619+
type = string
620+
default = "qs-1ubotj5kl"
621+
}

0 commit comments

Comments
 (0)