{"id":28409887,"url":"https://github.com/crowdstrike/logscale-aws","last_synced_at":"2026-01-29T17:32:16.318Z","repository":{"id":279888699,"uuid":"840231758","full_name":"CrowdStrike/logscale-aws","owner":"CrowdStrike","description":"AWS Infrastructure automation for LogScale","archived":false,"fork":false,"pushed_at":"2026-01-26T23:54:26.000Z","size":49,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-27T10:39:01.410Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CrowdStrike.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-09T08:51:13.000Z","updated_at":"2026-01-26T23:54:26.000Z","dependencies_parsed_at":null,"dependency_job_id":"70dab526-2a9c-48bb-9503-8cd054f66daf","html_url":"https://github.com/CrowdStrike/logscale-aws","commit_stats":null,"previous_names":["crowdstrike/logscale-aws"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/CrowdStrike/logscale-aws","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrowdStrike%2Flogscale-aws","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrowdStrike%2Flogscale-aws/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrowdStrike%2Flogscale-aws/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrowdStrike%2Flogscale-aws/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CrowdStrike","download_url":"https://codeload.github.com/CrowdStrike/logscale-aws/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CrowdStrike%2Flogscale-aws/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28881982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T16:41:59.663Z","status":"ssl_error","status_checked_at":"2026-01-29T16:39:39.641Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-02T11:08:53.312Z","updated_at":"2026-01-29T17:32:16.313Z","avatar_url":"https://github.com/CrowdStrike.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CrowdStrike Falcon](https://raw.githubusercontent.com/CrowdStrike/falconpy/main/docs/asset/cs-logo.png)]((https://www.crowdstrike.com/)) [![Twitter URL](https://img.shields.io/twitter/url?label=Follow%20%40CrowdStrike\u0026style=social\u0026url=https%3A%2F%2Ftwitter.com%2FCrowdStrike)](https://twitter.com/CrowdStrike)\u003cbr/\u003e\n\n# LogScale Reference Automations for AWS\n\n\nThis repository contains Terraform configurations to deploy a comprehensive AWS-based architecture for LogScale. It leverages multiple AWS services such as EKS, MSK, and S3, as well as Kubernetes components like cert-manager and Helm to create a scalable, secure and robust logscale deployment on AWS.\n\n## Prerequisites\n\nBefore starting the deployment, ensure you have the following tools and access:\n\n- **Terraform 1.5.7+**: Terraform is the infrastructure as code tool used to manage the deployment. Ensure you have version 1.1.0 or higher installed.\n- **kubectl 1.27+**: kubectl is the command-line tool for interacting with the Kubernetes cluster. Make sure you have version 1.22 or above.\n- **AWS CLI 1.32+**: The AWS Command Line Interface (CLI) allows you to interact with AWS services from the command line. Version 2 or higher is recommended.\n- **Helm v3**: Helm is the package manager for Kubernetes, used to manage Kubernetes applications. Ensure you have version 3 or higher installed.\n- **Access to an AWS account**: You need access to an AWS account with permissions to create and manage the necessary resources such as VPCs, EKS clusters, MSK clusters, and S3 buckets.\n\n\n## Terraform Code Execution\n1. #### Setup steps\n    1.1 Ensure an AWS Route 53 public zone is created and add its name to `zonename` in `example.tfvars`.\n\n    1.2 Ensure a S3 bucket is created to hold the terraform state, and add its name to `bucket` under the backend configuration section from `versions.tf`.\n\n    1.3 Ensure a Dynamodb table with partition key `LockID` is created to hold the terraform lock, and add its name to `dynamodb_table` under the backend configuration section from `versions.tf`.\n\n    1.4 Configure the following variables in the `example.tfvars` file: `hostname`, `cluster_name`, `msk_cluster_name`, `vpc_name` and `aws_region`.\n\n    1.5 Export the LogScale license as a Terraform environment variable:\n    ```bash\n    export TF_VAR_humiocluster_license=\u003cyour_logscale_license\u003e\n    ```\n    1.6. Create and switch to a new Terraform workspace:\n    ```bash\n    terraform workspace new \u003cworkspace_name\u003e\n    terraform workspace select \u003cworkspace_name\u003e\n    ```\n2. #### Deployment steps\n\n    Run the following Terraform commands against each Terraform module in sequence to provision the EKS cluster and deploy the LogScale application:\n\n    2.1 Initialize Terraform\n    ```bash\n    terraform init\n    ```\n\n    2.2 Plan the Terraform deployment\n    ```bash\n    terraform plan\n    ```\n    Or you could target a specific module\n    ```bash\n    terraform plan -target=\"module.vpc\"\n    ```\n\n    2.3 Deploy VPC\n    ```bash\n    terraform apply -target=\"module.vpc\"\n    ```\n\n    2.4 Deploy MSK cluster\n    ```bash\n    terraform apply -target=\"module.msk\"\n    ```\n\n    2.5 Build EKS cluster\n    ```bash\n    terraform apply -target=\"module.eks\"\n    ```\n\n    2.6 Deploy CRDs\n\n    * Observation : You may need to update the local .kube/config if running this command locally\n\n    ```bash\n    aws eks update-kubeconfig --name \"\u003cyour-eks-cluster-name\u003e\" --region \u003cyour-region\u003e\n    Updated context arn:aws:eks:\u003cregion\u003e:\u003cid\u003e:cluster/\u003cyour-eks-cluster-name\u003e in /Users/\u003clocal_user\u003e/.kube/config\n    ```\n\n    ```bash\n    terraform apply -target=\"module.crds\n    ```\n\n    2.7 Deploy LogScale\n    ```bash\n    terraform apply -target=\"module.logscale\"\n    ```\n\n\n## Repository Structure\n\n- `main.tf`: Contains the main Terraform configuration and module definitions for setting up the VPC, EKS, MSK, CRDs, and LogScale.\n- `providers.tf`: Configures the necessary providers for the Terraform configuration.\n- `variables.tf`: Declares the variables used in the Terraform configuration.\n- `outputs.tf`: Specifies the outputs for the Terraform run.\n- `locals.tf`: Contains local variables and templates for cluster size configurations.\n- `cluster_size.tpl`: Template file specifying the available parameters for different sizes of LogScale clusters.\n- `terraform.tfvars`: Variable values for the configuration.\n- `versions.tf`: Specifies the required versions of Terraform and providers.\n\n### Cluster Size Configuration\n\nThe `cluster_size.tpl` file specifies the available parameters for different sizes of LogScale clusters. This template defines various cluster sizes (e.g., xsmall, small, medium, large, xlarge) and their associated configurations, including node counts, instance types, disk sizes, and resource limits. The Terraform configuration uses this template to dynamically configure the LogScale deployment based on the selected cluster size.\n\n- **File:** `cluster_size.tpl`\n- **Usage:**\n  The data from `cluster_size.tpl` is retrieved and rendered by the `locals.tf` file. The `locals.tf` file uses the `jsondecode` function to parse the template and select the appropriate cluster size configuration based on the `logscale_cluster_size` variable.\n\n- **Example:**\n```hcl\n  # Local Variables\n  locals {\n    # Render a template of available cluster sizes\n    cluster_size_template = jsondecode(templatefile(\"${path.module}/cluster_size.tpl\", {}))\n    cluster_size_rendered = {\n      for key in keys(local.cluster_size_template) :\n      key =\u003e local.cluster_size_template[key]\n    }\n    cluster_size_selected = local.cluster_size_rendered[var.logscale_cluster_size]\n  }\n```\n\n## Modules\n\n### VPC Module\nThis module provisions the necessary networking components for the infrastructure, including both private and public subnets across three availability zones. This setup ensures high availability and fault tolerance for the deployed resources. Additionally, the `main.tf` file within the VPC module contains the declaration of security groups that manage inbound and outbound traffic for the instances within the VPC. These security groups are configured to allow only necessary traffic, enhancing the security posture of the deployed environment. Specific rules are defined to control access based on protocol, port range, and source/destination IP addresses.\n- **Source:** `./modules/aws/vpc`\n- **Variables:**\n  - `name`: Name of the VPC\n  - `vpc_cidr`: CIDR block for the VPC\n  - `cluster_name`: The name of the LogScale cluster\n  - `tags`: Tags for the VPC resources\n\n### MSK Module\nThis module provisions an Amazon Managed Streaming for Apache Kafka (MSK) cluster, which is required by LogScale for reliable and scalable data streaming. MSK ensures efficient handling of large volumes of log data, enabling LogScale to process and analyze logs in real-time. For more information, you can refer to the [LogScale MSK installation guide](https://library.humio.com/falcon-logscale-self-hosted/installation-baremetal-msk.html?redirected=true?redirected=true).\n- **Source:** `./modules/aws/msk`\n- **Variables:**\n    - `cluster_name`: Name of the LogScale cluster\n    - `private_subnets`: Private subnets for the MSK cluster\n    - `broker_node_instance_type`: Instance type for the Kafka brokers\n    - `msk_number_of_broker_nodes`: Number of Kafka brokers\n    - `msk_cluster_name`: Name of the MSK cluster\n    - `msk_sg_id`: Security group ID for the MSK cluster\n    - `msk_node_volume_size`: Size of the MSK node disk volume\n    - `kafka_version`: Kafka software version\n\n\n### EKS Module\nSets up the Amazon EKS cluster and associated resources. This module performs the following tasks:\n- **Creates IAM Roles:** The module provisions several IAM roles necessary for the EKS cluster operations, including roles for the EKS control plane, worker nodes, ExternalDNS, and service accounts used by various Kubernetes services. These roles ensure proper permissions and security for cluster operations.\n- **Creates ACM Certificate:** An AWS Certificate Manager (ACM) certificate is created to be used by the ingress controller for secure HTTPS communication within the cluster.\n- **Creates EKS Cluster and Managed Node Groups:** The module provisions the EKS cluster along with managed node groups. The managed node groups consist of EC2 instances that serve as worker nodes for the EKS cluster, automatically managed and updated by AWS to ensure high availability and security.\n- **Creates S3 Bucket:** An S3 bucket is created to be used by LogScale to store segment files, ensuring durable and scalable storage for log data.\n- **Source:** `./modules/aws/eks`\n- **Variables:**\n    - `vpc_id`: VPC ID for the EKS cluster\n    - `cluster_name`: Name of the EKS cluster\n    - `cluster_version`: Kubernetes version for the EKS cluster\n    - `private_subnets`: Private subnets for the EKS nodes\n    - `intra_subnets`: Subnets used for intranet communication\n    - `ami_type`: AMI used for EKS nodes\n    - `*_node_desired_capacity`, `*_node_max_capacity`, `*_node_min_capacity`: Node scaling settings\n    - `logscale_node_root_volume_size`: Root disk volume size for LogScale nodes\n    - `*logscale_node_root_volume_type`: Root disk volume type for LogScale nodes\n    - `*_instance_type`: Node instance type\n    - `hostname`: Hostname of the LogScale cluster\n    - `zone_name`: Route53 hosted zone domain name\n    - `msk_sg_id`: Security group ID for the MSK cluster\n    - `route53_record_ttl`: TTL for the hostname.zone_name domain  \n    - `s3_bucket_prefix`: The prefix of the LogScale S3 bucket\n\n\n### CRDs Module\nhis module deploys the Custom Resource Definitions (CRDs) for Kubernetes required for cert-manager and Humio. CRDs extend the Kubernetes API to manage and automate the deployment of these custom resources within the cluster.\n- **Source:** `./modules/kubernetes/crds`\n- **Variables:**\n    - `humio_operator_version`: Version of the Humio operator\n    - `cluster_endpoint`: EKS cluster endpoint\n\n### LogScale Module\nDeploys the LogScale application on the EKS cluster.\n- **Source:** `./modules/kubernetes/logscale`\n- **Variables:**\n    - `aws_region`, `aws_profile`: AWS region and profile for the deployment\n    - `cluster_name`: Name of the EKS cluster\n    - `cluster_endpoint`, `cluster_certificate_authority_data`: Cluster endpoint and CA data\n    - `humio_operator_chart_version`, `humio_operator_version`, `logscale_operator_repo`, `humio_operator_extra_values`: Humio operator versions\n    - `ca_server`, `issuer_name`, `issuer_email`, `issuer_kind`, `issuer_private_key`: Certificate issuer details\n    - `cm_namespace`, `cm_repo`, `cm_version`, `issuer_kind`, `issuer_private_key`: Certificate Manager details\n    - `external_dns_iam_role_arn`: The ARN of the IAM role used by ExternalDNS\n    - `zone_name`: Route53 hosted zone domain name\n    - `logscale_namespace`: Namespace for LogScale\n    - `logscale_cluster_type`: Type of the LogScale cluster\n    - `acm_certificate_arn`: The Amazon Resource Name (ARN) of the ACM certificate issued by ingress\n    - `s3_bucket_prefix`: The ID of the LogScale S3 bucket\n    - `msk_bootstrap_brokers`: MSK Bootstrap brokers address\n    - `service_account_aws_iam_role_arn`: The Amazon Resource Name (ARN) of the IAM role for the logscale service account\n    - `eks_lb_controller_role_arn`: The Amazon Resource Name (ARN) of the IAM role for the LB controller\n    - `humiocluster_license`: LogScale license\n    - `zookeeper_connect_string`: Connection string to the MSK Zookeeper cluster\n    - `hostname`: Hostname of the LogScale cluster\n\n\n## Terraform Variables in `terraform.tfvars`\n\n| Variable Name                       | Description                                    | Type           | Default Value          |\n|-------------------------------------|------------------------------------------------|----------------|------------------------|\n| `tags`                              | Tags for AWS resources                         | map(string)    |                        |\n| `aws_region`                        | AWS region                                     | string         | `us-west-2`            |\n| `aws_profile`                       | AWS profile                                    | string         | `sandbox`              |\n| `vpc_name`                          | Name of the VPC                                | string         | `logscale-eks-vpc`              |\n| `vpc_cidr`                          | CIDR block for the VPC                         | string         | `10.0.0.0/16`          |\n| `cluster_name`                      | Name of the EKS cluster                        | string         |                        |\n| `cluster_version`                   | Kubernetes version for the EKS cluster         | string         | `1.29`                 |\n| `ami_type`                          | AMI used for EKS nodes                         | string         | `AL2_x86_64`           |\n| `logscale_namespace`                | Namespace for LogScale                         | string         | `logging`              |\n| `cm_namespace`                      | Namespace for cert-manager                     | string         | `cert-manager`         |\n| `cm_repo`                           | Repository for cert-manager                    | string         | `https://charts.jetstack.io` |\n| `cm_version`                        | Version of cert-manager                        | string         | `v1.15.1`              |\n| `logscale_operator_repo`            | Repository for LogScale operator               | string         | `https://humio.github.io/humio-operator` |\n| `issuer_kind`                       | Kind of certificate issuer                     | string         | `ClusterIssuer`        |\n| `issuer_name`                       | Name of certificate issuer                     | string         | `letsencrypt-cluster-issuer` |\n| `issuer_email`                      | Email of certificate issuer                    | string         |                        |\n| `issuer_private_key`                | Private key for certificate issuer             | string         | `letsencrypt-cluster-issuer-key` |\n| `ca_server`                         | CA server                                      | string         | `https://acme-v02.api.letsencrypt.org/directory` |\n| `humio_operator_chart_version`      | Version of the Humio operator chart            | string         | `0.22.0`               |\n| `humio_operator_version`            | Version of the Humio operator                  | string         | `0.22.0`               |\n| `humio_operator_extra_values`       | Extra values for Humio operator                | map(string)    | `cpu: 250m, mem: 750Mi` |\n| `logscale_cluster_type`             | Type of the LogScale cluster                   | string         | `basic`                |\n| `kafka_version`                     | Kafka version                                  | string         | `3.5.1`                |\n| `msk_cluster_name`                  | Name of the MSK cluster                        | string         | `msk-cluster`          |\n| `zone_name`                         | Route53 hosted zone domain name                | string         |                        |\n| `hostname`                          | Hostname of the LogScale cluster               | string         |                        |\n| `route53_record_ttl`                | TTL for the hostname.zone_name domain          | number         | 60                     |\n\n\n## References\n- [Cert Manager Documentation](https://cert-manager.io/docs/)\n- [ExternalDNS Documentation](https://kubernetes-sigs.github.io/external-dns/v0.14.2/)\n- [MSK Documentation](https://docs.aws.amazon.com/msk/latest/developerguide/what-is-msk.html)\n- [EKS Documentation](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html)\n- [LogScale Deployment on AWS](https://library.humio.com/falcon-logscale-self-hosted-1.82/installation-containers-kubernetes-operator-aws-install.html)\n- [Humio Operator](https://github.com/humio/humio-operator)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrowdstrike%2Flogscale-aws","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrowdstrike%2Flogscale-aws","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrowdstrike%2Flogscale-aws/lists"}